如何改进我的 OpenCV 识别代码以找到上半身并在将 CCTV 流作为输入时减少资源?
How do I improve my OpenCV recognition code to find upper body and also cut down on resources while having a CCTV stream as input?
如何让我的opencv识别更准确,我只是使用haarcascade在我的cctv的灰色框架中找到上半身,但它占用了大量资源并且没有给出足够好的结果.我应该使用大纲或其他方法来减少资源吗?我也有一个 GPU,但我不知道如何 link 以便我的计算使用我的 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 连接到我的闭路电视,一段时间后它就停止发出帧,returns 这个错误。
error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
让我们从头开始。
error: (-215:Assertion failed) !_src.empty() in function
'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包含的参数。
如何让我的opencv识别更准确,我只是使用haarcascade在我的cctv的灰色框架中找到上半身,但它占用了大量资源并且没有给出足够好的结果.我应该使用大纲或其他方法来减少资源吗?我也有一个 GPU,但我不知道如何 link 以便我的计算使用我的 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 连接到我的闭路电视,一段时间后它就停止发出帧,returns 这个错误。
error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
让我们从头开始。
error: (-215:Assertion failed) !_src.empty() in function '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包含的参数。