Roboflow
Learn how to integrate Supabase with Roboflow, a tool for running fine-tuned and foundation vision models.
在本指南中,我们将通过两个示例演示如何使用 Roboflow 推断 来运行微调模型和基础模型。我们将使用一个目标检测模型和 CLIP 运行推断并保存预测结果。
🌐 In this guide, we will walk through two examples of using Roboflow Inference to run fine-tuned and foundation models. We will run inference and save predictions using an object detection model and CLIP.
项目设置 #
🌐 Project setup
要创建一个新的 Postgres 数据库,在 Supabase 里新建一个项目:
🌐 To create a new Postgres database, start a new Project in Supabase:
- 在 Supabase 仪表板中创建一个新项目。
- 输入你的项目详情。记得把密码安全地保存起来。
你的数据库将在不到一分钟内可用。
🌐 Your database will be available in less than a minute.
查找你的凭证:
你可以在仪表板上找到你的项目凭证:
🌐 You can find your project credentials on the dashboard:
保存计算机视觉预测 #
🌐 Save computer vision predictions
一旦你有了训练好的视觉模型,你就需要为你的应用创建业务逻辑。在很多情况下,你会想把推断结果保存到文件里。
🌐 Once you have a trained vision model, you need to create business logic for your application. In many cases, you want to save inference results to a file.
以下步骤将向你展示如何在本地运行视觉模型并将预测结果保存到 Supabase。
🌐 The steps below show you how to run a vision model locally and save predictions to Supabase.
准备:搭建一个模型 #
🌐 Preparation: Set up a model
在你开始之前,你需要一个基于你数据训练的目标检测模型。
🌐 Before you begin, you will need an object detection model trained on your data.
你可以在 Roboflow 上训练模型,利用从数据管理和标注到部署的端到端工具,或者上传自定义模型权重进行部署。
🌐 You can train a model on Roboflow, leveraging end-to-end tools from data management and annotation to deployment, or upload custom model weights for deployment.
所有模型都有一个可以无限扩展的 API,通过它你可以查询你的模型,而且可以在本地运行。
🌐 All models have an infinitely scalable API through which you can query your model, and can be run locally.
在本指南中,我们将使用一个演示的剪刀石头布模型。
🌐 For this guide, we will use a demo rock, paper, scissors model.
步骤 1:安装并启动 Roboflow 推断 #
🌐 Step 1: Install and start Roboflow Inference
你将使用 Roboflow 推断(一种计算机视觉推断服务器)在本地部署我们的模型。
🌐 You will deploy our model locally using Roboflow Inference, a computer vision inference server.
要安装并启动 Roboflow 推断,首先在你的电脑上安装 Docker。
🌐 To install and start Roboflow Inference, first install Docker on your machine.
然后,运行:
🌐 Then, run:
1pip install inference inference-cli inference-sdk && inference server start推断服务器将在 http://localhost:9001 可用。
🌐 An inference server will be available at http://localhost:9001.
步骤 2:对图片进行推断 #
🌐 Step 2: Run inference on an image
你可以对图片和视频进行推断。
🌐 You can run inference on images and videos.
创建一个新的 Python 文件并添加以下代码:
🌐 Create a new Python file and add the following code:
1from inference_sdk import InferenceHTTPClient23image = "example.jpg"4MODEL_ID = "rock-paper-scissors-sxsw/11"56client = InferenceHTTPClient(7 api_url="http://localhost:9001",8 api_key="ROBOFLOW_API_KEY"9)10with client.use_model(MODEL_ID):11 predictions = client.infer(image)1213print(predictions)上面,替换:
🌐 Above, replace:
- 你想要运行推断的图片的 URL 以及图片的名称。
ROBOFLOW_API_KEY使用你的 Roboflow API 密钥。了解如何获取你的 Roboflow API 密钥。- 用你的 Roboflow 模型 ID 替换
MODEL_ID。了解如何获取你的模型 ID。
当你运行上面的代码时,一系列预测结果会打印到控制台上:
🌐 When you run the code above, a list of predictions will be printed to the console:
1{'time': 0.05402109300121083, 'image': {'width': 640, 'height': 480}, 'predictions': [{'x': 312.5, 'y': 392.0, 'width': 255.0, 'height': 110.0, 'confidence': 0.8620790839195251, 'class': 'Paper', 'class_id': 0}]}步骤 3:将结果保存到 Supabase #
🌐 Step 3: Save results in Supabase
要在 Supabase 中保存结果,请在你的脚本中添加以下代码:
🌐 To save results in Supabase, add the following code to your script:
1import os2from supabase import create_client, Client34url: str = os.environ.get("SUPABASE_URL")5key: str = os.environ.get("SUPABASE_KEY")6supabase: Client = create_client(url, key)78result = supabase.table('predictions') \9 .insert({"filename": image, "predictions": predictions}) \10 .execute()然后你可以用以下代码来查询你的预测:
🌐 You can then query your predictions using the following code:
1result = supabase.table('predictions') \2 .select("predictions") \3 .filter("filename", "eq", image) \4 .execute()56print(result)这是一个示例结果:
🌐 Here is an example result:
1data=[{'predictions': {'time': 0.08492901099998562, 'image': {'width': 640, 'height': 480}, 'predictions': [{'x': 312.5, 'y': 392.0, 'width': 255.0, 'height': 110.0, 'confidence': 0.8620790839195251, 'class': 'Paper', 'class_id': 0}]}}, {'predictions': {'time': 0.08818970100037404, 'image': {'width': 640, 'height': 480}, 'predictions': [{'x': 312.5, 'y': 392.0, 'width': 255.0, 'height': 110.0, 'confidence': 0.8620790839195251, 'class': 'Paper', 'class_id': 0}]}}] count=None计算并保存 CLIP 嵌入 #
🌐 Calculate and save CLIP embeddings
你可以使用 Supabase 的向量数据库功能来存储和查询 CLIP 嵌入。
🌐 You can use the Supabase vector database functionality to store and query CLIP embeddings.
Roboflow 推断提供了一个 HTTP 接口,你可以通过它使用 CLIP 计算图片和文本的嵌入。
🌐 Roboflow Inference provides an HTTP interface through which you can calculate image and text embeddings using CLIP.
步骤 1:安装并启动 Roboflow 推断 #
🌐 Step 1: Install and start Roboflow Inference
请参阅上面的步骤 #1:安装并启动 Roboflow 推断 来安装并启动 Roboflow 推断。
🌐 See Step #1: Install and Start Roboflow Inference above to install and start Roboflow Inference.
步骤2:在一张图片上运行CLIP #
🌐 Step 2: Run CLIP on an image
创建一个新的 Python 文件并添加以下代码:
🌐 Create a new Python file and add the following code:
1import cv22import supervision as sv3import requests4import base645import os67IMAGE_DIR = "images/train/images/"8API_KEY = ""9SERVER_URL = "http://localhost:9001"1011results = []1213for i, image in enumerate(os.listdir(IMAGE_DIR)):14 print(f"Processing image {image}")15 infer_clip_payload = {16 "image": {17 "type": "base64",18 "value": base64.b64encode(open(IMAGE_DIR + image, "rb").read()).decode("utf-8"),19 },20 }2122 res = requests.post(23 f"{SERVER_URL}/clip/embed_image?api_key={API_KEY}",24 json=infer_clip_payload,25 )2627 embeddings = res.json()['embeddings']2829 results.append({30 "filename": image,31 "embeddings": embeddings32 })这段代码会计算目录中每张图片的 CLIP 嵌入,并把结果打印到控制台。
🌐 This code will calculate CLIP embeddings for each image in the directory and print the results to the console.
上面,替换:
🌐 Above, replace:
IMAGE_DIR与包含你想要运行推断的图片的目录。ROBOFLOW_API_KEY使用你的 Roboflow API 密钥。了解如何获取你的 Roboflow API 密钥。
你也可以通过将 SERVER_URL 设置为 https://infer.roboflow.com 来在云端计算 CLIP 嵌入。
🌐 You can also calculate CLIP embeddings in the cloud by setting SERVER_URL to https://infer.roboflow.com.
步骤 3:将嵌入保存到 Supabase #
🌐 Step 3: Save embeddings in Supabase
你可以使用 Supabase 的 vecs Python 包在 Supabase 中存储你的图片嵌入:
🌐 You can store your image embeddings in Supabase using the Supabase vecs Python package:
首先,安装 vecs:
🌐 First, install vecs:
1pip install vecs接下来,在你的脚本中添加以下代码来创建一个索引:
🌐 Next, add the following code to your script to create an index:
1import vecs23DB_CONNECTION = "postgresql://postgres:[password]@[host]:[port]/[database]"45vx = vecs.create_client(DB_CONNECTION)67# create a collection of vectors with 3 dimensions8images = vx.get_or_create_collection(name="image_vectors", dimension=512)910for result in results:11 image = result["filename"]12 embeddings = result["embeddings"][0]1314 # insert a vector into the collection15 images.upsert(16 records=[17 (18 image,19 embeddings,20 {} # metadata21 )22 ]23 )2425images.create_index()将 DB_CONNECTION 替换为你的数据库认证信息。你可以在 Supabase 仪表板的 Project Settings > Database Settings 中获取它。
🌐 Replace DB_CONNECTION with the authentication information for your database. You can retrieve this from the Supabase dashboard in Project Settings > Database Settings.
然后你可以用以下代码查询你的嵌入:
🌐 You can then query your embeddings using the following code:
1infer_clip_payload = {2 "text": "cat",3}45res = requests.post(6 f"{SERVER_URL}/clip/embed_text?api_key={API_KEY}",7 json=infer_clip_payload,8)910embeddings = res.json()['embeddings']1112result = images.query(13 data=embeddings[0],14 limit=115)1617print(result[0])资源 #
🌐 Resources