在拥有一个满足业务需求的计算机视觉模型之后,下一步是将模型与逻辑连接起来。通过使用Python脚本将Roboflow与Zapier集成,可以轻松地将模型预测与Zapier支持的数千种工具中的任何一种结合起来使用。本文将展示如何将Roboflow与Zapier集成。完成本指南后,将在Zapier上配置一个webhook,该webhook接受模型的预测。此webhook将与Google Sheets连接,将计算机视觉模型预测保存到电子表格中。以下是保存到电子表格中的预测示例:
首先,请注意使用Zapier的Webhooks功能需要付费订阅Zapier。在可以将预测发送到电子表格之前,需要一个脚本来检索模型的这些预测。在本指南中,将使用RoboflowUniverse中的“空中太阳能板”模型。此模型识别空中图像中建筑物的位置。将保存在每张图像中找到的所有预测到电子表格中。
首先,创建一个名为“pending”的文件夹,用于存储尚未通过模型运行的图像。然后,创建一个名为“images”的文件夹,用于存储已经运行过推理的图像。接着,创建一个名为app.py的空白Python脚本。此脚本将包含应用程序的所有逻辑。
from roboflow import Roboflow
import requests
import os
import shutil
rf = Roboflow(api_key="API_KEY")
project = rf.workspace().project("MODEL_NAME")
model = project.version(MODEL_VERSION).model
files = os.listdir("images")
在上述代码片段中,将“API_KEY”替换为Roboflow API密钥。将"MODEL_NAME"替换为模型名称,将"MODEL_VERSION"替换为模型版本号。可以从Roboflow仪表板中模型的部署选项卡中检索模型名称和版本。
有了这段代码,可以编写一个for循环,遍历“pending”文件夹中的所有图像并运行推理:
for file in files:
print("Running inference on " + file)
try:
predictions = model.predict("images/" + file, confidence=40).json()
print(predictions)
except:
print("Error running inference")
continue
将图像添加到“images”文件夹中。然后,运行脚本。在这个例子中,将对以下空中图像运行推理:
运行脚本时,控制台将打印出一个JSON对象,显示图像中所有太阳能板的位置。以下是该对象的摘录:
{'predictions': [{'x': 442.0, 'y': 105.5, 'width': 36.0, 'height': 43.0, 'confidence': 0.8998432159423828, 'class': 'solar-panels', 'image_path': 'images/original (2) Medium.jpeg', 'prediction_type': 'ObjectDetectionModel'}...]}
现在已经准备好了这个逻辑,可以开始构建与Zapier的集成。如果还没有Zapier账户,请在他们的网站上创建一个。当拥有账户后,点击仪表板上的“创建Zap”,其中“Zap”指的是将两个或更多应用程序连接在一起的工作流程。Zap将使用两个服务:Webhooks和Google Sheets。
在页面上的“Trigger”框中,选择“Webhooks by Zapier”:
然后,在触发器的事件框中选择“Catch Hook”:
点击“Continue”,然后在“Set up trigger”页面上再次点击“Continue”。现在,有一个正在监听数据的webhook。太好了!可以回到应用程序并测试向webhook发送数据。
在之前创建的for循环中,将添加两个逻辑:
向webhook发送POST请求,其中包含从模型检索到的每个预测的数据。
将已经运行过推理的图像移动到之前确定的COMPLETED_INFERENCE_FOLDER目的地。移动文件将确保不会再次对图像运行推理。
for p in predictions["predictions"]:
webhook_data = {
"x": p["x"],
"y": p["y"],
"width": p["width"],
"height": p["height"],
"image": file,
"confidence": p["confidence"],
"class": p["class"]
}
response = requests.post(WEBHOOK_URL, json=webhook_data)
if response.status_code != 200:
print("Error sending webhook")
try:
shutil.move("images/" + file, "completed/" + file)
except Exception as e:
print("Error moving file: " + str(e))
如果正在使用实例分割模型,请根据想要保存的信息更新“webhook_data”值。实例分割模型返回制作多边形所需的所有点。此数据的结构与在本指南中使用的对象检测预测不同。
回到Zapier并复制提供的URL,可以向该webhook发送预测。将上述代码中的“WEBHOOK_URL”变量替换为Zapier提供的URL。如果有更多的元数据想要发送,可以向“webhook_data”字典添加更多值。现在,运行所有代码。
当运行代码时,推理将被运行,数据将被发送到Zapier。在运行程序后,点击Zapier中的“Test Trigger”以确保钩子已接收。以下是在之前示例中的空中图像上运行示例程序的结果:
预测的坐标以及相关的元数据,如图像名称,已发送到Zapier。点击“Continue”。现在可以构建逻辑来处理这些信息。
将在做出预测时在Google Sheet中创建一个新的行。如果想做其他事情,可以跳过本节并开始工作自己的管道!Zapier有数千种工具可供使用,并提供了一个直观的界面,通过该界面可以设置工作流程。
继续创建Google表格行的示例,让在Zapier的Action部分选择“Google Sheets”:
点击“Create Spreadsheet Row”在“Event”字段中,然后点击“Continue”。在新标签页中,创建一个电子表格。此电子表格应具有与之前在“webhook_data”变量中定义的值相同的列。在之前的示例中,设置了这些值:
电子表格标题行应该如下所示:
让将电子表格命名为“Solar Panel Predictions”。回到Zapier,然后选择想要在Zap中使用的账户。如果是第一次在Zapier中使用Google Sheets,系统将要求使用Google进行身份验证并授予Zapier访问Google Sheets的权限。
一旦授予了必要的权限,从“Spreadsheet”下拉菜单中选择电子表格名称,并从Worksheet下拉菜单中选择工作表名称:
Zapier将显示工作表中所有列的名称。需要告诉Zapier,通过webhook发送的数据点应该出现在每个列中。对于每个列,从webhook中选择正确的值:
一旦设置了所有列,点击“Continue”。现在准备测试Action,以确保一切都按预期工作。点击“Test action”。这将把在webhook测试中发送的数据发送到Google Sheet。
再次打开正在使用的电子表格。应该有一个新的行在工作表中,包含预测信息:
太棒了!现在已经设置了Zap!点击“Publish Zap”。这将使Zap上线并准备好在生产应用程序中使用。
在本指南中,编写了一个脚本,使用Roboflow模型对文件夹中的所有图像运行推理,并将预测数据发送到Zapier webhook。然后Zapier将通过webhook发送的数据路由到Google Sheet。
可以根据要求用另一个操作替换Google Sheet操作——从发送电子邮件到发送短信通知。还可以向Zap添加更多操作。例如,可以将预测保存到电子表格,然后向Slack发送消息。