Roboflow视频推理API使用指南

Roboflow视频推理API能够执行基础视觉模型,如CLIP,以及针对特定对象的微调视觉模型,对视频进行分析。本指南将展示如何使用Roboflow Universe上可用的足球球员检测模型对AWS S3上的视频文件夹进行分析。将使用此模型来检测球员、足球和裁判。Roboflow Universe是一个社区,超过50,000个视觉模型在此共享供公共使用。

以下是模型在视频上的预测示例:

0:00 / 0:11 1×

也可以使用在Roboflow平台上私有训练的模型,以及支持的基础模型。阅读,了解支持的基础模型。

步骤1:选择模型

在这个指南中,将使用Roboflow Universe上可用的足球球员检测模型。也可以使用Universe上可用的任何对象检测模型,或者在Roboflow平台上私有训练的模型。如果需要针对特定用例微调的自定义模型,请阅读,了解如何训练模型以识别自定义对象。

要探索公共模型,请访问Roboflow Universe并搜索与正在解决的问题相关的模型。将需要模型ID和API密钥,两者都出现在Universe上所有模型的“模型”标签页上。请保持模型打开状态,因为稍后会参考它。

如果使用的是在Roboflow上训练的模型,请转到Roboflow仪表板,选择想要用于分析视频的已训练模型。转到“部署”页面,该页面可通过项目页面左侧边栏访问,以检索模型ID和版本。这些值出现在“切换模型”部分。

一旦为视频分析选择了模型,就可以开始从AWS S3检索视频了。

步骤2:从AWS S3检索视频

要从AWS S3检索视频,需要安装`aws`命令行实用程序。可以使用此命令行实用程序与AWS进行身份验证。要了解如何设置AWS CLI并进行身份验证,请参考。

还需要安装boto3,即官方AWS Python SDK:

pip install boto3

最后,安装roboflow,将用于分析视频,以及`tqdm`,将用于创建显示分析状态的进度条。还需要安装`supervision`,将用于将Roboflow视频推理API的预测绘制到视频上。

pip install roboflow tqdm supervision

一旦完成身份验证,就可以使用Roboflow视频推理API处理视频了。创建一个新的Python文件,并添加以下代码:

import boto3 import tqdm import json import roboflow roboflow.login() PROJECT_ID = "football-players-detection-3zvbc" VERSION = 2 AWS_BUCKET = “vision-rf” rf = roboflow.Roboflow() project = rf.workspace().project(PROJECT_ID) model = project.version(VERSION).model s3_client = boto3.client("s3") files = [file["Key"] for file in s3_client.list_objects(Bucket=bucket)["Contents"]] file_results = {k: None for k in files}

在上面的代码中,替换:

  • PROJECT_ID -Roboflow项目ID。了解如何检索模型ID。
  • VERSION - Roboflow模型版本。
  • AWS_BUCKET - 存储视频的AWS存储桶的名称。

上述代码将加载Roboflow项目,并检索存储桶中所有文件的列表。当首次运行此代码时,将被要求在Roboflow平台上发出身份验证令牌。此过程是交互式的。

接下来,添加以下代码:

for file in tqdm.tqdm(files, total=len(files)): url = s3_client.generate_presigned_url( "get_object", Params={"Bucket": bucket, "Key": file}, expiration=30 ) job_id, signed_url = model.predict_video( url, fps=5, prediction_type="batch-video", ) results = model.poll_until_video_results(job_id) file_results[file] = results with open("results.json", "w+") as results_file: json.dump(file_results, results_file)

此代码将生成一个签名URL,Roboflow视频推理API可以使用它来检索视频进行分析。此URL在签发后30秒过期,以维护数据的高安全性。然后将URL发送到Roboflow,以便视频可以被处理。poll_until_video_results函数将轮询Roboflow视频推理API,直到结果可用。结果将被保存在名为“results.json”的文件中,映射到被处理的文件的名称。

视频推理API将以每秒五帧的速率运行推理。可以通过更改fps值来调整此数字。处理具有更高推理FPS值的视频成本更高,因为需要在更多帧上运行更多推理来处理视频。

此过程将为存储桶中的每个视频重复进行。终端将显示一个进度条,显示已分析的视频数量和剩余待分析的视频数量。要了解Video Inference API响应结构的更多信息,请参考。

步骤3(可选):在视频上查看预测

让绘制视频对象检测,以便可以检查视频是否已经被正确分析。首先,从S3存储桶下载一个文件到计算机。不要更改文件的名称,因为将使用文件名称来检索之前保存的预测。然后,创建一个新文件并添加以下代码:

import supervision as sv import numpy as np import json import roboflow VIDEO_NAME = "video1.mp4" MODEL_NAME = "football-players-detection-3zvbc" VERSION = 2 roboflow.login() rf = roboflow.Roboflow() project = rf.workspace().project(MODEL_NAME) model = project.version(VERSION).model with open("results.json", "r") as f: results = json.load(f) model_results = results[VIDEO_NAME][MODEL_NAME] for result in model_results: for r in result["predictions"]: del r["tracker_id"] frame_offset = results[VIDEO_NAME]["frame_offset"] def callback(scene: np.ndarray, index: int) -> np.ndarray: if index in frame_offset: detections = sv.Detections.from_inference( model_results[frame_offset.index(index)] ) class_names = [i["class"] for i in model_results[frame_offset.index(index)]["predictions"]] else: nearest = min(frame_offset, key=lambda x: abs(x - index)) detections = sv.Detections.from_inference( model_results[frame_offset.index(nearest)] ) class_names = [i["class"] for i in model_results[frame_offset.index(nearest)]["predictions"]] bounding_box_annotator = sv.BoundingBoxAnnotator() label_annotator = sv.LabelAnnotator() labels = [class_names[int(detection)] for detection in detections.class_id] annotated_image = bounding_box_annotator.annotate( scene=scene, detections=detections) annotated_image = label_annotator.annotate( scene=annotated_image, detections=detections, labels=labels) return annotated_image sv.process_video( source_path="video.mp4", target_path="output.mp4", callback=callback, )

在上面的代码中,替换:

  • VIDEO_NAME - 从S3下载的文件的名称。
  • MODEL_NAME - Roboflow模型ID。
  • VERSION - Roboflow模型版本。

此代码将:

  • 访问在上一步中从视频推理API检索的预测,这些预测保存在“results.json”文件中,用于"video1.mp4"文件。
  • 在视频上绘制边界框预测。
  • 将结果保存到名为“output.mp4”的文件中。

以上脚本的结果是:

0:00 / 0:11 1×

边界框已经绘制在从视频推理API的预测上。supervision还具有其他一些实用工具,可以使用它们来处理视频。例如,可以按置信度过滤检测,计算区域内的预测数量,计算预测穿过线条的次数等。要了解有关使用supervision进行视频处理的更多信息,请参考。

现在可以使用Roboflow视频推理API分析存储在S3上的视频。可以运行托管在Roboflow上的微调视觉模型或Roboflow Universe上可用的公共模型。在本指南中,检测了存储在AWS上的足球视频中的球、球员和裁判的位置。使用boto3 SDK检索视频,然后使用Roboflow视频推理API运行推理,然后使用supervision在每个帧上绘制预测。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485