通过vscode远程调试yolo系列利用摄像头进行实时监测

编程入门 行业动态 更新时间:2024-10-12 01:31:32

通过vscode远程调试yolo系列利用摄像头进行<a href=https://www.elefans.com/category/jswz/34/1771422.html style=实时监测"/>

通过vscode远程调试yolo系列利用摄像头进行实时监测

一、解决显示问题

因为是远程调试,所以是无法创建显示窗口的,看到有几种解决办法,方法如下:

  1. SSH通过VSCode远程访问服务器Opencv和matplotlib等无法直接显示图像问题_vscode中图片无法显示_博博有个大大大的Dream的博客-CSDN博客
  2. 远程开发VsCode终端中运行PyQt5程序报错qt.qpa.xcb_ could not connect to display_vscode pyqt5报错_易冷cheng的博客-CSDN博客

我使用的是第二种,不显示窗口,但也不会报错,通过代码直接保存摄像头的实时检测视频。

env | grep DISPLAY  
export DISPLAY=localhost:10.0

二、设置摄像头地址

(1)、电脑本身自带的摄像头

直接设置为0,具体位置后面举例。如果有物理开关需要打开开关。

(2)、远程调用摄像头

分为以下几个步骤:

①、获取摄像头ip地址,用户名,密码等信息(我是已知的,怎么获取没看过)。

②、在浏览器用ip地址作为网址,可以进入摄像头的设置界面,输入用户名密码等进行查看。

③、根据不同厂商的摄像头,摄像头的流地址有所不同(就是之后调用的格式不同)。

④、利用python查看摄像头的拍摄效果(需要能显示窗口,可省略)。

具体可以参考以下几个教程:

  1. 通过python程序调取摄像头画面_python opencv 读取大华演示盒摄像头_打代码的小明的博客-CSDN博客
  2. Python调用海康威视网络相机之——python读取相机rtsp码流显示画面_python通过rtsp获取网络摄像头实时画面_ciky奇的博客-CSDN博客
  3. python+opencv打开大华摄像机视频_opencv 大华_aszhongjian的博客-CSDN博客

因为我用的是大华的摄像头,所以用python测试时的流地址为:

rtsp://{user}:{password}@{ip}:554/cam/realmonitor?channel=1&subtype=1

括号内的信息要替换成自己的。

import cv2
# 大华摄像机的视频采集语句,subtype=1,辅码流。0,主码流。
cap = cv2.VideoCapture('rtsp://{user}:{password}@{ip}:554/cam/realmonitor?channel=1&subtype=1')while(1):# ret:成功返回True,失败返回Falseret, frame = cap.read()# 在图像上画矩形:后面4组数字依次左上坐标,右下坐标,颜色,宽度cv2.rectangle(frame,(100,0),(510,128),(0,255,0),3)
# 创建名为frame的窗口,显示frame,cv2.imshow('frame',frame)
# 按q键终止if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源,关闭所有窗口
cap.release()
cv2.destroyAllWindows()

三、yolov5调用摄像头进行实时检测

只需要改动一句代码就行,在detect.py中,修改source:

parser.add_argument('--source', type=str, default='rtsp://{user}:{password}@{ip}:554/cam/realmonitor?channel=1&subtype=1', help='file/dir/URL/glob/screen/0(webcam)')

如果是自带摄像头:

parser.add_argument('--source', type=str, default='0', help='file/dir/URL/glob/screen/0(webcam)')

进行检测后会自动在run下的对应文件夹内生成检测视频。

不过我遇到了一个问题,就是帧素不稳定,视频有时快有时慢,视频大小较小,默认条件下,一分钟10M左右。

四、yolov8调用摄像头进行实时检测

有两种方式,一种是利用python写代码检测,另一种是直接在终端命令行使用。

(1)、python检测

首先看一下如何保存视频:

import cv2cap = cv2.VideoCapture('0.avi')fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, 25., (1920, 1080))while True:ret, frame = cap.read()# print(frame.shape)if ret == True:out.write(frame)else:breakcap.release()
out.release()
cv2.destroyAllWindows()

其中,需要注意的是,在cv2.VideoWriter函数中,定义的视频大小 ,与实际帧相反,例如每一帧的实际shape为(1080,1920),那么定义时就要按照(1920,1080)来定义,否则视频会保存失败。

然后是实际的实时检测代码:

import cv2
import supervision as sv
from ultralytics import YOLO
import timedef main():# 保存视频start_time = time.time()timeout = 10  # 设置超时时间为10秒writer = cv2.VideoWriter('保存路径/webcam_yolo.mp4',cv2.VideoWriter_fourcc(*'mp4v'),20.0,(1920,1080))# define resolutioncap = cv2.VideoCapture("这里是摄像头信息")# cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)# cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)# specify the modelmodel = YOLO("/home/ai/workspace_hxy/project/ultralytics-main/runs/detect/s/weights/best.pt")# 自定义边框box_annotator = sv.BoxAnnotator(thickness=2,text_thickness=2,text_scale=1)while True:ret, frame = cap.read()result = model(frame, agnostic_nms=True)[0]detections = sv.Detections.from_yolov8(result)labels = [f"{model.model.names[class_id]} {confidence:0.2f}"for _, _, confidence, class_id,_in detections]frame = box_annotator.annotate(scene=frame,detections=detections,labels=labels)# print(frame.shape)writer.write(frame)# cv2.imshow("yolov8", frame)#如果有窗口显示的话,按下esc可以跳出循环if (cv2.waitKey(30) == 27):  # break with escape keybreak#这一句则是在终端进行current_time = time.time()if current_time - start_time >= timeout:breakcap.release()writer.release()cv2.destroyAllWindows()if __name__ == "__main__":main()

如果改进的话,那么需要思考下怎么自动设置图像大小。

(2)、终端命令行检测

yolo detect predict model='' source="" show=False save=True

自行填补model与source,不过这个保存出来时avi格式,并且也不知道帧速多少,应该是可以设置的,默认保存条件下,视频大小相当恐怖。

更多推荐

通过vscode远程调试yolo系列利用摄像头进行实时监测

本文发布于:2024-02-27 15:28:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707125.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实时   摄像头   系列   vscode   yolo

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!