Hanzo Huang2026-09-01

在 Raspberry Pi 5 上使用 Hailo-8 构建实时交通分析

在 Raspberry Pi 5 上使用 Hailo-8 运行本地交通分析。从浏览器仪表盘统计选定区域车辆、跟踪其移动并测量方向线穿越。

Computer VisionEdge AITrafficGithub

在 Raspberry Pi 5 与 Hailo-8 上构建实时交通分析

本项目将 Raspberry Pi 5 和 Hailo-8 转变为本地交通分析系统。它使用 YOLOv11 检测车辆,并在浏览器中呈现结果。您可以使用上传的图片或视频、USB 摄像头或 RTSP 摄像头。

1. 什么是交通分析?

交通分析在车辆检测的基础上增加了有用的规则:

功能显示内容
区域计数每个用户绘制区域内的车辆数量
车辆跟踪为每辆车分配稳定的 ID 并显示短移动轨迹
越线计数总越线次数以及 A→B 和 B→A 的单独计数

浏览器用于选择源、绘制区域和越线,并查看结果。所有处理均在 Raspberry Pi 上进行。

Hailo-8 运行 YOLOv11 推理。Raspberry Pi 处理视频输入、跟踪、计数和 Web 仪表板。

text
Image, video, USB camera, or RTSP camera
             FastAPI backend
        YOLOv11 inference on Hailo-8
       Area count · Track · Line count
             Browser dashboard

该应用检测自行车、汽车、摩托车、公交车和卡车。每个启用的交通功能共享同一个推理结果。

Traffic Analytics dashboard

2. 三种分析功能及其组合使用

区域计数

在道路、入口、停车区或其他区域上绘制多边形。当车辆检测框的中心位于已保存的多边形内时,即计为一辆车。

您可以创建多个命名区域。每个区域都有各自的总数和车辆类别细分。如果区域重叠,同时位于两者内的车辆会在每个区域中各计一次。

Vehicle area counting

车辆跟踪

跟踪为每辆车分配一个 ID,并在其身后绘制短轨迹,使每辆车的行驶方向和最近路径一目了然。

当车辆消失时间过长时,其轨迹会过期。同时,在发生较大的位置跳跃后,轨迹线也会被清除,以防止图像中出现错误的穿越线。

Vehicle tracking

方向性越线计数

绘制一条带有端点 A 和 B 的线段。当被跟踪的车辆越过该线时,仪表板会更新:

  • 总越线次数
  • A→B 方向越线次数
  • B→A 方向越线次数

每辆车只被计数一次。车辆路径必须穿过绘制的线段,因此画面中其他位置的移动不会改变计数。

Directional line-crossing count

同时使用三种功能

区域计数、跟踪和越线计数可以同时运行。它们复用相同的 YOLOv11 检测结果,因此启用全部三项功能并不会让模型运行三次。

要显示所有功能:

  1. 选择图片、视频、USB 摄像头或 RTSP 源。
  2. 启用 Area countVehicle trackLine count
  3. 绘制并保存至少一个计数区域。
  4. 绘制两点越线。
  5. 选择 Analyze imageStart analysis

仪表板随后会在同一交通画面上显示当前区域占用情况、车辆路径以及方向性越线总数。

Area counting, tracking, and line crossing together

3. 在 Raspberry Pi 5 与 Hailo-8 上运行

要求

  • Raspberry Pi 5 或 reComputer R20,运行 64 位 Raspberry Pi OS Bookworm
  • Hailo-8 加速器
  • 安装过程中需要互联网连接
  • 一张图片、一段视频、一个 USB 摄像头或一个 RTSP 摄像头

安装并验证 HailoRT

bash
sudo apt update
sudo apt install hailo-all
sudo reboot

重启后,验证系统:

bash
uname -m
hailortcli fw-control identify
ls /dev/hailo0

架构必须为 aarch64,且 Hailo 设备必须可见。

克隆项目

bash
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demos

安装 Miniforge 和 Python 3.12

随附的 HailoRT wheel 需要 CPython 3.12、Linux ARM64 和 HailoRT 4.23。Miniforge 提供 Python 3.12,无需更改系统 Python。

bash
sudo apt install curl
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh

允许安装程序初始化 shell,然后关闭并重新打开终端。创建项目环境:

bash
conda config --set auto_activate_base false
conda create --name pi-hailo python=3.12 pip -y
conda activate pi-hailo
python --version
python -m pip install -r requirements.txt
python -m pip install runtime/wheels/hailort-4.23.0-cp312-cp312-linux_aarch64.whl

Python 必须报告版本为 3.12.x。如果已安装的 HailoRT 驱动程序不是 4.23,请安装与驱动程序匹配的 HailoRT Python wheel。

验证 Python 包:

bash
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"

启动交通分析

不使用 USB 摄像头启动:

bash
python examples/cv/traffic-analytics/run.py --camera-id -1

在以下地址打开仪表板:

text
http://PI_IP_ADDRESS:8000

要使用第一个 USB 摄像头,请使用以下命令启动:

bash
python examples/cv/traffic-analytics/run.py --camera-id 0

对于 RTSP 摄像头,请使用摄像头 ID -1 启动,打开仪表板,输入完整的 rtsp:// 或 rtsps:// URL,然后选择 Connect

检查应用

从另一个终端运行:

bash
curl http://127.0.0.1:8000/api/health

响应应报告 model_exists 为 true 且 hailo_platform_importable 为 true。如果任一为 false,请检查 models/yolov11n.hef 是否存在,以及 HailoRT wheel 是否与驱动程序、Python 版本和 ARM64 架构匹配。

交通分析现已就绪。选择源,绘制所需功能对应的引导线,然后开始分析。