Romonaga/PixyPilot

GitHub: Romonaga/PixyPilot

PixyPilot 是一款开源的 Linux 控制面板,为 EMEET PIXY AI PTZ 摄像头提供原生的 PTZ 控制、视频预览、AI 追踪及逆向工程诊断能力。

Stars: 0 | Forks: 0

# PixyPilot PixyPilot 是一款专为 EMEET PIXY AI PTZ 摄像头打造的开源 Linux 控制面板。 它提供了 EMEET Studio 的 Linux 替代方案,支持 Ubuntu 24.04+、PTZ 控制、摄像头预设、AI 追踪控制、视频预览、录制、原生 V4L2/HID 集成、UVC 扩展诊断,以及用于逆向工程的 Windows USBPcap 抓包导入功能。 关键词:EMEET PIXY Linux, EMEET PIXY Ubuntu, PTZ 摄像头控制, EMEET Studio 替代方案, Linux 摄像头控制, Home Assistant PTZ 摄像头, Home Assistant 摄像头控制。 ## 截图 ![PixyPilot 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/053b07e3b7021149.png) ![PTZ 控制](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c56dbed3cd021227.png) ![图像预设与控制](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/72de716a7d021232.png) 目前的实现侧重于已确认的 Linux 控制路径: - 枚举摄像头设备 - 枚举 V4L2 控制项 - 枚举 V4L2 视频格式 - 将控制项公开为 JSON - 通过原生 V4L2 ioctls 验证控制项并设置值 - 通过原生 V4L2 ioctls 切换视频格式 - 预览选定的摄像头流 - 将选定的流录制到本地磁盘 - 检测 Linux video/HID 热插拔事件,并在连接或移除摄像头时刷新 UI - 保存 HID 和 UVC 诊断快照以进行关联分析 - 导入 Windows USBPcap 的 `.pcap` / `.pcapng` 抓包文件,并附带操作笔记和伴生元数据 - 渲染驾驶舱风格的 React UI,用于 PTZ、图像、对焦和曝光控制 厂商特定的 Pixy HID 路径被隔离在其独立的 provider 中,目前涵盖已解码的智能控制、方向/矢量 PTZ 移动、镜像/旋转、测光以及原生 PTZ 预设的保存/加载。原始的 UVC 扩展单元 (extension-unit) 功能记录在 `PIXY_NOTES.md` 中,在其选择器被安全解码之前,将保持只读状态。 当 PixyPilot 可以从局域网内的 Windows 机器访问时,可以通过 `Windows Capture Inbox` 面板上传 Windows USBPcap 文件。上传的抓包文件会连同伴生元数据一起存储在 `pcaps/imports/` 目录下,以用于关联分析。 面向其他 Linux 用户的逆向工程发现收集在 [docs/EMEET_PIXY_REVERSE_ENGINEERING.md](docs/EMEET_PIXY_REVERSE_ENGINEERING.md) 中。抓包文件索引、HID 报告布局以及已确认的命令目录位于 [docs/EMEET_PIXY_HID_REFERENCE.md](docs/EMEET_PIXY_HID_REFERENCE.md)。UVC 扩展单元工作流程记录在 [docs/UVC_EXTENSION_CORRELATION.md](docs/UVC_EXTENSION_CORRELATION.md) 中。Home Assistant 集成计划位于 [docs/HOME_ASSISTANT.md](docs/HOME_ASSISTANT.md),托盘应用说明位于 [docs/TRAY_APP.md](docs/TRAY_APP.md),未来的想法追踪于 [docs/ROADMAP.md](docs/ROADMAP.md)。 ## 致谢 PixyPilot 建立在 `rm1138` 发布的公开 EMEET PIXY 逆向工程研究基础之上: - https://gist.github.com/rm1138/ef132c3a39f3c1effabf6354e2eca965 在项目初期,这是我们能找到的唯一公开的、专注于 Linux 的 EMEET PIXY 控制参考资料,它帮助确认了设备实用的控制路径和 HID 报告结构。 PixyPilot 还与 `LarsArtmann/emeet-pixyd` 进行了交叉验证: - https://github.com/LarsArtmann/emeet-pixyd 该项目独立确认了相同的核心追踪/隐私、手势和音频 HID 命令族。它还帮助验证了只读 HID 状态查询的实用性,以及某些 HID 命令所需的较长的 config-to-commit 时间。PixyPilot 目前的实现还包括本仓库中开发的额外本地测试、来自 EMEET Studio 的数据包抓取、原生 V4L2 ioctl 研究以及 UI/应用程序代码。 PixyPilot 还与 `RoseWaveStudio/PixyBar` 进行了交叉验证: - https://github.com/RoseWaveStudio/PixyBar 该项目是一个原生的 macOS 菜单栏控制器和 `pixyctl` HID 助手。它帮助确认了目标追踪模式、基于角度的 PTZ 移动/居中命令、响应组掩码,以及一个实用说明:仅当其他应用打开视频流时,AI 追踪才会明显地进行跟随。 PixyPilot 还与 `nick0413/Emeet_pixy_for_linux` 进行了交叉验证: - https://github.com/nick0413/Emeet_pixy_for_linux 该项目独立确认了标准的 V4L2 与厂商 HID 分离的方案。它虽然没有解码额外的 UVC 扩展选择器,但其 UI 进一步印证了诸如曝光、白平衡和对焦等依赖控制项需要明显的自动/手动解锁操作。 ## 运行应用 ``` ./tools/run-pixypilot.sh ``` 打开 `http://127.0.0.1:8000`。 这是正常用户模式:一条命令和一个本地地址。首次运行会创建 `backend/.venv`,安装后端依赖,安装前端包,并构建 UI。随后 FastAPI 将通过同一个端口同时提供 API 和 React 应用的服务。 ## 配置 普通用户应编辑 `config/pixypilot.yaml`。 ``` server: host: 127.0.0.1 port: 8000 storage: presets: config/presets.yaml recordings: recordings safety: start_in_privacy: true ``` 应用还会在“运行时配置 (Runtime Config)”面板中显示当前使用的配置文件、存储路径和本地 URL。更改主机和端口需要重启 PixyPilot。更多详细信息请参见 [docs/CONFIGURATION.md](docs/CONFIGURATION.md)。 要直接从 Windows 上传抓包文件,请将 PixyPilot 绑定到您的局域网地址: ``` server: host: 0.0.0.0 port: 8000 ``` 然后从 Windows 打开 `http://:8000`,并使用 `Windows Capture Inbox` 面板。在启用身份验证之前,请仅限局域网内使用。 ## 开发者模式 开发者模式仅适用于在开发 PixyPilot 本身时的前端热重载。普通用户不需要使用此模式。 终端 1: ``` cd backend python3 -m venv .venv source .venv/bin/activate pip install -e ".[dev]" pixypilot-api ``` 终端 2: ``` cd frontend npm install npm run dev ``` 打开 `http://127.0.0.1:5173` 即可使用 Vite 热重载 UI。它会将 API 请求代理到 `http://127.0.0.1:8000`。 标准的 V4L2 设备检查、控制项枚举、格式枚举、控制项写入以及格式切换均使用原生 Linux V4L2 ioctls。MJPG 实时预览同样使用原生 V4L2 mmap 捕获。 ## 控制预设 图像、对焦和曝光面板可以保存命名的本地预设。预设存储在 `config/presets.yaml` 中,由于这些值特定于用户/工作区,该文件会被 git 忽略。 可以在 `config/pixypilot.yaml` 中的 `storage.presets` 下设置不同的预设文件。 ## 视频预览与录制 PixyPilot 通过后端将实时的监控画面以 MJPEG 格式进行流式传输。 - MJPG 预览使用原生 V4L2 mmap 捕获,且不会通过 shell 调用 `ffmpeg`。 - 非 MJPG 预览(例如 YUYV)仍会回退到 `ffmpeg`,因为这些原始帧需要进行 JPEG 编码才能供浏览器流式传输。 - 录制依然使用 `ffmpeg`,并默认将文件写入 `recordings/` 目录下。 `recordings/` 目录会被 git 忽略,因为摄像头的录像文件既大又涉及隐私。 可以在 `config/pixypilot.yaml` 中的 `storage.recordings` 下设置不同的录制目录。 ## HID 权限 在实验性的智能控制功能生效之前,PixyPilot 需要对 PIXY hidraw 节点的写入权限。请安装一次附带的 udev 规则: ``` sudo install -m 0644 deploy/udev/70-pixypilot-hid.rules /etc/udev/rules.d/70-pixypilot-hid.rules sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-match=hidraw ``` 如果当前的 `/dev/hidrawN` 节点没有立即更新,请拔下摄像头并重新连接。正常工作的节点权限应显示为 `root plugdev` 以及 `crw-rw----`,并且 `/api/pixy-hid/status` 应报告 `readable: true` 和 `writable: true`。 ## 测试 ``` cd backend source .venv/bin/activate pytest cd frontend npm test ```
标签:PTZ, React, Syscalls, V4L2, 协议分析, 摄像头控制, 权限提升, 硬件控制, 自动化攻击, 逆向工具