疲劳警报迟到了 10 秒:Android 端侧多检测器实时管线的调试实录

核心问题:当 YOLO、人脸、人手三个模型同时跑在一条手机摄像头流上,怎么让快的检测器不被慢的拖死,让该响的警报一秒都不迟到? 第一次真机测试:警报迟到了八秒 凌晨一点,把 APK 装到真机上,对着摄像头闭眼。预期:闭眼 1.2 秒后疲劳警报响起。实际:我闭着眼睛数了快十秒,屏幕上的"闭眼时长"读数还在几百毫秒徘徊,警报才不情不愿地响起来。 第一反应是推理太慢。但看监控数据完全不是这么回事——MediaPipe 人脸关键点单帧只要几毫秒,YOLO 手机检测也就三五十毫秒,加起来远够不到十秒。问题出在别处。 这个项目是个"AI 检测助手":一条 CameraX 取流管线,两种模式——车损分析(后摄,YOLO 检测车辆)和驾驶模式(前摄,同时跑 YOLO 手机检测 + MediaPipe 疲劳检测 + 手部验证)。从 23:30 的 init 提交到 00:45 的最后一个提交,75 分钟里踩的每一个坑,都值得记下来。 一条管线,三个检测器,谁也不许拖累谁 先交代架构。整个 App 只有一个 ImageAnalysis 分析器,模式切换只是改分发分支,不重绑相机——只有手动切前后摄才重新 bind。 graph LR A[CameraX 取流<br/>RGBA_8888] --> B[转 Bitmap] B --> C{YOLO 手机类} B --> D{FaceLandmarker<br/>疲劳} B --> E{HandLandmarker<br/>按需} C --> F[叠框 + 状态机] D --> F E --> F F --> G[声音警报 / 叠框] 几个值得说的技术选择: ...

August 24, 2026 · FXIO