🚗 基于 scrcpy + PyTorch 的车载系统多屏自动化测试工具开发
随着智能汽车的快速发展,车载设备的视觉系统日益复杂,包含多屏显示、UI交互、系统稳定性检测等关键功能。然而,传统的手动测试方式耗时且容易遗漏问题,尤其在多屏同步、广告显示、动画渲染、系统卡顿等多种视觉异常的检测中,人眼难以快速识别和定位问题。
为此,我们提出一种基于 scrcpy 与 PyTorch 构建的车载系统多屏自动化测试工具 ,通过图像采集、AI检测、异常报警等功能模块,实现对车载系统视觉质量的全自动、高精度检测,提升测试效率和准确性。
本文将详细介绍该工具的开发思路、系统架构、实现流程、代码示例及优化建议,帮助读者实现一个实用的车载系统视觉检测自动化工具。
🧠 一、开发背景与价值
1. 移动车机系统面临的挑战
在智能座舱系统中,多屏(如中控屏、仪表盘、HUD、后视镜等)均需进行自动化质量检测,但传统方法存在以下问题:
- 人工检测效率低下;
- 多屏不同步导致检测错误;
- 缺少系统性评估机制;
- 实时性要求高,需快速响应系统异常;
2. scrcpy 的优势
- 开源、速度快、低资源占用;
- 适用于Android Automotive与普通车机系统;
- 可通过ADB命令与车机系统实现远程调试与视频采集;
- 提供流畅的画面输出,适合作为图像采集工具;
3. PyTorch 的优势
- 模型训练灵活,支持多种AI检测模块(如Unsupervised Learning、YOLOv8、PatchCore等);
- 图像处理能力强,适用于多屏图像质量分析;
- 兼容性强,支持与车载系统进行联动检测;
🛠️ 二、系统架构与功能模块设计
我们设计了一个模块化、可扩展的多屏自动化测试工具,包含以下功能主要模块:
[车载系统启动与连接]
→ [图像采集(通过 scrcpy 与 ADB)]
→ [图像预处理(如裁剪、降噪、灰度化)]
→ [基于PyTorch的AI检测模型(如YOLOv8 + PatchCore)]
→ [异常检测与报警系统]
→ [日志记录与结果生成]
✅ 每个模块的功能说明
| 模块 | 功能 | 目的 |
|---|---|---|
| 图像采集 | 利用 scrcpy 实时采集车机屏幕图像 | 提供AI检测的原始数据输入 |
| 图像预处理 | 图像标准化、去噪、空间裁剪 | 提升AI检测模型输入质量 |
| AI检测模型 | 使用 PyTorch 模型进行花屏、黑屏、跳帧、代码错误等检测 | 构建AI驱动的自动化检测系统 |
| 报警与结果报告 | 触发报警、日志记录、生成测试报告 | 实现多屏异常的自动化反馈 |
| 系统集成 | 支持Linux + Android Automotive | 扩展性强,适配多种平台 |
📌 三、核心技术选型
1. scrcpy 的使用与封装
scrcpy 是一个开源的Android屏幕镜像工具 ,支持车载系统的远程图像采集,其使用方式包括:
bash
# 安装 scrcpy(Linux下)
sudo apt update
sudo apt install ffmpeg
git clone https://github.com/AlmirKo/scrcpy.git
cd scrcpy
./build.sh
./scrcpy
📌 注意:需确保车机系统已开启USB调试(Debugging)功能,并安装
scrcpy的Android支持包。
我们建议将其封装为一个Python模块 或 Linux shell脚本 ,实现图像采集的 定时触发 + 异常检测。
2. PyTorch 框架选型与模型适配
- 选择 PyTorch Lightning 或 PyTorch 框架 构建检测模型;
- 模型类型可选:
- Unsupervised Learning 模型(如PatchCore)
- YOLOv8 Object Detection 模型
- 卷积网络图像质量评估模型(如Pyiqa、HyperIQA)
- 使用 TorchScript 或 ONNX-RT 实现模型部署;
- 可采用 ONNX + TensorRT 部署在车载嵌入式系统中,提升推理效率;
🧱 四、系统开发流程详解
1. 图像采集流程
bash
# 执行 scrcpy,并保存图像
./scrcpy -d -m 480 --record-to=./screen_recording.mp4
⚙️ Python封装代码(图像提取):
python
import subprocess
def capture_screen():
cmd = "scrcpy --record-to=screen_video.mp4"
subprocess.run(cmd, shell=True)
⚠️ 注意:
scrcpy会将视频录制为 MP4格式,建议需提取其中的帧作为检测输入。
2. 图像预处理与统一格式
- 将每帧图像统一为 1280x720;
- 使用 OpenCV 进行预处理(如灰度化、降噪、缩放等);
python
import cv2
def preprocess_image(image_path):
image = cv2.imread(image_path)
image = cv2.resize(image, (1280, 720))
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return image
🧠 五、基于PyTorch的AI检测模型实现(示例:YOLOv8 + PatchCore)
1. YOLOv8 用于多屏异常检测
YOLOv8 是一种非常实用的目标检测模型 ,可以用于检测黑屏、花屏、UI错误等屏幕异常类型。
bash
# 安装 YOLOv8
pip install ultralytics
python
from ultralytics import YOLO
# 加载训练好的YOLOv8模型
model = YOLO("yolov8s.pt") # 假设已有训练好的模型
# 逐帧图像检测
for frame_file in os.listdir("frames"):
result = model.predict("frames/" + frame_file)
if result[0].boxes is not None:
print("🚨 检测到异常画面!")
📌 检测标签说明(示例):
0:正常屏幕;1:花屏;2:黑屏;3:UI动画错误;
2. PatchCore 用于无监督图像异常检测
PatchCore 在无监督场景下表现优异,适合作为多屏画质自学习识别模型。
bash
# 模型训练
# 需要预先准备正常图像数据集
python
from anomalib import TaskType, Model
# 加载与训练模型
normal_dataset = ImageDataset.from_preprocessed_path("normal_data")
model = Model.load("patchcore", pretrained=True)
model.train(normal_dataset)
# 推理检测
for frame_file in os.listdir("test_frames"):
frame = cv2.imread("test_frames/" + frame_file)
anomaly_mask = model.predict(frame)
if anomaly_mask.sum() / anomaly_mask.size > 0.2: # 概率阈值
print("⚠️ AutoQA 系统检测到多屏花屏问题!")
📌 六、多屏检测的集成与联动分析策略
1. 多屏图像同步采集
- 利用
scrcpy实现多屏画面采集; - 针对不同屏幕,可设置 不同的采集 ID 来识别不同来源图像;
- 推荐在 car screen rotation 方法 或 transparent view 下采集多屏显示;
2. 异常联动判断逻辑
- 若某屏幕检测出异常,立刻判断是否影响用户体验;
- 若多屏异常同步发生(如所有屏幕都花屏),应统一报警;
- 推荐 将VSync时序与图像检测结合判断,避免误报与漏报;
📈 七、性能对比与优化建议
| 模型 | 采集方式 | 检测时间(帧) | 内存占用 | 部署难度 | 适用场景 |
|---|---|---|---|---|---|
scrcpy |
安装 + ADB + 插件 | 1-3 秒/帧 | 低(300MB) | 高(需依赖系统级调试) | 车载多屏测试 |
| YOLOv8 | 单帧检测 | 0.2-0.5 秒/帧 | 中(1-3GB) | 中 | 帧级检测 |
| PatchCore | 无监督检测 | 0.5-1 秒/帧 | 高 | 高 | 多屏画质自适应检测 |
📌 优化建议:
- 对于车载嵌入式设备,建议使用ONNX + TensorRT模型优化;
- 使用 image batch + multithreading处理,提高整体性能;
- 引入 VSync + 刷新率分析模块,增强多屏异常识别能力;
📌 八、应用场景与使用示例
1. 场景一:多屏画面同步检测
- 在播放统一内容时,分析各屏是否保持画面一致性;
- 使用 Pyiqa + YOLOv8 联动检测,提升检测准确率;
2. 场景二:黑屏与UI故障检测
- 在系统启动或UI切换过程中,检测是否存在黑屏 或UI卡顿;
- 使用 帧差法 + VSync 信号 判断画面是否缺失;
3. 场景三:系统健康度与画质评估
- 使用 HyperIQA 评估画质指标,判断画面清晰度与对比度;
- 利用 Pyiqa 数据分析模块,生成整体系统画质健康趋势;
📌 九、工具开发与部署建议
1. 开发建议
- 使用 **
scrcpy+adb+cv2构建图像采集模块; - 使用 **
Anomalib+PyTorch+YOLOv8构建多屏检测模块; - 使用 TensorRT 或 ONNXRT 对模型进行优化;
2. 部署方案推荐
- 车载测试平台 :基于 NVIDIA Jetson Nano / Xavier 部署;
- 集成方式 :
- 使用 shell脚本+Python 脚本 联合执行;
- 支持 远程报警系统 ,如 Alert API + 消息推送;
📌 十、系统集成示例(Linux 环境下)
bash
# 系统启动脚本
#!/bin/bash
# 启动 scrcpy 视频录制(多屏采集)
./scrcpy --record-to=screen_video.mp4
# 分帧提取图像
ffmpeg -i screen_video.mp4 -vf fps=1 ./frames/frame_%04d.jpg
# 启动AI检测流程
python auto_qa_system.py
📌 十一、适合读者群体
- 车载系统测试工程师;
- 车机视觉质量评估人员;
- 想要进行多屏视觉检测的开发人员;
- AutoQA 工具开发爱好者;
✅ 十二、下一步开发建议与方向
- 开发基于
scrcpy的图像采集可视化界面,用于快速调试; - 实现对车机广告图、导航图、仪表盘图等模块的独立检测;
- 部署AI检测流程到车载Linux系统(如Jetson);
- 添加更多质量评估指标(如画质损毁),形成系统性评估体系;
- 引入 PyTorch Lightning 构建可扩展的测试框架,支持后续模型迭代;
📝 署名说明
🚗 Cho1yon | 智能座舱测试
📊 本文为《AI + 传统视觉检测:从屏幕异常到画质健康 》系列博客之一
📌 文章发布平台:CSDN / 技术博客 / 技术社区