1.介绍
该项目使用的汽车检测使用的也是 haar 模型。这是一种基于机器学习的汽车检测算法。它使用了 Haar 特征来检测汽车,可以在图像中快速检测到汽车并输出其位置。采用该方法检测速度较快,但准确率略低。
2.OpenCV 实现汽车检测
可以采用官方自带的汽车检测 HAAR 分类器实现对视频的汽车检测,也可以自己改成摄像头的方式。
3.源程序代码
# 载入必要的库
import cv2
import time
import numpy as np# 载入HAAR分类器
car_classifier = cv2.CascadeClassifier('./images/haarcascade_car.xml')
# 载入视频文件
cap = cv2.VideoCapture('./images/cars.avi')# 线程函数操作库
import threading # 线程
import ctypes
import inspect# 线程结束代码
def _async_raise(tid, exctype):tid = ctypes.c_long(tid)if not inspect.isclass(exctype):exctype = type(exctype)res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))if res == 0:raise ValueError("invalid thread id")elif res != 1:ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)raise SystemError("PyThreadState_SetAsyncExc failed")def stop_thread(thread):_async_raise(thread.ident, SystemExit)# 创建显示控件
def bgr8_to_jpeg(value, quality=75):return bytes(cv2.imencode('.jpg', value)[1])import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display
car_imge = widgets.Image(format='jpeg', width=480, height=320)
display(car_imge)#一旦视频成功加载,循环播放
def car_Video_display():while cap.isOpened():time.sleep(.05)# Read first frameret, frame = cap.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# Pass frame to our car classifiercars = car_classifier.detectMultiScale(gray, 1.4, 2) # Extract bounding boxes for any bodies identifiedfor (x,y,w,h) in cars:cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 255), 2)car_imge.value = bgr8_to_jpeg(frame)cap.release()t = threading.Thread(target=car_Video_display)
t.setDaemon(True)
t.start()# 结束线程
stop_thread(t)