在这篇博客中,咱们将介绍怎么运用YOLOv5实现车辆辨认。YOLO(You Only Look Once)是一种流行的实时目标检测算法,YOLOv5是其最新版别,功能得到了明显进步。咱们将运用Python编写代码,为您展示怎么实现实时车辆检测。
源码:www.hedaoapp.com/goods/goods…
一、装置必要库
首要,咱们需要装置YOLOv5所需的依靠库。确保您的体系已经装置了Python,然后运转以下命令:
pip install torch torchvision opencv-python
接下来,咱们需要克隆YOLOv5的官方库房,并装置所需的依靠:
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt
二、下载预练习模型
咱们将运用在COCO数据集上预练习的YOLOv5模型。这儿咱们挑选YOLOv5s,由于它较小,适用于实时检测。您能够在YOLOv5的发布页面找到其他版别的预练习模型。运转以下命令下载YOLOv5s模型:
wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
三、编写车辆辨认代码
咱们首要导入所需的库:
import cv2
import torch
from yolov5.utils.general import non_max_suppression
接下来,咱们界说一个函数来加载模型:
def load_model(weights_path, device):
model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model=weights_path)
model.to(device)
model.eval()
return model
现在,咱们将创建一个函数来处理模型的输出:
def process_detections(detections, conf_thres):
car_detections = []
for det in detections:
if det[5] == 2: # 2对应于COCO数据集中的“汽车”类别
if det[4] >= conf_thres:
car_detections.append(det[:4].cpu().numpy().astype(int))
return car_detections
接下来,咱们界说一个函数用于在图画上制作检测成果:
def draw_detections(image, detections, color=(0, 255, 0), thickness=2):
for det in detections:
x1, y1, x2, y2 = det
cv2.rectangle(image, (x1, y1), (x2, y2), color, thickness)
return image
最终,咱们编写主程序,从摄像头捕获视频流并进行实时车辆检测:
def main():
device = torch.device("cuda if torch.cuda.is_available() else "cpu") weights_path = "yolov5s.pt" conf_thres = 0.5
model = load_model(weights_path, device)
cap = cv2.VideoCapture(0) # 运用摄像头
while True:
ret, frame = cap.read()
if not ret:
break
# 将图画转换为模型输入格式
img = torch.from_numpy(frame).permute(2, 0, 1).float() / 255.0
img = img.unsqueeze(0).to(device)
# 进行目标检测
with torch.no_grad():
pred = model(img)[0]
pred = non_max_suppression(pred, conf_thres)
# 提取车辆检测成果
detections = process_detections(pred[0], conf_thres)
# 在图画上制作检测成果
frame = draw_detections(frame, detections)
# 显示成果
cv2.imshow("Car Detection", frame)
# 按'q'键退出
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
if name == "main":
main()
现在,您能够运转此代码进行实时车辆检测。摄像头将捕获视频流,YOLOv5将辨认图画中的车辆,并用矩形框标注出来。
YOLOv5还能够辨认其他类型的目标,您能够根据需要调整代码。此外,能够尝试运用其他版别的预练习模型(如YOLOv5m或YOLOv5l)以取得更高的准确性,但可能会下降实时功能。
总归,YOLOv5是一个强壮且实用的目标检测算法,非常适用于实时车辆辨认。经过运用Python和YOLOv5,您能够轻松地开发自己