数据迁移至机器视觉模型训练

在许多情况下,高质量的生产图像数据已经存在于内部系统或数据库中,只待解锁计算机视觉用例。今天,将介绍如何将Databricks SQL仓库中的图像数据上传到Roboflow项目中,以启用自定义计算机视觉模型的训练。为了跟随本教程,假设已经配置了Databricks工作区,并将图像数据作为二进制存储在表中。还假设有访问Databricks的个人访问令牌,并具有正确的读取权限。最后,假设已经拥有Roboflow账户,创建了项目,并可以访问Roboflow API密钥。有了这些假设,让开始吧。

安装依赖

在本文中,将使用Databricks SQL Connector for Python连接到Databricks,并使用Roboflow Python Package将图像和标签上传到Roboflow项目中。最后,将安装tqdm来显示上传过程中的加载条。可以通过运行以下命令使用pip安装这些依赖。

pip install -q roboflow databricks-sql-connector tqdm

Databricks环境变量

为了使用sql连接器连接到Databricks SQL仓库,需要三件数据。首先,需要一些连接到Databricks计算资源的连接细节;具体来说,是服务器主机名和http路径。这些信息可以通过遵循Databricks文档找到。还需要一个个人访问令牌来认证资源,可以通过遵循这些步骤创建。一旦有了这些凭据,让连接到Databricks。

连接到Databricks

已经拥有了开始查询数据库所需的所有数据。让使用DESCRIBE查询表,以获取有关表内容的更多信息。这应该返回包括列名和数据类型在内的信息。

from databricks import sql sql_statement = """ DESCRIBE nicks_test_workspace.default.images; """ with sql.connect(server_hostname=server_hostname, http_path=http_path, access_token=access_token) as connection: with connection.cursor() as cursor: cursor.execute(sql_statement) results = cursor.fetchall() print(results)

注意正在使用sql连接和环境变量来连接到表。可以看到这张表有四个列:“ID”是int类型,“bytes”是二进制类型,“raccoon_name”是varchar(255)类型,“weight”是float类型。现在已经连接到了数据库,并且有能力运行sql查询,让确保拥有上传图像数据到Roboflow项目所需的所有环境变量。

Roboflow环境变量

为了上传图像数据到Roboflow,需要工作区ID,项目ID和一个API密钥。首先,让通过遵循这些指示获取Roboflow私有API密钥。还需要“工作区ID”和“项目ID”,这些可以在此处找到。这些信息也可以在项目页面的URL中找到,如下所示:https://app.roboflow.com/{workspace_id}/{project_id}/annotate。

从Databricks上传图像到Roboflow

现在已经收集了Roboflow信息,让上传图像到项目中。首先,将更改sql语句,以从表中提取“raccoon_name”和“weight”,并使用一个函数将响应解析为对图像有用的标签。还将保存字节到一个python临时文件,以便利用Roboflow python包进行上传。注意还在获取返回的图像总数,以帮助进度条获得反馈。

from databricks import sql from roboflow import Roboflow from tqdm import tqdm import tempfile from pathlib import Path def parse_tags(data_dict): # Remove 'bytes' key from the dictionary if 'bytes' in data_dict: del data_dict['bytes'] # Create a list with concatenated key-value pairs tags = [f'{key}: {value}' for key, value in data_dict.items()] return tags # Initialize roboflow python client rf = Roboflow(api_key=api_key) project = rf.workspace(workspace).project(project) sql_statement = """ SELECT img.bytes, img.weight, img.raccoon_name FROM nicks_test_workspace.default.images as img LIMIT 2 """ with sql.connect(server_hostname=server_hostname, http_path=http_path, access_token=access_token) as connection: with connection.cursor() as cursor: cursor.execute(sql_statement) results = cursor.fetchall() total_length = len(results) for row in tqdm(results, total=total_length): tags = parse_tags(row.asDict()) with tempfile.NamedTemporaryFile(suffix=".jpeg") as tmp_file: tmp_file.write(row.bytes) path = Path(tmp_file.name) project.upload( str(path), tag_names=tags, batch_name="data-bricks-upload", )
  • 如何使用Roboflow训练自定义视觉模型
  • 如何在自定义数据集上训练YOLOv9
  • 如何在自定义数据集上训练YOLO-NAS
  • 如何在自定义数据集上训练Ultraytics YOLOv8
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485