AI人脸识别的实现SDK
关于AI SDK
当我们想要实现一个AI功能时,比如人脸识别,人脸比对,物体识别等等,如果从0开始开发AI模型,训练AI模型,直至部署到当前的项目中,势必会花费大量的人力以及时间。得益于近年人工智能领域的告诉发展, 许多成熟的AI模型已经开源,作为一名开发者不要重复造轮子,可以使用现有的成熟的AI模型来实现所需的AI功能。
但对于非AI开发者而言,想要将现有的AI模型中集成到android/iOS app中,并不是一件容易的事情。为了简化AI功能集成到app的步骤, 已经有很多公司提供了AI功能的API, 如Google, Microsoft, Baidu等。 但是这些公司大多数都只提供了API的方式来调用AI功能,没有提供本地SDK的方式调用AI功能。
相对于API方式,SDK方式的调用不需要网络的支持,以人脸识别为例,如果采用SDK方式的话就不需要把人脸的图片传输到API服务器,也不需要等待API服务器将推理结果传输回来,而是直接使用手机的CPU/GPU进行推理操作。所以对于安全性以及实时性,SDK方式都优于API方式。但是,由于SDK方式利用的是手机的CPU/GPU,性能上弱于服务器的GPU,所以SDK方式不适合大的AI模型的推理,比如GPT-2。
快速开始
本AI SDK尽可能的简化了集成步骤,即使是初学APP开发的人也能顺利地将AI功能集成到APP中。目前我们提供了Flutter AI SDK, iOS AI SDK, Android AI SDK, 请开发者根据实际的项目需求选择对应的SDK进行集成。下面将介绍如何在flutter中集成人脸识别功能。
1. 下载Flutter AI SDK
从https://download.csdn.net/download/fyq158797/87707388下载Flutter AI SDK压缩包,将压缩包解压到flutter项目文件夹。
打开flutter项目的pubspec.yaml
文件,在dependencies
下方导出AI SDK, path为SDK压缩包解压的路径。
aisdk:
path: ../aisdk
2. 下载人脸识别功能所需要的AI模型
为了节省app所占的容量,我们没有将所有的AI模型都放到SDK中,而是要求开发者根据需要下载所需的AI模型。这次要集成人脸识别功能,所以只需要下载人脸识别功能所需要的文件。 下载模型文件和label文件,然后将这两个文件放到项目目录的assets
目录下, 如assets/models/
目录下。
打开flutter项目的pubspec.yaml
文件,在assets
下方声明新加入的两个文件。
assets:
- assets/facemask_v1.tflite
- assets/facemask_v1.txt
3. 初始化AI SDK
在调用AI模型前,我们需要初始化AI SDK。比如我们创建了一个名为FaceDetectionPage.dart的文件,这个页面的功能是从照片库中选择一张照片,然后调用AI SDK的人脸识别功能识别出人脸的坐标。 那么首先需要在initState()
方法中,初始化AI SDK的人脸识别功能。
import 'package:aisdk/aisdk.dart';
@override
void initState() {
super.initState();
initAISDK();
}
Future<void> initAISDK() async {
Map resultMap = await Aisdk.init(
modelPath: "assets/models/facemask_v1.tflite", modelCateogry: Aisdk.MODEL_CATEGORY_FACE_DETECTION, labelPath: "assets/models/facemask_v1.txt");
print("initAISDK:$resultMap");
}
注意这里的modelPath以及labelPath参数,modelPath指向了人脸识别模型对应的路径,labelPath指向了人脸识别的label文件路径。同时,modelCateogry需要指定为人脸识别的类别:Aisdk.MODEL_CATEGORY_FACE_DETECTION
。
通过Aisdk.init()
初始化SDK后,会返回{"error":nil, "result":[]}
。如果error的内容是nil,则表示初始化成功。 如果error内容不为空,则表示初始化失败,error的内容会指明初始化失败的原因,比如modelFileLoadFailed
表明AI模型加载失败,原因可能是modelPath
设置的路径错误。
4. 调用AI模型
只需要一行代码即可调用AI功能,返回值同样是{"error":nil, "result":[]}
结构。 如果error的内容是nil,则表示调用成功。否则调用失败,需要根据error的内容来判断调用失败的原因。
调用成功后, result中的内容为AI模型的返回值。本例中,返回了图片中所有的人脸的坐标位置,以及是否佩戴了口罩。
Map resultMap = await Aisdk.inferenceOnImage(path: imageFilePath);
if (resultMap["error"] != null) {
print("失败${resultMap["error"]}");
} else {
List<dynamic> resultList = resultMap["result"];
faceList = [];
for (dynamic faceInfo in resultList) {
Map faceMap = faceInfo;
Face face = Face();
face.x = faceMap["x"];
face.y = faceMap["y"];
face.w = faceMap["w"];
face.h = faceMap["h"];
face.confidence = faceMap["confidence"];
face.hasMask = faceMap["className"] == "mask";
faceList.add(face);
}
setState(() {});
}
总结
经过以上的4步,就可以将人脸识别功能集成到app中。其它的AI功能也是同样的步骤,
- 下载Flutter AI SDK
- 下载AI功能所需要的模型文件
- 初始化AI SDK
- 调用AI模型
本SDK目前提供了人脸识别(是否佩戴口罩),人脸比对,物体识别,图像分割,超分辨率功能。并且以后会随时增加新的AI功能以及改进现有的AI功能。如果您在使用本SDK中有任何的意见或者建议,请随时联系我们。
更多推荐
所有评论(0)