如何解决是否可以在单个 python 程序中一个接一个地运行两个 Haar Cascade 模型进行对象检测?
我有一个汽车进入停车位的测试视频,我想在其中应用两个 Haar Cascade 模型。我要执行的任务如下:
- 阅读框架。
- 加载第一个预训练的 Haar Cascade 模型,用于检测所有过往车辆。
- 检测接近停车位的汽车。
- 计算汽车中心并计算汽车中心与停车位中心之间的欧几里得距离。如果欧几里得距离在近似误差值内,则可以得出汽车在停车位边界内的结论。因此,如果距离大于预定的误差值,则程序输出“停车位内无车”。如果距离小于或等于预先确定的误差值,则执行以下操作:
- 加载第二个训练有素的 Haar Cascade 模型,该模型检测假设停在停车位的特定汽车。
- 如果停车位内的汽车具有训练模型的特征,则编程输出“Seasonal Car”。如果不是,程序会输出“Unauthorized Car”。
我附上了我在这里处理过的代码:
import cv2
import numpy as np
coordinates = np.array([(127,206)]) #center of parking slot
def detect_cars(frame):
allcars_cascade = cv2.CascadeClassifier('cars.xml') #model that detect all car
allcars = allcars_cascade.detectMultiScale(frame,1.15,4)
for (x,y,w,h) in allcars:
cv2.rectangle(frame,(x,y),(x + w,y + h),color=(0,255),thickness=2)
center = np.array([x + w // 2,y + h // 2])
radius = 2
cv2.circle(frame,tuple(center),radius,(255,255,0),2)
error = np.linalg.norm(coordinates - center)
if error <= 60:
car_cascade = cv2.CascadeClassifier('traincacscade.xml') #trained model to detect a specific car
car = car_cascade.detectMultiScale(frame,4)
for (a,b,c,d) in car:
cv2.rectangle(frame,(a,b),(a + c,b + d),thickness=2)
if len(car) != 0:
print("Seasonal Car")
else:
print("Unauthorized Car")
else:
print("No car inside parking slot")
return frame
def Simulator():
CarVideo = cv2.VideoCapture('video.mp4')
while CarVideo.isOpened():
ret,frame = CarVideo.read()
controlkey = cv2.waitKey(1)
if ret:
cars_frame = detect_cars(frame)
cv2.imshow('frame',cars_frame)
else:
break
if controlkey == ord('q'):
break
CarVideo.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
Simulator()
我遇到的问题是第二个模型似乎不起作用。当检测到汽车在停车位边界内时,程序会直接打印“Unauthorized Car”。就好像根本没有读取第二个模型一样。注意:我已经独立运行了第二个模型 (traincascade.xml) 来检查对受过训练的汽车的检测,它运行得非常好。但是当我将两个 Haar Cascade 模型组合成一个这样的程序时,第二个模型就不起作用了。就好像程序优先考虑较大的模型(即 car.xml)并且不允许检测较小的模型(traincascade.xml)。我可以知道这是运行多个 Haar Cascade 模型的限制还是有更好的代码编写方法来实现我想要的任务?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。