如何解决有条件的开启 CV 汽车检测
我正在尝试创建一个程序,在该程序中我的代码分析来自我的安全摄像头的视频并定位已发现的汽车。我已经弄清楚如何找到汽车并在它们周围绘制红色矩形,但我想添加一个条件,如果检测到超过 5 辆汽车,则仅绘制框。但是,由于数组的存在,我无法这样做。我将如何修复此代码?
import cv2
classifier_file = 'cars.xml'
car_tracker = cv2.CascadeClassifier(classifier_file)
video = cv2.VideoCapture("footage.mp4")
while True:
(read_successful,frame) = video.read()
if read_successful:
grayscaled_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
else:
break
cars = car_tracker.detectMultiScale(grayscaled_frame)
if cars > 4:
for (x,y,w,h) in cars:
cv2.rectangle(frame,(x,y),(x + w,y + h),(0,255),2)
cv2.imshow('Car Detector',frame)
cv2.waitKey(0)
顺便说一下,我正在使用 anaconda 环境和 python 3.8.8
解决方法
这是一个使用不同技术的示例,在这种情况下,您可以使用 cvlib 它有一个 object_detection
类来检测多个类。这使用 yolov4 权重,您将能够检测道路上的任何汽车,或者在这种情况下通过一个网络摄像头,只需确保汽车在摄像头前面而不是 2d 位置。
import cv2
import matplotlib.pyplot as plt
# pip install cvlib
import cvlib as cv
from cvlib.object_detection import draw_bbox
im = cv2.imread('cars3.jpg')
#cv2.imshow("cars",im)
#cv2.waitKey(0)
bbox,label,conf = cv.detect_common_objects(im)
#yolov4 weights will be downloaded. Check: C:\Users\USER_NAME\.cvlib\object_detection\yolo
# if the download was not successful delete yolo folder and try again,it will be downloaded again
# after download the weights keep running the script it will say 0 cars,then close Anaconda spyder anda reopen it and try again.
#get bbox
output_image_with_bbox = draw_bbox(im,bbox,conf)
number_cars = label.count('car')
if number_cars > 5:
print('Number of cars in the image is: '+ str(number_cars))
plt.imshow(output_image_with_bbox)
plt.show()
else:
print('Number of cars in the image is: '+ str(number_cars))
plt.imshow(im)
plt.show()
输出:
您好。
,您有一系列检测。
您只需要在数组上调用 len()
来获取元素的数量。这是 Python 的内置函数。
cars = car_tracker.detectMultiScale(grayscaled_frame)
if len(cars) >= 5:
for (x,y,w,h) in cars:
cv2.rectangle(frame,(x,y),(x + w,y + h),(0,255),2)
不需要任何其他库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。