热门搜索:
SDK接入快速开始
SDK接入快速开始
更新时间:2023-07-14 18:02:00
本页目录

快速开始

引擎以C++接口为主,C与Java接口(Android)为辅。MLSDK的引入主要分为四步:

  • 项目中引入SDK
  • 获取引擎核心
  • 初始化对应的算法模块
  • 调用对应的算法接口

Step 1. 引入SDK

iOS

MLSDK.framework以及MLSDK.bundle复制到项目内,添加对资源bundle以及对framework的引用。 注意

  • MLSDK.framework需要选择Embed & Sign

Description

  • bundle需要打包至安装包内

Description

Android

待补充

Linux/Windows

待补充

Step 2. 获取引擎核心

引擎核心负责管理完整的引擎资源调度,包括对应的授权认证、算法资源、中间状态等,引擎核心仅单线程使用,在多个不同的线程中并发使用同一个引擎核心将引发不可预知的错误,如需使用多个线程,需要初始化多个引擎核心。引擎初始化需要填入所获得授权配套的KEY路径以及填入可以唯一区分设备的machineid。唯一的machineid可以避免授权时出现并发限制的错误。

mlsdk::MLSDKEngineBase* engine = mlsdk::GetMLSDKEngineInstance("/path/to/license", ${machineid});
if(engine == nullptr){
	std::cerr << "Failed GetMLSDKEngineInstance" << std::endl;
}

Step 3. 初始化对应的算法模块

引擎核心默认不会初始化所有的可用模块,业务方应根据业务需要、授权范围、以及对应的资源文件,初始化对应的算法模块。当前支持的模块类型如下:

enum MLMODEL {
    MLMODEL_FACE = 2,
    MLMODEL_INPAINTING = 4,
    MLMODEL_STYLETRANSFER = 5,
    MLMODEL_WATERMARK = 6,
    MLMODEL_INDUSTRY_SAFETY = 7,
    MLMODEL_HUMANPOSE = 8,
    MLMODEL_BODYPARSING = 9,
    MLMODEL_ANIMALFACE=10,
    MLMODEL_PORTRAITMATTING =11,
    MLMODEL_COMMONOCR = 12,     // 扫描OCR
    MLMODEL_PDF = 13,   // PDF工具集
    MLMODEL_ANIMALPARSING = 14,
    MLMODEL_PORTRAITPARSING = 15,
    MLMODEL_HAND = 16,
    MLMODEL_FACEID = 17,
};

以人脸分析模块初始化为例[注意替换${RUNTIME_ASSETS_DIR}/model/models_pack/face_info_pack.bin]:

const char *face_model_path = ${RUNTIME_ASSETS_DIR}"/model/models_pack/face_info_pack.bin";
int ret = mlsdk::InitModel(engine, MLMODEL_FACE, face_model_path);
if(ret != 0){
	std::cerr << "Failed InitModel" << std::endl;
}

模块初始化时将验证授权

Step 4. 调用对应的算法接口

调用对应的算法接口,获取结果。不同子算法模块的接口定义以及结果解析方式不一致,请查看对应算法模块的文档。

Step 5. 注销与垃圾清理

mlsdk::DestroyMLSDKEngineInstance(engine);

完整示例

以人脸检测为例,完整的初始化及调用样例如下:

// step 2
const char *face_model_path = "/path/to/resources/model/models_pack/face_info_pack.bin";
std::cout << "Reading FaceModel From " << face_model_path << std::endl;
mlsdk::MLSDKEngineBase* engine = mlsdk::GetMLSDKEngineInstance("/path/to/license", ${machineid});
if(engine == nullptr){
	std::cerr << "Failed GetMLSDKEngineInstance" << std::endl;
}

// step 3
int ret = mlsdk::InitModel(engine, MLMODEL_FACE, mtcnn_model_path);
if(ret != 0){
	std::cerr << "Failed InitModel" << std::endl;
}

// step 4
cv::Mat image = cv::imread("/path/to/image");
cv::cvtColor(image, image, cv::COLOR_BGR2RGB);
std::vector<mlsdk::FaceInfoOutput> faceInfoList;
std::vector<unsigned char> image_data(image.data, image.data + image.total() * image.channels());
TIME_START(face);
mlsdk::HumanFaceDetection(engine, image_data, image.cols, image.rows, mt, LANDMARKTYPE_EXTRA_LANDMARKS_V2, &faceInfoList);
printf("%lu faces detected\n", faceInfoList.size());

// step 5. garbage collection
mlsdk::DestroyMLSDKEngineInstance(engine);