AI人脸识别的实现SDK

关于AI SDK

  当我们想要实现一个AI功能时,比如人脸识别,人脸比对,物体识别等等,如果从0开始开发AI模型,训练AI模型,直至部署到当前的项目中,势必会花费大量的人力以及时间。得益于近年人工智能领域的告诉发展, 许多成熟的AI模型已经开源,作为一名开发者不要重复造轮子,可以使用现有的成熟的AI模型来实现所需的AI功能。

  但对于非AI开发者而言,想要将现有的AI模型中集成到android/iOS app中,并不是一件容易的事情。为了简化AI功能集成到app的步骤, 已经有很多公司提供了AI功能的API, 如GoogleMicrosoftBaidu等。 但是这些公司大多数都只提供了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功能也是同样的步骤,

  1. 下载Flutter AI SDK
  2. 下载AI功能所需要的模型文件
  3. 初始化AI SDK
  4. 调用AI模型

    本SDK目前提供了人脸识别(是否佩戴口罩),人脸比对,物体识别,图像分割,超分辨率功能。并且以后会随时增加新的AI功能以及改进现有的AI功能。如果您在使用本SDK中有任何的意见或者建议,请随时联系我们。

猜你喜欢

转载自blog.csdn.net/fyq158797/article/details/130260291