# 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; } ```