- 使用 Kotlin 原始字符串语法替代错误的拼接格式 - 修复 stopCamera() 中 UI 更新不在主线程的问题 - 添加 cameraHelper 重复启动检查 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
USB 摄像头连接方案
概述
通过 USB 数据线将 Android 手机作为摄像头连接到电脑,无需 WiFi/网络。
架构
┌─────────────────┐ USB ┌─────────────────┐
│ Android APP │ ◄─────────────► │ 电脑 ADB │
│ (MJPEG服务) │ adb forward │ desktop.py │
│ 端口 8080 │ │ localhost:8080 │
└─────────────────┘ └─────────────────┘
使用步骤
1. 准备 Android APP
方式A: 使用 Android Studio 编译(推荐)
- 安装 Android Studio
- 打开
android-app目录 - 连接手机或启动模拟器
- 点击 Run 按钮
方式B: 下载预编译 APK
如需预编译 APK,请联系开发者或自行编译。
2. 手机端操作
- 安装并启动「USB摄像头」APP
- 开启 USB 调试:
- 设置 → 关于手机 → 连续点击"版本号" 7次
- 设置 → 开发者选项 → USB调试(开启)
- 点击 APP 中的「启动」按钮
- 屏幕显示:"服务运行中 端口: 8080"
3. 电脑端操作
安装 ADB
# Windows: 下载 platform-tools
# https://developer.android.com/tools/releases/platform-tools
# 或使用 winget
winget install Google.PlatformTools
# 验证安装
adb version
连接手机
# 1. USB 连接手机,手机上弹出"允许USB调试"时点击"允许"
# 2. 验证连接
adb devices
# 应显示类似:
# List of devices attached
# XXXXXXXX device
运行桌面程序
cd d:\code\post-ocr
py -3.12 src\desktop.py
连接摄像头
- 在程序中点击 "🔌 USB连接" 按钮
- 程序会自动执行
adb forward tcp:8080 tcp:8080 - 连接成功后显示实时画面
工作原理
- 手机 APP 启动 MJPEG 流服务器(监听 8080 端口)
- ADB 将手机端口转发到电脑:
adb forward tcp:8080 tcp:8080 - 电脑 OpenCV 读取:
cv2.VideoCapture("http://localhost:8080") - 画面实时显示,支持拍照识别
故障排查
问题:ADB 找不到设备
- 检查 USB 线是否支持数据传输(非仅充电线)
- 手机上是否允许 USB 调试
- 尝试更换 USB 端口
问题:连接失败
- 确保 APP 已启动并显示"服务运行中"
- 检查端口 8080 是否被占用
- 尝试重启 APP
问题:画面卡顿
- 降低分辨率:在 CameraHelper.kt 中修改预览尺寸
- 检查 USB 线质量
技术栈
- Android: Kotlin + Camera2 API
- 网络: MJPEG over HTTP
- 电脑端: Python + OpenCV + PyQt6
- 通信: ADB 端口转发