5d95cf264dc79a4be18f09a1f4009cdfa6be0ac5
自动拍照与图像分析应用
一个使用 Flutter 开发的跨平台应用,实现持续拍照和 YOLO 图像分析功能。
功能特点
- 📸 持续拍照 - 点击开始后每2秒自动拍摄一张照片,直到点击停止按钮
- 🖼️ 保存到相册 - 自动将拍摄的照片保存到设备相册
- 🤖 YOLO 图像分析 - 对拍摄的照片进行 YOLO 目标检测分析
- 📊 结果展示 - 在结果页面查看所有照片和分析结果
- 🎨 简洁界面 - 美观的欢迎界面、相机界面和结果展示界面
- 📱 跨平台支持 - 支持 Android、iOS、Web 和桌面平台
技术栈
- Flutter - 跨平台UI框架
- camera ^0.11.3 - 相机功能
- image_picker ^1.0.7 - 图片选择(Web/桌面平台)
- gal ^2.0.1 - 保存图片到相册
- permission_handler ^12.0.1 - 权限管理
- http ^1.1.0 - HTTP 请求(YOLO API 调用)
- path_provider ^2.1.1 - 路径管理
安装步骤
前置要求
- Flutter SDK (>=3.0.0)
- Dart SDK (>=3.0.0)
- Android Studio 或 VS Code(推荐安装 Flutter 和 Dart 插件)
- Android SDK(API Level 21+)
- 一台 Android 设备或模拟器(推荐在真实设备上测试)
1. 克隆项目
git clone <repository-url>
cd view-app
2. 安装依赖
flutter pub get
3. 运行应用
在 Android 设备上运行(推荐)
- 启用设备的 USB 调试
- 连接设备到电脑
- 运行:
flutter run
或者指定设备:
flutter devices # 查看可用设备
flutter run -d "设备名称"
在 Android 模拟器上运行
- 启动 Android 模拟器
- 运行:
flutter run
在 Web 浏览器中运行
flutter run -d chrome
注意:Web 平台不支持自动连续拍照功能,需要使用 Android 或 iOS 设备。
项目结构
view-app/
├── lib/
│ ├── main.dart # 应用入口
│ ├── screens/
│ │ ├── welcome_screen.dart # 欢迎界面
│ │ ├── camera_screen.dart # 相机界面(持续拍照)
│ │ └── result_screen.dart # 结果展示页面
│ └── services/
│ └── yolo_service.dart # YOLO 图像分析服务
├── android/ # Android 平台代码
├── ios/ # iOS 平台代码
├── web/ # Web 平台代码
├── windows/ # Windows 平台代码
├── linux/ # Linux 平台代码
├── macos/ # macOS 平台代码
├── pubspec.yaml # 依赖配置
└── README.md # 项目说明
使用流程
- 启动应用:打开应用,进入欢迎界面
- 开始拍照:点击"开始拍照"按钮
- 授予权限:首次使用会请求相机和存储权限,请允许
- 打开相机:相机预览界面打开
- 开始拍摄:点击"开始拍照"按钮,应用会每2秒自动拍摄一张照片
- 查看进度:顶部显示已拍摄的照片数量
- 停止拍摄:点击"停止拍照"按钮
- 图像分析:应用自动对拍摄的照片进行 YOLO 分析(显示分析中对话框)
- 查看结果:在结果页面查看所有照片和对应的分析结果
- 完成:点击"完成"按钮返回欢迎界面
功能说明
持续拍照
- 点击"开始拍照"后,应用会立即拍摄第一张照片
- 然后每2秒自动拍摄一张,直到点击"停止拍照"按钮
- 所有照片自动保存到设备相册(移动平台)或下载目录(Web/桌面平台)
YOLO 图像分析
应用会对本次拍摄的所有照片进行 YOLO 目标检测分析:
-
API 配置:在
lib/services/yolo_service.dart中配置 YOLO API 端点static const String yoloApiUrl = 'http://your-yolo-api-url/api/detect'; -
API 格式:
- 请求:POST multipart/form-data,字段名为
image - 响应:JSON 格式,包含检测到的物体列表
- 请求:POST multipart/form-data,字段名为
-
模拟数据:如果 YOLO API 不可用,应用会使用模拟数据进行测试
结果展示
- 显示所有拍摄的照片
- 每张照片下方显示对应的分析结果
- 包括检测到的物体名称和置信度
- 支持滚动查看所有结果
权限说明
应用需要以下权限:
- 相机权限 (
CAMERA) - 用于拍摄照片 - 存储权限 - 用于保存照片到相册
- Android 12 及以下:
READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE(maxSdkVersion: 32) - Android 13+:
READ_MEDIA_IMAGES
- Android 12 及以下:
权限会在首次使用时自动请求。如果拒绝权限,应用可能无法正常工作。
配置说明
修改拍照间隔
在 lib/screens/camera_screen.dart 中修改:
_timer = Timer.periodic(const Duration(seconds: 2), (timer) async {
// 修改 Duration(seconds: 2) 中的数字
});
修改相机分辨率
在 lib/screens/camera_screen.dart 中修改:
_controller = CameraController(
_cameras![0],
ResolutionPreset.high, // 可选: low, medium, high, veryHigh, ultraHigh, max
enableAudio: false,
);
配置 YOLO API
在 lib/services/yolo_service.dart 中修改:
static const String yoloApiUrl = 'http://your-api-url/api/detect';
开发说明
主要功能实现
- 持续拍照逻辑:使用
Timer.periodic实现定时拍照,通过状态控制启停 - 照片保存:使用
gal包(移动平台)或path_provider(Web/桌面平台)保存照片 - 权限管理:使用
permission_handler请求和检查权限 - 状态管理:使用
StatefulWidget管理拍照状态和照片列表 - YOLO 分析:使用
http包调用 YOLO API,支持批量分析
平台差异
- 移动平台(Android/iOS):使用
camera包实现相机预览和自动拍照 - Web/桌面平台:使用
image_picker包,但只能手动拍照(不支持自动连续拍照)
常见问题
Q: 拍照后照片没有保存到相册?
A: 检查是否授予了存储/照片权限。可以在设备设置中手动授予权限。
Q: 相机无法打开?
A: 确保已授予相机权限,并检查设备是否有可用的相机。
Q: YOLO 分析失败?
A: 检查 YOLO API 配置是否正确,以及网络连接是否正常。如果 API 不可用,应用会使用模拟数据。
Q: Web 平台无法使用自动拍照功能?
A: Web 平台不支持 camera 包的自动连续拍照功能,这是浏览器安全限制。请在 Android 或 iOS 设备上使用。
Q: 应用崩溃?
A: 检查 Flutter 和依赖包的版本是否兼容,运行 flutter doctor 检查环境。
构建发布版本
Android
flutter build apk --release
或者构建 App Bundle(用于 Google Play):
flutter build appbundle --release
iOS
flutter build ios --release
Web
flutter build web --release
版本信息
- Flutter SDK: >=3.0.0
- Dart SDK: >=3.0.0
- Android Gradle Plugin: 8.9.1
- Gradle: 8.11.1
- Kotlin: 2.1.0
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
更新日志
v1.0.0 (当前版本)
- ✅ 实现持续拍照功能(每2秒拍摄,直到点击停止)
- ✅ 照片自动保存到相册
- ✅ 集成 YOLO 图像分析功能
- ✅ 结果展示页面
- ✅ 支持 Android、iOS、Web、桌面平台
- ✅ 完善的权限管理
- ✅ 友好的用户界面
Description
Languages
Dart
39.4%
C++
30.1%
CMake
23.3%
Swift
2.5%
C
1.8%
Other
2.9%