# meicet_pro_sdk
**Repository Path**: background_management/meicetprosdk
## Basic Information
- **Project Name**: meicet_pro_sdk
- **Description**: No description available
- **Primary Language**: Dart
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-08-27
- **Last Updated**: 2025-10-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# meicet_pro_sdk
#### 介绍
美测公司对外SDK
#### 软件使用说明
flutter引用和升级方法
第一步 android中增加USB支持 和 相机权限 如下
参考 example/android/app/src/main/AndroidManifest.xml文件
```
```
第二步 在主工程的android/app/build.gradle里面增加so压缩配置
参考 example/android/app/build.gradle文件
```groovy
//在主app 增加so压缩 等同于增加android:extractNativeLibs="true"
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
```
第三步 复制并引用arr文件
参考 example/android/pro目录里面直接复制pro文件夹全部内容到自已工程的android目录
1. 复制pro文件到自已的android目录
2. 复制android目录中settings.gradle里最后一行引用arr文件
```
include(":pro")
```
第四步 增加 jitpack 仓库
参考example/android/build.gradle文件
```
maven { url = uri("https://jitpack.io") }
```
第五步 添加sdk的git引用
```yaml
#美测pro Sdk引用方法
meicet_pro_sdk:
git:
url: https://gitee.com/background_management/meicetprosdk.git
ref: 4ccd58c35cb4b3e1bc9f47f1f995412c68cb7b81
```
##### 使用方法 参考example/lib/ui/camera_ui_once.dart
```dart
buildUI(){
///相机UI界面
return MeicetProUI();
}
void testCamera(){
final meicetSdk = MeicetProSdk();
/// 预览开关
meicetSdk.onPreview(true);
///拍照功能
meicetSdk.onTakePhoto();
}
```
#### 分析功能
```dart
// 初始化算法SDK
Future initAlgSdk(String appId)
// 开始分析
Future startAnalyze(String request)
// 停止分析
Future stopAnalyze()
// 停止指定ID的分析
Future stopAnalyzeById(String jobId)
```
### 算法调用详细说明
#### 1. 算法配置初始化
```dart
// 初始化算法SDK
await meicetSdk.initAlgSdk(appId);
```
#### 2. 构建分析请求
```dart
// 创建OSS信息
final ossInfo = OssInfo(
'path/to/images/', // 图片存储路径
'your_access_key', // OSS访问密钥
'your_secret_key', // OSS秘密密钥
'your_security_token', // OSS安全令牌
'your_bucket_name', // OSS存储桶名称
'your_endpoint' // OSS端点
);
// 创建算法请求
final algRequest = AlgRequest(
25, // 客户年龄
0, // 客户性别 (0:女 1:男)
2, // 肤色类型 (1:白 2:黄 3:棕 4:黑)
'010', // 拍摄方向 ("100":左脸, "010":正脸, "001":右脸)
ossInfo // OSS信息
);
// 开始分析
await meicetSdk.startAnalyze(algRequest.toJsonString());
```
#### 3. 完整算法调用流程
```dart
class SkinAnalysisService {
late final meicetSdk = MeicetProSdk();
// 1. 初始化算法
Future initAlgorithm() async {
await meicetSdk.initAlgSdk(your_app_id);
}
// 2. 上传图片并开始分析
Future startAnalysis(List imagePaths, DirectionType direction) async {
// 上传图片到OSS
final uploadResult = await uploadImagesToOSS(imagePaths);
if (uploadResult.isAllSuccess) {
// 构建算法请求
final request = _buildAnalysisRequest(uploadResult.ossPath, direction);
// 开始分析
await meicetSdk.startAnalyze(request.toJsonString());
}
}
// 3. 构建分析请求
AlgRequest _buildAnalysisRequest(String ossPath, DirectionType direction) {
// 根据拍摄方向确定算法代码
final algorithmCode = direction.isCenter() ? "010" :
direction.isL() ? "100" : "001";
final ossInfo = OssInfo(
ossPath,
'your_access_key',
'your_secret_key',
'your_security_token',
'your_bucket_name',
'your_endpoint'
);
return AlgRequest(
25, // 客户年龄
0, // 客户性别
2, // 肤色类型
algorithmCode, // 拍摄方向代码
ossInfo
);
}
}
```
#### 4. 算法回调处理
```dart
class AnalysisHandler with OnMeicetAction {
@override
void onNotifyAnalysisStarted(String result) {
print('分析开始: $result');
// 更新UI状态为分析中
}
@override
void onNotifyProgressUpdate(String result) {
print('分析进度: $result');
// 更新进度条
}
@override
void onNotifyAnalysisSuccess(String result) {
print('分析成功: $result');
// 处理分析结果
_handleAnalysisResult(result);
}
@override
void onNotifyAnalysisError(String result) {
print('分析失败: $result');
// 显示错误信息
}
@override
void onNotifyAnalysisCancelled(String result) {
print('分析取消: $result');
// 处理取消状态
}
void _handleAnalysisResult(String result) {
// 解析JSON结果
final Map data = jsonDecode(result);
// 提取分析数据
final analysisData = data['analysisData'];
final skinScore = data['skinScore'];
final recommendations = data['recommendations'];
// 更新UI显示结果
}
}
```
#### 5. 数据结构说明
**AlgRequest (算法请求)**
```dart
class AlgRequest {
final int customerAge; // 客户年龄
final int customerGender; // 客户性别 (0:女 1:男)
final int skinType; // 肤色类型 (1:白 2:黄 3:棕 4:黑)
final String directions; // 拍摄方向代码
final OssInfo ossInfo; // OSS信息
}
```
**OssInfo (OSS信息)**
```dart
class OssInfo {
final String imgPath; // 图片存储路径
final String key; // OSS访问密钥
final String secret; // OSS秘密密钥
final String securityToken; // OSS安全令牌
final String bucketName; // OSS存储桶名称
final String endPoint; // OSS端点
}
```
#### 6. 拍摄方向代码说明
| 代码 | 含义 | 说明 |
|------|------|----|
| "100" | 仅左脸 | 左脸 |
| "010" | 仅正脸 | 正脸 |
| "001" | 仅右脸 | 右脸 |
#### 7. 肤色类型说明
| 代码 | 类型 | 说明 |
|------|------|------|
| 1 | 白色 | 欧洲白人 |
| 2 | 黄色 | 亚洲黄人 |
| 3 | 棕色 | 印度棕灰 |
| 4 | 黑色 | 非洲黑人 |
### 回调接口 (OnMeicetAction)
```dart
mixin OnMeicetAction {
// 设备连接状态
void onNotifyAttachDevice(bool attach) {}
// 灯光状态变化
void onNotifyLightState(LightState state) {}
// 相机状态变化
void onNotifyCameraState(CameraState state) {}
// 相机状态消息
void onNotifyCameraStateMessage(String tip) {}
// 设备序列号
void onNotifyDeviceSN(bool success, String deviceSN, LightState state) {}
// 拍摄完成
void onNotifyTakePhoto(String path, LightType lightType) {}
// 分析成功
void onNotifyAnalysisSuccess(String result) {}
// 分析进度更新
void onNotifyProgressUpdate(String result) {}
// 分析错误
void onNotifyAnalysisError(String result) {}
// 分析开始
void onNotifyAnalysisStarted(String result) {}
// 分析取消
void onNotifyAnalysisCancelled(String result) {}
}
```
## 算法调用示例
### 基础算法调用
```dart
import 'dart:convert';
import 'package:meicet_pro_sdk/meicet_pro_sdk.dart';
class AlgorithmExample {
late final meicetSdk = MeicetProSdk();
// 1. 初始化算法
Future initializeAlgorithm() async {
await meicetSdk.initAlgSdk(appId);
print('算法初始化完成');
}
// 2. 单方向分析
Future analyzeSingleDirection(List imagePaths, DirectionType direction) async {
// 构建OSS信息
final ossInfo = OssInfo(
'analysis/2024/01/15/', // 图片存储路径
'your_access_key', // OSS访问密钥
'your_secret_key', // OSS秘密密钥
'your_security_token', // OSS安全令牌
'meicet-bucket', // OSS存储桶名称
'oss-cn-shanghai.aliyuncs.com' // OSS端点
);
// 根据方向确定算法代码
String algorithmCode;
if (direction.isCenter()) {
algorithmCode = "010"; // 仅正脸
} else if (direction.isL()) {
algorithmCode = "100"; // 仅左脸
} else {
algorithmCode = "001"; // 仅右脸
}
// 创建分析请求
final request = AlgRequest(
28, // 客户年龄
1, // 客户性别 (1:男)
2, // 肤色类型 (2:黄种人)
algorithmCode, // 拍摄方向代码
ossInfo // OSS信息
);
// 开始分析
await meicetSdk.startAnalyze(request.toJsonString());
print('开始分析: ${direction.tip}');
}
// 3. 多方向分析
Future analyzeAllDirections(List imagePaths) async {
final ossInfo = OssInfo(
'analysis/2024/01/15/',
'your_access_key',
'your_secret_key',
'your_security_token',
'meicet-bucket',
'oss-cn-shanghai.aliyuncs.com'
);
// 左中右三个方向
final request = AlgRequest(
28, // 客户年龄
1, // 客户性别
2, // 肤色类型
'111', // 拍摄方向代码 (左中右)
ossInfo
);
await meicetSdk.startAnalyze(request.toJsonString());
print('开始多方向分析');
}
// 4. 停止分析
Future stopAnalysis() async {
await meicetSdk.stopAnalyze();
print('分析已停止');
}
// 5. 停止指定ID的分析
Future stopAnalysisById(String jobId) async {
await meicetSdk.stopAnalyzeById(jobId);
print('分析任务 $jobId 已停止');
}
}
```
### 算法回调处理示例
```dart
class AlgorithmCallbackHandler with OnMeicetAction {
String analysisResult = '';
String analysisProgress = '';
bool isAnalyzing = false;
@override
void onNotifyAnalysisStarted(String result) {
print('分析开始: $result');
isAnalyzing = true;
// 更新UI状态
}
@override
void onNotifyProgressUpdate(String result) {
print('分析进度: $result');
analysisProgress = result;
// 更新进度条
}
@override
void onNotifyAnalysisSuccess(String result) {
print('分析成功: $result');
analysisResult = result;
isAnalyzing = false;
}
@override
void onNotifyAnalysisError(String result) {
print('分析失败: $result');
isAnalyzing = false;
}
@override
void onNotifyAnalysisCancelled(String result) {
print('分析取消: $result');
isAnalyzing = false;
}
```