ML Kit 介紹
官網地址:https://developers.google.cn/ml-kit/
給移動開發者的機器學習
ML Kit是一個強大易用的工具包,它將谷歌在機器學習方面的專業知識帶給了普通的移動應用開發者。
針對移動設備進行 了優化
機器學習可以讓你的應用更有吸引力,更加的個性化,並且提供了已經在移動設備優化過的解決方案。
由Google專業知識構建
ML Kit提供的技術已經在Google內部長期使用。
全面而且易於使用
你可以使用現有的解決方案(基於API),也可以使用自己的算法模型。你可以根據需要選擇是離線還是在線使用。
基於API,無縫的將機器學習嵌入到你的APP中
-
圖像打標,可以識別圖像中的物體,位置,活動形式,動物種類,商品等等。
-
文本識別,從圖像中識別並提取文字。
-
人臉檢測,檢測人臉和人臉的關鍵點。
-
條碼掃描,掃描和處理條碼。
-
地標識別,在圖像中識別比較知名的地標。
-
智能回覆,提供符合上下文語境的文字回答。
基於ML Kit 人臉識別
google官方給出了一個例子,上手很容易
地址爲:https://github.com/firebase/quickstart-android/tree/master/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();
}
最終的效果如圖: