如何解决如何改进我的 OpenCV 识别代码以找到上半身并在将 CCTV 流作为输入的同时减少资源?
如何使我的opencv识别更准确,我只是使用haarcascade在我的cctv的灰色框架中找到上半身,但是它占用了大量资源并且没有给出足够好的结果。我应该使用大纲或其他东西来减少资源吗?我也有一个 GPU,但我不知道如何链接它以便我的计算使用我的 GPU。
import cv2
body_casc = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_upperbody.xml')
vcap= cv2.VideoCapture("rtsp://192.168.29.99")
while True:
try:
ret,frame=vcap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
body = body_casc.detectMultiScale(gray,1.1,4)
for (x,y,w,h) in body:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0),5)
cv2.imshow("VIDEO",frame)
except Exception as e:
print("ERROR : "+str(e))
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
我的相机正在通过 IPC 连接到我的闭路电视,一段时间后它只是停止发出帧,并返回此错误。
error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
解决方法
让我们从头开始。
error: (-215:Assertion failed) !_src.empty() 在函数中 'cv::cvtColor'
出现错误是因为没有可转换的帧。这可能是由相机断开连接或不合适的帧引起的。我建议您在处理前检查任何帧:
ret,frame=vcap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
另一方面,您正在询问如何使检测更准确。首先,haarcascade
不是您可以使用的完美工具,但它确实更快。根据您的硬件规格,您可以选择其他类型的AI算法,例如YOLO、R-CNN等。或者如果您坚持使用haarcascades
,则应根据您的情况定义参数。您可以检查 detectMultiscale 包含的参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。