开发者社区 > ModelScope模型即服务 > 计算机视觉 > 正文

请问实时检测类的,怎样输出mp4或者输出流

import cv2
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.outputs import OutputKeys

model_id = 'damo/cv_cspnet_video-object-detection_streamyolo'
test_video = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/videos/test_realtime_vod.mp4'

初始化实时检测pipeline

realtime_video_object_detection = pipeline(
Tasks.video_object_detection, model=model_id)

进行实时检测

result = realtime_video_object_detection(test_video)
if result:
bboxes_list = result[OutputKeys.BOXES]
cv2.VideoWriter('result.mp4', result['output_img'])
else:
raise ValueError('process error')

展开
收起
游客okk7po7qe42b4 2023-07-14 13:26:16 90 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    要输出实时检测的结果到MP4文件或者输出流,您可以在代码中使用OpenCV库来实现。

    假设您已经成功加载了模型并获得了视频流,您可以按照以下步骤来实现实时检测的输出:

    创建一个OpenCV的视频编写器(VideoWriter)对象,用于将检测结果写入到MP4文件或输出流中。例如:

    python
    Copy

    设置编码器

    fourcc = cv2.VideoWriter_fourcc(*'mp4v')

    创建视频编写器对象

    out = cv2.VideoWriter('output.mp4', fourcc, 30, (640, 480))

    
    在上面的代码中,我们使用了`mp4v`编码器,并将输出视频帧率设置为30帧/秒。`output.mp4`是输出视频的文件名, `(640, 480)`是输出视频的分辨率(根据您的视频流分辨率进行调整)。
    
    在处理每一帧视频时,将检测结果绘制在视频帧上,并将带有检测结果的视频帧写入输出文件或输出流中。例如:
    
    python
    Copy
    # 处理每一帧视频
    while True:
        ret, frame = cap.read()
        if not ret:
            break
    
        # 进行目标检测
        outputs = pipe({'image': frame})
        # 解析检测结果
        boxes = outputs[OutputKeys.detections]['boxes']
        scores = outputs[OutputKeys.detections]['scores']
        classes = outputs[OutputKeys.detections]['class_ids']
        # 绘制检测结果
        for box, score, cls in zip(boxes, scores, classes):
            x1, y1, x2, y2 = box
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, f'{score:.2f}', (x1, y1-5),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
            cv2.putText(frame, str(cls), (x1, y1+15),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    
        # 将带有检测结果的视频帧写入输出文件或输出流
        out.write(frame)
    
    # 释放视频编写器和视频流
    out.release()
    cap.release()
    

    在上面的代码中,我们首先使用pipeline函数对视频帧进行目标检测,并从输出结果中解析出检测到的目标框、得分和类别等信息。然后,我们将检测结果绘制在视频帧上,并使用VideoWriter对象将带有检测结果的视频帧写入输出文件或输出流中。最后,我们释放视频编写器和视频流。

    2023-07-18 08:45:57
    赞同 展开评论 打赏
  • 实时检测类任务通常涉及到处理视频数据或实时流数据,并对其进行分析和检测。如果您想要输出 mp4 文件或者将结果作为流传输,可以考虑以下方法:

    1. 输出为 MP4 文件:

    • 在处理过程中,将检测结果保存到本地文件系统中的 MP4 文件中。您可以使用适当的库(如 OpenCV)来处理视频帧并将其保存为 MP4 文件。这需要您将检测结果帧按顺序写入文件,并且在完成后进行合适的封装操作以生成可播放的 MP4 文件。

    2. 输出为流传输:

    • 使用网络传输协议(如 RTMP、RTSP、WebRTC 等)将实时检测结果以流的形式传输给客户端。您可以使用相应的库或工具来建立流传输服务。例如,使用 FFmpeg 库创建一个基于 RTMP 的推流服务器,然后客户端可以通过 RTMP 协议接收实时流数据,并进行播放或分析处理。
    2023-07-15 09:17:55
    赞同 1 展开评论 打赏

包含图像分类、图像生成、人体人脸识别、动作识别、目标分割、视频生成、卡通画、视觉评价、三维视觉等多个领域

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载