Files
sight-identification/README.md
2026-01-07 16:42:22 +08:00

6.0 KiB
Raw Blame History

自动拍照与情绪分析应用Flutter

这是一个使用 Flutter 开发的跨平台应用,主要面向 Android,同时兼容 Web / Windows / macOS / Linux
核心功能是:自动拍照、保存到相册,并使用 YOLO 模型对照片进行物体/情绪分析,最终在结果页展示分析信息。


功能概览

  • 欢迎页

    • 显示应用简介
    • 「开始拍摄」按钮,进入相机/图片选择流程
  • 自动拍照移动端Android / iOS

    • 使用 camera 插件打开系统摄像头
    • 点击「开始拍摄」后,每 2 秒 自动拍一张照片
    • 点击「停止」后结束连续拍摄
    • 每张照片都会:
      • 保存到本地相册(使用 gal
      • 调用 YOLO 分析服务进行识别
  • 图片选择Web / 桌面端)

    • 由于 camera 插件在 Web/桌面支持有限,这些平台使用 image_picker
    • 用户通过弹出的系统对话框选择/拍摄图片
    • 选中的图片同样会走保存与 YOLO 分析流程
  • 结果页

    • 按列表展示每张照片及其对应的 YOLO 分析结果
    • 显示检测到的对象标签及置信度
    • 有「完成」按钮,一键返回欢迎页

技术栈与主要依赖

  • 框架

    • Flutter推荐 Flutter 3.x 及以上)
  • 核心插件

    • camera:移动端相机预览与拍照
    • image_pickerWeb / 桌面端选择或拍摄图片
    • gal:将图片保存到系统相册(移动端)
    • permission_handler:相机 / 媒体库权限管理
    • path_provider / path:文件系统与路径处理
    • http:向 YOLO 推理服务发起 HTTP 请求

目录结构(简化)

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/ / macos/ / linux/    # 各桌面平台工程
├── pubspec.yaml                  # Flutter 依赖配置
└── README.md

开发环境要求

  • Flutter SDK建议3.x 或更高)
  • JDK 17已针对 Gradle / AGP 配置为 Java 17
  • Android SDKAPI 35 及以上,编译使用 compileSdk 36
  • 一台 Android 真机或模拟器(用于运行移动端)

可通过以下命令检查环境:

flutter doctor

安装依赖

在项目根目录执行:

flutter pub get

如果你需要使用 lib/backend_model 目录中的 Node 后端(例如承载真实 YOLO 服务或中转服务),需要单独安装该子项目的依赖:

cd lib/backend_model
npm install

backend_modelNode 后端)环境与启动

lib/backend_model 是一个简单的 Node.js 后端示例,基于 Express,入口文件为 index.js,在 package.json 中定义了标准的 start 脚本。

环境要求

  • Node.js建议 18.x 或 20.x
  • npm随 Node 一起安装)

安装依赖

cd lib/backend_model
npm install

启动后端服务

cd lib/backend_model
npm start

默认会以 node index.js 的方式启动服务(具体端口和路由逻辑请查看 lib/backend_model/index.js)。
如果你打算让 Flutter 端的 YoloService 调用这个后端,请将 lib/services/yolo_service.dart 中的 yoloApiUrl 修改为该服务实际监听的地址,例如:

static const String yoloApiUrl = 'http://192.168.0.100:3000/api/detect';

运行项目

Android / iOS

  1. 连接真机或启动模拟器
  2. 在项目根目录执行:
flutter run

如有多设备,可以指定设备 ID例如

flutter run -d "ALA AN70"

Web

flutter run -d chrome

Windows / macOS / Linux

flutter run -d windows   # 或 macos / linux

权限说明(移动端)

应用在 Android 上会请求以下权限:

  • 相机权限:CAMERA
  • 读取存储/媒体:
    • Android 12 及以下:READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
    • Android 13+READ_MEDIA_IMAGES

这些权限会在第一次使用相关功能时弹出请求。


YOLO 服务配置

YOLO 调用逻辑封装在 lib/services/yolo_service.dart 中:

  • 默认使用 模拟数据:如果 YoloService.yoloApiUrl 保持为占位地址(如 http://your-yolo-api-url/api/detect),则不会真实发起网络请求,而是返回随机模拟结果,方便本地开发和调试。
  • 如需接入真实 YOLO 推理服务:
    1. yolo_service.dart 中将 yoloApiUrl 修改为你的服务地址;
    2. 确认服务支持 multipart/form-data POST字段名为 image
    3. 根据你的返回 JSON 结构,必要时调整 YOLOAnalysisResult.fromJsonDetectedObject.fromJson 的解析逻辑。

常见问题

  • 构建失败Gradle / AGP / Java 版本相关)

    • 本项目已升级至:

      • Gradle Wrapper8.11.1
      • Android Gradle Plugin8.9.1
      • Kotlin2.1.0
      • Java17
    • 若本地 JDK 版本不一致,请确认 JAVA_HOME 指向 JDK 17并重新执行

      cd android
      .\gradlew clean
      
  • 相机不可用 / 权限被拒绝

    • 请在系统设置中检查本应用是否已被授予相机和照片/媒体库权限。
  • Web/桌面端没有自动连续拍照

    • 这是预期行为:当前实现是 移动端自动连续拍照Web/桌面使用 交互式选择图片image_picker),以适配平台限制。

许可证与贡献

  • 许可证MIT License
  • 欢迎提交 Issue / Pull Request 来改进自动拍照、YOLO 识别效果或多平台体验。