如何改进我的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,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连接到我的CCTV,过了一段时间,它就停止发送帧,并返回这个错误。

error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

让我们从头开始。

错误:(-215:断言失败(_函数中的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不是一个完美的工具,你可以使用它,它确实更快。根据您的硬件规格,您可以选择其他类型的人工智能算法,如YOLO、R-CNN等。或者,如果您坚持使用haarcascades,则应根据您的情况定义参数。您可以检查detectMultiscale包含的参数。

最新更新