如何获取YOLOv8中无画线道路车辆计数结果并操作展示?
基于YOLO实现无画线车辆计数并获取计数值方案
1. 核心计数逻辑实现
以YOLOv8为例,通过检测结果统计目标类别数量即可完成无画线计数:
from ultralytics import YOLO # 加载YOLO预训练模型(可替换为自定义训练权重) model = YOLO('yolov8n.pt') # 对目标图片执行推理 results = model('your_image_path.jpg') # 统计汽车数量(COCO数据集里汽车的类别ID为2) car_count = 0 for result in results: # 提取检测框的类别ID和置信度 class_ids = result.boxes.cls.cpu().numpy() confs = result.boxes.conf.cpu().numpy() # 过滤置信度≥0.5的汽车检测结果,避免误检 valid_cars = (class_ids == 2) & (confs >= 0.5) car_count += sum(valid_cars) # 输出计数结果 print(f"检测到汽车数量:{car_count}")
2. 计数值的后续操作与展示
(1)图片可视化标注
直接在原图上叠加计数结果,直观展示:
from PIL import Image, ImageDraw, ImageFont import os # 打开原始图片 img = Image.open('your_image_path.jpg') draw = ImageDraw.Draw(img) # 设置字体(若无arial.ttf,可替换为系统可用字体路径) font_path = 'arial.ttf' if os.path.exists('arial.ttf') else None font = ImageFont.truetype(font_path, 40) if font_path else ImageFont.load_default() # 在图片左上角绘制计数文本 draw.text((30, 30), f"车辆计数:{car_count}", fill=(255, 0, 0), font=font) # 保存或展示结果图片 img.save('count_visualized.jpg') img.show()
(2)其他扩展操作
- 记录到日志文件:
from datetime import datetime with open('car_count_log.txt', 'a', encoding='utf-8') as f: f.write(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - 汽车数量:{car_count}\n")
- 发送至API接口:
import requests api_url = "your_api_endpoint" data = {"car_count": car_count, "timestamp": datetime.now().isoformat()} response = requests.post(api_url, json=data)
3. 关键注意事项
- 若使用YOLOv5/v6等其他版本,核心逻辑一致,仅检测结果的提取方式略有差异(比如YOLOv5中用
results.pandas().xyxy[0]提取检测数据) - 若针对特定场景(如封闭园区、特定车型),建议使用自定义标注数据微调YOLO模型,提升检测精度和计数准确性
- 视频流场景下,只需将单帧图片推理改为逐帧循环处理,每帧输出计数即可
内容的提问来源于stack exchange,提问作者BALO
相关产品推荐
相关产品推荐

