QPython 中文文档 下载 App

QSL4A 摄像头调用——Python 一行代码拍照

基本拍照

QSL4A 调用摄像头的最基本方式:

from androidhelper import Android
droid = Android()

# 调用系统相机 App 拍照
result = droid.takePicture("photo.jpg").result
print(result)

takePicture 会拉起 Android 系统自带的相机 App,用户手动按快门拍照后,照片会保存到指定路径(相对于 QPython 的工作目录,或绝对路径)。拍照完成后脚本才继续执行(阻塞等待)。

拍照方式的区别

调用系统相机(takePicture)

全自动拍照(部分版本支持)

部分 QSL4A 版本提供自动拍照 API,不需要用户按快门:

droid.cameraCapturePicture("auto_photo.jpg")

照片保存路径

takePicture 的参数是照片文件名或路径:

# 简单文件名:保存到 QPython 默认工作目录
droid.takePicture("test.jpg")

# 完整路径
droid.takePicture("/storage/emulated/0/Download/my_photo.jpg")

保存到公共目录(如 Download)需要存储权限,确认 QPython 已授予「管理所有文件」。

闪光灯控制

QSL4A 提供闪光灯独立控制 API:

# 开闪光灯
droid.toggleTorch(True)

# 拍照后关闪光灯
droid.takePicture("with_flash.jpg")
droid.toggleTorch(False)

或者直接在拍照时指定闪光灯模式(部分版本支持)。

录像(部分版本)

某些 QSL4A 版本提供录像 API:

droid.startRecordingVideo("video.mp4")
# 几秒后
droid.stopRecordingVideo()

录像功能不如拍照稳定,具体支持情况需要实际测试。

拍完后处理

照片保存后,可以直接用 Pillow 等库处理:

from PIL import Image

img = Image.open("photo.jpg")
# 压缩保存
img.thumbnail((800, 600))
img.save("photo_small.jpg")

或者用 QNotebook 展示:

from IPython.display import Image
Image(filename="photo.jpg")

权限需求

API需要的权限
takePicture相机权限 + 存储写入权限
toggleTorch相机权限
自动拍照相机权限 + 悬浮窗权限(部分机型)

注意:Android 13+ 的相机权限是运行时申请的。如果第一次调用 takePicture 时 QPython 弹出权限请求,记得点「允许」。

常见问题

拍照后脚本卡住

某些手机的系统相机 App 和 QPython 之间的返回协议有兼容性问题。如果调用 takePicture 后脚本一直卡住不继续执行,尝试:

拍出来的照片是倒的

部分机型返回的 EXIF 方向信息和实际不符。用 Pillow 处理时注意读取 EXIF 方向自动旋转。

小结

QSL4A 的摄像头 API 是 QPython 区别于 PC Python 的另一个杀手级功能。droid.takePicture() 一行代码就能调起系统相机并拿到照片,拍完可以直接用 Pillow 处理、用 Matplotlib 分析、用 QNotebook 展示。全自动拍照功能适合无人值守场景,但需要测试机型兼容性。

继续看 蓝牙与 NFC 了解近距离通信能力。