🎯 YOLO 实时目标检测笔记:Windows 摄像头推流 + WSL YOLO 识别
环境声明
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
🎯 YOLO 实时目标检测笔记:Windows 摄像头推流 + WSL YOLO 识别
🧩 场景说明
- Windows 端摄像头(如 HP 5MP Camera)
- 使用
ffmpeg
推流至本地 RTSP 服务器 - WSL 中运行 Ultralytics YOLO,读取 RTSP 流进行目标检测
⚙️ 环境配置(WSL 中)
✅ 安装依赖
pip install -U pip
pip install opencv-python
pip install torch torchvision torchaudio
✅ 安装 Ultralytics(源码模式)
# 克隆仓库
git clone https://github.com/ultralytics/ultralytics
# 进入目录
cd ultralytics
# 以开发模式安装(editable)
# pip install -e .
python3 -m pip install -e .
✅ 优势:你可以随时修改 YOLO 源码,调试/开发更灵活。
✅ 步骤一:安装并运行 RTSP 服务器(mediamtx)
推荐使用轻量开源 RTSP 服务器 mediamtx(原 rtsp-simple-server)
安装(WSL 中):
wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.3/mediamtx_v1.12.3_linux_amd64.tar.gz
tar -xvzf mediamtx_linux_amd64.tar.gz
cd mediamtx
./mediamtx
✅ 步骤二:Windows 端摄像头推流(FFmpeg)
推荐推流命令如下:
ffmpeg -f dshow -i video="HP 5MP Camera" -vf "yadif,format=yuv420p" -vcodec libx264 -preset ultrafast -tune zerolatency -color_primaries bt709 -colorspace bt709 -color_trc bt709 -r 30 -g 30 -threads 2 -pix_fmt yuv420p -f rtsp rtsp://172.20.24.196:8554/live.sdp
✅ 步骤三:WSL 中运行 YOLO 目标检测
yolo detect predict \
model=yolov8n.pt \
source="rtsp://127.0.0.1:8554/live.sdp" \
show=True \
device=cpu
✅ 可选:调试 RTSP 流
ffplay rtsp://127.0.0.1:8554/live.sdp
💡 常见问题排查
问题 | 原因或解决方案 |
---|---|
udp:// 无法打开 |
YOLO 不完全支持,推荐使用 rtsp:// 转发 |
YOLO 无法连接 RTSP | 确保 RTSP 服务在运行,FFmpeg 正常推送 |
无法显示窗口 | 确保你用的是支持 GUI 的 WSL(如 WSLg 或 X11 桥接) |
torch.cuda.is_available(): False |
使用 device=cpu |
✅ 总结流程图
Windows 摄像头
│
└───▶ FFmpeg(推送) ───▶ RTSP Server(Mediamtx)
│
▼
WSL YOLO(读取 RTSP 流识别)
问题说明 1
➜ python3 --version
Python 3.8.10
➜ pip --version
/usr/bin/pip:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import load_entry_point
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
➜ git clone https://github.com/ultralytics/ultralytics
Cloning into 'ultralytics'...
remote: Enumerating objects: 61803, done.
remote: Counting objects: 100% (201/201), done.
remote: Compressing objects: 100% (140/140), done.
remote: Total 61803 (delta 139), reused 78 (delta 61), pack-reused 61602 (from 3)
Receiving objects: 100% (61803/61803), 33.73 MiB | 11.33 MiB/s, done.
Resolving deltas: 100% (45988/45988), done.
➜ cd ultralytics
➜ pip install -e .
ERROR: File "setup.py" not found. Directory cannot be installed in editable mode: /home/ultralytics
(A "pyproject.toml" file was found, but editable mode currently requires a setup.py based build.)
➜ ls
CITATION.cff CONTRIBUTING.md LICENSE README.md README.zh-CN.md docker docs examples mkdocs.yml pyproject.toml tests ultralytics
说明
Ultralytics 现在是基于 pyproject.toml
的现代构建系统,而 pip install -e .
旧的可编辑模式要求有 setup.py
,所以直接用会失败。
解决方案
用新的 PEP 660 可编辑模式
Python 3.8+ + pip 21.3+ 才支持。
python -m pip install --upgrade pip setuptools wheel
python3 -m pip --version
pip 25.0.1 from /home/luyang/.local/lib/python3.8/site-packages/pip (python 3.8)
cd ultralytics
python3 -m pip install -e '.[dev]'
问题说明 2
第一次运行 yolo 时由于权重文件不存在,会先下载权重文件。如果下载过程中 ctrl c 异常结束后,再次运行就会报错。
yolo detect predict model=yolo11n.pt source=./demo.mp4
Traceback (most recent call last):
File "/home/max/.local/bin//yolo", line 8, in <module>
sys.exit(entrypoint())
File "/home/ultralytics/ultralytics/cfg/__init__.py", line 956, in entrypoint
model = YOLO(model, task=task)
File "/home/ultralytics/ultralytics/models/yolo/model.py", line 81, in __init__
super().__init__(model=model, task=task, verbose=verbose)
File "/home/ultralytics/ultralytics/engine/model.py", line 151, in __init__
self._load(model, task=task)
File "/home/ultralytics/ultralytics/engine/model.py", line 295, in _load
self.model, self.ckpt = attempt_load_one_weight(weights)
File "/home/ultralytics/ultralytics/nn/tasks.py", line 1549, in attempt_load_one_weight
ckpt, weight = torch_safe_load(weight) # load ckpt
File "/home/ultralytics/ultralytics/nn/tasks.py", line 1447, in torch_safe_load
ckpt = torch_load(file, map_location="cpu")
File "/home/ultralytics/ultralytics/utils/patches.py", line 118, in torch_load
return torch.load(*args, **kwargs)
File "/home/max/.local/lib/python3.8/site-packages/torch/serialization.py", line 1072, in load
with _open_zipfile_reader(opened_file) as opened_zipfile:
File "/home/max/.local/lib/python3.8/site-packages/torch/serialization.py", line 480, in __init__
super().__init__(torch._C.PyTorchFileReader(name_or_buffer))
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory
说明
关键日志:
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory
意思是 PyTorch 在加载权重文件时发现文件不是一个有效的 .pt zip 格式,通常有几种原因:
yolo11n.pt
文件损坏或下载不完整- Ultralytics 会在第一次运行时自动下载权重,如果网络中断或下载被墙,文件可能是空的或部分内容缺失。
- 路径错误,加载到了一个错误的文件
- 例如你目录下可能有一个同名空文件。
- Python / PyTorch 版本和权重文件格式不兼容(概率小,但存在)
解决方案
手动下载权重再运行
从官方仓库下载:
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt -O yolo11n.pt
然后:
yolo detect predict model=yolo11n.pt source=./demo.mp4