Opencv库调用yolov5模型onnx格式,识别视频,反馈进度,保存结果

上!代!码!

import cv2
import numpy as np
import onnxruntime as rt

# Load the ONNX model
sess = rt.InferenceSession("yolov5s.onnx")

# Load the video
cap = cv2.VideoCapture('A1.mp4')


# Get video info
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # Get total number of frames

# Define the codec and create a VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'mp4v') 
out = cv2.VideoWriter('A2.mp4', fourcc, fps, (width, height))

frame_count = 0  # Initialize frame counter

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        # Preprocess the frame
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        frame_resized = cv2.resize(frame_rgb, (640, 640))
        frame_normalized = frame_resized.astype(np.float32) / 255.0
        frame_reshaped = np.transpose(frame_normalized, (2,0,1))
        frame_expanded = np.expand_dims(frame_reshaped, axis=0)

        # Run the frame through the model
        input_name = sess.get_inputs()[0].name
        pred_onx = sess.run(None, {input_name: frame_expanded})

        # TODO: Postprocess the output and draw bounding boxes on the frame
        # This depends on how you want to interpret the model's output

        # Write the frame into the file 'output_video.mp4'
        out.write(frame)

        # Display the resulting frame
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

        # Update and display progress
        frame_count += 1
        progress = (frame_count / total_frames) * 100
        print(f'Progress: {progress:.2f}%')

    else:
        break

# Release everything when job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值