我正在努力实现一个程序,以识别视频/图片中的车辆。一个主要的要求是性能(几乎是实时的),所以我已经放弃了ImageAI和一个使用Keras 16进行额外培训的模型。
OpenCV为我提供了所需的性能,但accuray远不能被接受:虽然有时它运行良好,但在下一个框架中却失败了。
我正在考虑可能的选择:( A)用我自己的图像重新训练一个模型( b)使用一些图像预处理.?
任何帮助或线索都将不胜感激。
我的代码:
import cv2
import os
car_cascade = cv2.CascadeClassifier('cars3.xml')
#input_path = ...
files = os.listdir(input_path)
for f in files:
input_file = input_path + '/' + f;
print(input_file)
img = cv2.imread(input_file, 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.1, 1)
for (x, y, w, h) in cars:
cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2)
ncars = ncars + 1
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例:
发布于 2019-11-21 19:52:35
你试过dnn对象检测模块了吗?
https://github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-API
有几个可用的模型架构,您可以使用这种权衡速度和准确性。
对于测量速度的尝试执行多个推论和测量速度对以后的推论,通常第一个是缓慢的,因为它是加载模型。
下面是运行在视频上的一些示例代码:
如果硬件支持,您可以设置后端以获得进一步的速度。我所见过的最佳表现是今年GSOC的nvidia后端:
https://stackoverflow.com/questions/58980744
复制相似问题