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

281 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 自动拍照与图像分析应用
一个使用 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. 克隆项目
```bash
git clone <repository-url>
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、桌面平台
- ✅ 完善的权限管理
- ✅ 友好的用户界面