2026-01-07 16:38:33 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:38:33 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00
2026-01-07 16:14:34 +08:00

自动拍照与图像分析应用

一个使用 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 SDKAPI Level 21+
  • 一台 Android 设备或模拟器(推荐在真实设备上测试)

1. 克隆项目

git clone <repository-url>
cd view-app

2. 安装依赖

flutter pub get

3. 运行应用

在 Android 设备上运行(推荐)

  1. 启用设备的 USB 调试
  2. 连接设备到电脑
  3. 运行:
flutter run

或者指定设备:

flutter devices  # 查看可用设备
flutter run -d "设备名称"

在 Android 模拟器上运行

  1. 启动 Android 模拟器
  2. 运行:
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                        # 项目说明

使用流程

  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 端点

    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 中修改:

_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_providerWeb/桌面平台)保存照片
  • 权限管理:使用 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
No description provided
Readme 334 KiB
Languages
Dart 39.4%
C++ 30.1%
CMake 23.3%
Swift 2.5%
C 1.8%
Other 2.9%