# 自动拍照与图像分析应用 一个使用 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. 克隆项目 ```bash git clone cd view-app ``` ### 2. 安装依赖 ```bash flutter pub get ``` ### 3. 运行应用 #### 在 Android 设备上运行(推荐) 1. 启用设备的 USB 调试 2. 连接设备到电脑 3. 运行: ```bash flutter run ``` 或者指定设备: ```bash flutter devices # 查看可用设备 flutter run -d "设备名称" ``` #### 在 Android 模拟器上运行 1. 启动 Android 模拟器 2. 运行: ```bash flutter run ``` #### 在 Web 浏览器中运行 ```bash 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 # 项目说明 ``` ## 使用流程 1. **启动应用**:打开应用,进入欢迎界面 2. **开始拍照**:点击"开始拍照"按钮 3. **授予权限**:首次使用会请求相机和存储权限,请允许 4. **打开相机**:相机预览界面打开 5. **开始拍摄**:点击"开始拍照"按钮,应用会每2秒自动拍摄一张照片 6. **查看进度**:顶部显示已拍摄的照片数量 7. **停止拍摄**:点击"停止拍照"按钮 8. **图像分析**:应用自动对拍摄的照片进行 YOLO 分析(显示分析中对话框) 9. **查看结果**:在结果页面查看所有照片和对应的分析结果 10. **完成**:点击"完成"按钮返回欢迎界面 ## 功能说明 ### 持续拍照 - 点击"开始拍照"后,应用会立即拍摄第一张照片 - 然后每2秒自动拍摄一张,直到点击"停止拍照"按钮 - 所有照片自动保存到设备相册(移动平台)或下载目录(Web/桌面平台) ### YOLO 图像分析 应用会对本次拍摄的所有照片进行 YOLO 目标检测分析: 1. **API 配置**:在 `lib/services/yolo_service.dart` 中配置 YOLO API 端点 ```dart static const String yoloApiUrl = 'http://your-yolo-api-url/api/detect'; ``` 2. **API 格式**: - 请求:POST multipart/form-data,字段名为 `image` - 响应:JSON 格式,包含检测到的物体列表 3. **模拟数据**:如果 YOLO API 不可用,应用会使用模拟数据进行测试 ### 结果展示 - 显示所有拍摄的照片 - 每张照片下方显示对应的分析结果 - 包括检测到的物体名称和置信度 - 支持滚动查看所有结果 ## 权限说明 应用需要以下权限: - **相机权限** (`CAMERA`) - 用于拍摄照片 - **存储权限** - 用于保存照片到相册 - Android 12 及以下:`READ_EXTERNAL_STORAGE`, `WRITE_EXTERNAL_STORAGE` (maxSdkVersion: 32) - Android 13+:`READ_MEDIA_IMAGES` 权限会在首次使用时自动请求。如果拒绝权限,应用可能无法正常工作。 ## 配置说明 ### 修改拍照间隔 在 `lib/screens/camera_screen.dart` 中修改: ```dart _timer = Timer.periodic(const Duration(seconds: 2), (timer) async { // 修改 Duration(seconds: 2) 中的数字 }); ``` ### 修改相机分辨率 在 `lib/screens/camera_screen.dart` 中修改: ```dart _controller = CameraController( _cameras![0], ResolutionPreset.high, // 可选: low, medium, high, veryHigh, ultraHigh, max enableAudio: false, ); ``` ### 配置 YOLO API 在 `lib/services/yolo_service.dart` 中修改: ```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 ```bash flutter build apk --release ``` 或者构建 App Bundle(用于 Google Play): ```bash flutter build appbundle --release ``` ### iOS ```bash flutter build ios --release ``` ### Web ```bash 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、桌面平台 - ✅ 完善的权限管理 - ✅ 友好的用户界面