基於ML Kit 人臉識別,讓可視化應用更智能

ML Kit 介紹

官網地址:https://developers.google.cn/ml-kit/

給移動開發者的機器學習

ML Kit是一個強大易用的工具包,它將谷歌在機器學習方面的專業知識帶給了普通的移動應用開發者。

針對移動設備進行 了優化

機器學習可以讓你的應用更有吸引力,更加的個性化,並且提供了已經在移動設備優化過的解決方案。

由Google專業知識構建

ML Kit提供的技術已經在Google內部長期使用。

全面而且易於使用

你可以使用現有的解決方案(基於API),也可以使用自己的算法模型。你可以根據需要選擇是離線還是在線使用。

基於API,無縫的將機器學習嵌入到你的APP中

  1. 圖像打標,可以識別圖像中的物體,位置,活動形式,動物種類,商品等等。

  2. 文本識別,從圖像中識別並提取文字。

  3. 人臉檢測,檢測人臉和人臉的關鍵點。

  4. 條碼掃描,掃描和處理條碼。

  5. 地標識別,在圖像中識別比較知名的地標。

  6. 智能回覆,提供符合上下文語境的文字回答。

基於ML Kit 人臉識別

google官方給出了一個例子,上手很容易
地址爲:https://github.com/firebase/quickstart-android/tree/master/mlkit

mlkit
我們可以clone下來並且運行, 但是會提示少了文件google-services.json錯誤

創建google-services.json

打開你的fieabase網址:https://console.firebase.google.com/u/0/
你應該有自己的項目地址。

創建一個新的項目,或者在你已經有的項目中加入新的app都可以。這個gson文件都是根據你的包名去生成的。在一個項目中可以加很多的App生成的json文件是根據項目去生成的,一個項目有多個app,在你生成的json文件中會有不項目中所有app的配置,當一個項目只哦有一個App的時候,在json文件中只有一個app的配置。

添加項目

添加項目
輸入項目名稱

選擇安卓應用

輸入信息

點擊註冊

copy json文件到app目錄

在這裏插入圖片描述

mlkit代碼分析

設置檢測這些點的人臉檢測器只需短短几行代碼。

lazy var vision = Vision.vision()
let options = VisionFaceDetectorOptions()
options.contourMode = .all
let faceDetector = vision.faceDetector(options: options)

輪廓點還可以實時更新。爲達到理想的幀速率,人臉探測器默認配置爲 fast 模式。當您準備好檢測面部的點時,請向 ML Kit 發送一張圖像或一個緩衝區供其處理。

faceDetector.process(visionImage) { faces, error in
 guard error == nil, let faces = faces, !faces.isEmpty else { return }
 for face in faces {
   if let faceContour = face.contour(ofType: .face) {
     for point in faceContour.points {
       print(point.x) // the x coordinate
       print(point.y) // the y coordinate
     }
  }
} 

人臉識別回調

    @Override
    protected void onSuccess(
            @Nullable Bitmap originalCameraImage,
            @NonNull List<FirebaseVisionFace> faces,
            @NonNull FrameMetadata frameMetadata,
            @NonNull GraphicOverlay graphicOverlay) {
        graphicOverlay.clear();
        if (originalCameraImage != null) {
            CameraImageGraphic imageGraphic = new CameraImageGraphic(graphicOverlay, originalCameraImage);
            graphicOverlay.add(imageGraphic);
        }
        for (int i = 0; i < faces.size(); ++i) {
            FirebaseVisionFace face = faces.get(i);

            int cameraFacing =
                    frameMetadata != null ? frameMetadata.getCameraFacing() :
                            Camera.CameraInfo.CAMERA_FACING_BACK;
            FaceGraphic faceGraphic = new FaceGraphic(graphicOverlay, face, cameraFacing);
            graphicOverlay.add(faceGraphic);
        }
        graphicOverlay.postInvalidate();
    }

最終的效果如圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章