Roboflow视频推理API能够执行基础视觉模型,如CLIP,以及针对特定对象的微调视觉模型,对视频进行分析。本指南将展示如何使用Roboflow Universe上可用的足球球员检测模型对AWS S3上的视频文件夹进行分析。将使用此模型来检测球员、足球和裁判。Roboflow Universe是一个社区,超过50,000个视觉模型在此共享供公共使用。
以下是模型在视频上的预测示例:
0:00 / 0:11 1×
也可以使用在Roboflow平台上私有训练的模型,以及支持的基础模型。阅读,了解支持的基础模型。
在这个指南中,将使用Roboflow Universe上可用的足球球员检测模型。也可以使用Universe上可用的任何对象检测模型,或者在Roboflow平台上私有训练的模型。如果需要针对特定用例微调的自定义模型,请阅读,了解如何训练模型以识别自定义对象。
要探索公共模型,请访问Roboflow Universe并搜索与正在解决的问题相关的模型。将需要模型ID和API密钥,两者都出现在Universe上所有模型的“模型”标签页上。请保持模型打开状态,因为稍后会参考它。
如果使用的是在Roboflow上训练的模型,请转到Roboflow仪表板,选择想要用于分析视频的已训练模型。转到“部署”页面,该页面可通过项目页面左侧边栏访问,以检索模型ID和版本。这些值出现在“切换模型”部分。
一旦为视频分析选择了模型,就可以开始从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}
在上面的代码中,替换:
上述代码将加载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响应结构的更多信息,请参考。
让绘制视频对象检测,以便可以检查视频是否已经被正确分析。首先,从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,
)
在上面的代码中,替换:
此代码将:
以上脚本的结果是:
0:00 / 0:11 1×
边界框已经绘制在从视频推理API的预测上。supervision还具有其他一些实用工具,可以使用它们来处理视频。例如,可以按置信度过滤检测,计算区域内的预测数量,计算预测穿过线条的次数等。要了解有关使用supervision进行视频处理的更多信息,请参考。
现在可以使用Roboflow视频推理API分析存储在S3上的视频。可以运行托管在Roboflow上的微调视觉模型或Roboflow Universe上可用的公共模型。在本指南中,检测了存储在AWS上的足球视频中的球、球员和裁判的位置。使用boto3 SDK检索视频,然后使用Roboflow视频推理API运行推理,然后使用supervision在每个帧上绘制预测。