|
|
@@ -1,15 +1,136 @@
|
|
|
-# photo_classifier
|
|
|
+# Photo Classifier
|
|
|
|
|
|
-A new Flutter plugin project.
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
-## Getting Started
|
|
|
+照片分类插件是一个Flutter插件,旨在为移动应用提供智能照片分类功能。该插件能够自动识别和分组照片,提升照片管理体验。
|
|
|
|
|
|
-This project is a starting point for a Flutter
|
|
|
-[plug-in package](https://flutter.dev/to/develop-plugins),
|
|
|
-a specialized package that includes platform-specific implementation code for
|
|
|
-Android and/or iOS.
|
|
|
+## 功能特点
|
|
|
|
|
|
-For help getting started with Flutter development, view the
|
|
|
-[online documentation](https://docs.flutter.dev), which offers tutorials,
|
|
|
-samples, guidance on mobile development, and a full API reference.
|
|
|
+- **相似照片分组**: 自动检测并分组相似的照片,帮助用户快速找到并整理重复照片
|
|
|
+- **人物照片识别**: 智能识别包含人物的照片
|
|
|
+- **屏幕截图识别**: 自动归类所有屏幕截图
|
|
|
+- **模糊照片检测**: 识别质量不佳的模糊照片
|
|
|
+- **实时处理进度**: 通过流(Stream)提供实时的分类进度和结果更新
|
|
|
+
|
|
|
+## 安装
|
|
|
+
|
|
|
+将以下内容添加到您项目的 `pubspec.yaml` 文件中:
|
|
|
+
|
|
|
+```yaml
|
|
|
+dependencies:
|
|
|
+ photo_classifier:
|
|
|
+ git:
|
|
|
+ url: http://git.atmob.com/Groot/clean_pro_photo_classifier_plugin
|
|
|
+ ref: master
|
|
|
+```
|
|
|
+
|
|
|
+然后运行:
|
|
|
+
|
|
|
+```
|
|
|
+flutter pub get
|
|
|
+```
|
|
|
+
|
|
|
+## 权限配置
|
|
|
+
|
|
|
+### iOS
|
|
|
+
|
|
|
+在 `ios/Runner/Info.plist` 文件中添加以下权限描述:
|
|
|
+调用分类器方法前请确保获取了相应的相册权限
|
|
|
+
|
|
|
+```xml
|
|
|
+<key>NSPhotoLibraryUsageDescription</key>
|
|
|
+<string>需要访问照片库以进行照片分类</string>
|
|
|
+```
|
|
|
+
|
|
|
+## 使用方法
|
|
|
+
|
|
|
+### 基本用法
|
|
|
+
|
|
|
+```dart
|
|
|
+import 'package:photo_classifier/photo_classifier.dart';
|
|
|
+import 'package:photo_classifier/models.dart';
|
|
|
+
|
|
|
+// 创建分类器实例
|
|
|
+final classifier = PhotoClassifier();
|
|
|
+
|
|
|
+// 配置分类器
|
|
|
+await classifier.configureClassifier(
|
|
|
+ batchSize: 200,
|
|
|
+ maxConcurrentProcessing: 4,
|
|
|
+ similarityThreshold: 0.75,
|
|
|
+);
|
|
|
+
|
|
|
+// 开始分类并监听结果
|
|
|
+final subscription = classifier
|
|
|
+ .startClassificationStream()
|
|
|
+ .listen((event) {
|
|
|
+ if (event == null) return;
|
|
|
+
|
|
|
+ // 获取进度信息
|
|
|
+ final progress = event.progress;
|
|
|
+ print('进度: ${(progress?.rate ?? 0) * 100}%');
|
|
|
+
|
|
|
+ // 获取分类结果
|
|
|
+ final result = event.result;
|
|
|
+ if (result != null) {
|
|
|
+ // 处理相似图片组
|
|
|
+ final similarGroups = result.similarGroups ?? [];
|
|
|
+
|
|
|
+ // 处理人物照片
|
|
|
+ final peopleImages = result.peopleImages ?? [];
|
|
|
+
|
|
|
+ // 处理截图
|
|
|
+ final screenshotImages = result.screenshotImages ?? [];
|
|
|
+
|
|
|
+ // 处理模糊照片
|
|
|
+ final blurryImages = result.blurryImages ?? [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查是否完成
|
|
|
+ if (progress?.isCompleted == true) {
|
|
|
+ subscription.cancel();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onError: (error) {
|
|
|
+ print('分类错误: $error');
|
|
|
+ });
|
|
|
+
|
|
|
+// 取消分类过程
|
|
|
+subscription.cancel();
|
|
|
+classifier.resetClassifier();
|
|
|
+```
|
|
|
+
|
|
|
+### 配置选项
|
|
|
+
|
|
|
+分类器提供以下配置选项:
|
|
|
+
|
|
|
+- `batchSize`: 每批处理的图片数量,默认为200
|
|
|
+- `maxConcurrentProcessing`: 并发处理的最大数量,默认为4
|
|
|
+- `similarityThreshold`: 相似度判定阈值(0.0-1.0),值越大表示要求越相似,默认为0.75
|
|
|
+
|
|
|
+```dart
|
|
|
+await classifier.configureClassifier(
|
|
|
+ batchSize: 100,
|
|
|
+ maxConcurrentProcessing: 2,
|
|
|
+ similarityThreshold: 0.8,
|
|
|
+);
|
|
|
+```
|
|
|
+
|
|
|
+## 完整示例
|
|
|
+
|
|
|
+查看 [example](http://git.atmob.com/Groot/clean_pro_photo_classifier_plugin/src/master/example) 目录获取完整的示例应用。
|
|
|
+
|
|
|
+## 实现原理
|
|
|
+
|
|
|
+该插件使用视觉处理算法对照片进行分析,通过比较图像特征向量实现相似照片的分组,使用机器学习模型识别人物照片、屏幕截图和模糊图像。
|
|
|
+
|
|
|
+## 贡献
|
|
|
+
|
|
|
+欢迎提交问题和功能请求!要贡献代码,请先创建一个issue讨论您想要更改的内容。
|
|
|
+
|
|
|
+## 许可
|
|
|
+
|
|
|
+该项目采用MIT许可证 - 详情请参阅 [LICENSE](LICENSE) 文件
|
|
|
|