在RTSP流上运行计算机视觉模型

在众多商业和工业应用中,使用RTSP数据运行视觉模型的需求日益增长。例如,可能想要追踪在某个时刻通过车道的汽车数量。通过指向车道的摄像头,利用计算机视觉技术可以计算出可见汽车的数量。

本指南将展示如何在RTSP数据上运行计算机视觉模型。将使用一个目标检测模型进行测试,但也可以通过一些代码修改,使用分割、分类和基础模型(例如CLIP)来实现。在本指南中,将使用一个针对Roboflow训练的微调YOLOv8模型。如果已经有一个在Roboflow上训练好的模型,可以跳过下一步。

如果已经训练了YOLOv5、YOLOv8检测、分类或分割模型,或者YOLOv7分割模型,可以将模型上传到Roboflow,以便在RTSP视频流上运行推理。上传模型到Roboflow之前,首先需要安装RoboflowPython包

pip install roboflow

然后,创建一个新的Python文件并粘贴以下代码:

from roboflow import Roboflow rf = Roboflow(api_key="API_KEY") project = rf.workspace().project("PROJECT_ID") project.version(DATASET_VERSION).deploy(model_type="yolov8", model_path=f"{HOME}/runs/detect/train/")

在上述代码中,添加API密钥和要上传的模型权重的路径。权重将上传到Roboflow,模型将很快通过API访问,并可用于推理。如果还没有模型,可以查看Roboflow入门指南,了解如何为用例训练模型。

有了模型后,可以开始设置一个脚本来在RTSP流上运行模型推理。首先,需要安装项目所需的依赖项。将使用推理,它将用于运行模型。要安装所需的依赖项,请运行以下命令:

pip install inference

现在,让设置流。使用inference.InferencePipeline()对象,可以访问网络摄像头或RTSP流。InferencePipeline()对象接受一个回调函数,该函数应用于从流中读取的每一帧。这个回调函数被称为“sink”。可以创建一个包含任何想要的逻辑的自定义sink,或者可以使用Inference内置的sink之一。

让运行一个在Microsoft COCO基准上训练的模型来测试流是否工作。创建一个新的Python文件并添加以下代码:

from inference import InferencePipeline from inference.core.interfaces.stream.sinks import render_boxes pipeline = InferencePipeline.init( model_id="yolov8x-1280", video_reference=0, #指定设备编号为整数 on_prediction=render_boxes, api_key=api_key, ) pipeline.start() pipeline.join()

在这段代码中,导入了一个内置的sink,render_boxes,它使用Supervision在输入帧上绘制预测。如果想要创建一个自定义sink,可以定义一个函数,该函数接受一个预测数组、一个VideoFrame对象和一个任意的关键字参数列表。

def on_prediction( predictions: dict, video_frame: VideoFrame, **kwargs )

在这段代码中,将“video_reference”替换为网络摄像头的IP地址。可以指定一个整数设备ID来测试连接到计算机的网络摄像头。然后,将“model_id”替换为项目相关的模型名称和ID。了解如何检索模型名称和ID。还需要提供API密钥。了解如何找到RoboflowAPI密钥。

现在已经准备好在流上测试模型了。要进行测试,请运行编写代码的Python脚本。如果在上一节中保留了参数on_prediction=render_boxes,将会出现一个窗口,可以在其中看到从提供的RTSP流中的视频。

RTSP流支持是互联网连接摄像头的常见功能。有了Roboflow Inference Python包,可以在所有由RTSP模型返回的帧上运行计算机视觉模型。设置流只需要几行代码。然后,可以开始编写应用于每一帧的逻辑。

在本指南中,介绍了如何在RTSP流数据上运行视觉模型。编写了逻辑,让能够可视化代表目标检测模型返回的预测的边界框。代码可以扩展为自己的自定义逻辑,或者修改以支持不同的模型类型。

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