MLキットサービスとは何ですか?開発中にどのような問題を解決できますか?
今日は、MLキットの最も重要な機能の1つである顔認識について説明します。
顔認識の概要

この機能は、顔の向き、顔の表情(喜び、嫌悪感、驚き、悲しみ、怒り)、兆候(性別、年齢、衣類、付属品)、目を開いているか閉じているかを認識できます。また、鼻、目、唇、眉の座標を決定し、同時に顔のグループを識別することもできます。
そして最も重要なのは、顔認識機能が完全に無料で、どのAndroidフォンでも機能することです。
人々のグループのための自動笑顔撮影機能の開発
上記の機能を使用して、自動スマイルキャプチャ機能のデモを作成する方法について説明します。デモのソースコードは、github.com / HMS-Core / hms-ml- demoからダウンロードできます。
1.準備
HMSコア開発ツールを統合する場合、準備プロセスはほとんど同じです。Mavenリポジトリを追加してSDKをインポートするだけです。
1.1Huaweiが提供するMavenリポジトリをプロジェクトレベルのbuild.gradleファイルに追加します
Mavenリポジトリアドレスを追加します。
buildscript {
repositories {
maven {url 'http://developer.huawei.com/repo/'}
} }allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}}
1.2アプリケーションレベルでbuild.gradleファイルにSDKの依存関係を追加する
顔認識SDKとコアSDKをインポートします。
dependencies{
// import the basic SDK
implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300'
// Import the face detection SDK
implementation 'com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.2.300'
}
1.3AndroidManifest.xmlファイルに自動モデル読み込み機能を追加する
この関数は、主にモデルを更新するために使用されます。モデルは自動的にダウンロードされ、最適化されたアルゴリズムに基づいてモバイルで更新されます。
<manifest
<application
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "face"/>
</application></manifest>
1.4AndroidManifest.xmlファイルでカメラとメモリへのアクセス要求を送信します
<!--Camera permission--><uses-permission android:name="android.permission.CAMERA" /><!--Storage permission--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.コード開発
2.1笑顔が検出されたときに写真を撮るためのフェイスアナライザーを作成する
まず、笑顔検出写真のキャプチャを構成するには、次の手順に従います。
(1)アナライザーの設定を構成します。
(2)パラメータをアナライザに転送します。
(3)analyzer.setTransactoのtransactResultをオーバーライドして、顔認識によって返されるコンテンツを処理します。具体的には、信頼値(顔に笑顔がある)が返されます。信頼レベルが設定されたしきい値に達すると、カメラは自動的に写真を撮ります。
private MLFaceAnalyzer analyzer;private void createFaceAnalyzer() {
MLFaceAnalyzerSetting setting =
new MLFaceAnalyzerSetting.Factory()
.setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES)
.setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS)
.setMinFaceProportion(0.1f)
.setTracingAllowed(true)
.create();
this.analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer(setting);
this.analyzer.setTransactor(new MLAnalyzer.MLTransactor<MLFace>() {
@Override public void destroy() {
}
@Override public void transactResult(MLAnalyzer.Result<MLFace> result) {
SparseArray<MLFace> faceSparseArray = result.getAnalyseList();
int flag = 0;
for (int i = 0; i < faceSparseArray.size(); i++) {
MLFaceEmotion emotion = faceSparseArray.valueAt(i).getEmotions();
if (emotion.getSmilingProbability() > smilingPossibility) {
flag++;
}
}
if (flag > faceSparseArray.size() * smilingRate && safeToTakePicture) {
safeToTakePicture = false;
mHandler.sendEmptyMessage(TAKE_PHOTO);
}
}
});}
次に、この写真を保存します。
private void takePhoto() {
this.mLensEngine.photograph(null,
new LensEngine.PhotographListener() {
@Override public void takenPhotograph(byte[] bytes) {
mHandler.sendEmptyMessage(STOP_PREVIEW);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
saveBitmapToDisk(bitmap);
}
});}
2.2 LensEngineインスタンスを作成して、動的なカメラストリームをキャプチャし、ストリームをアナライザに渡します
private void createLensEngine() {
Context context = this.getApplicationContext();
// Create LensEngine
this.mLensEngine = new LensEngine.Creator(context, this.analyzer).setLensType(this.lensType)
.applyDisplayDimension(640, 480)
.applyFps(25.0f)
.enableAutomaticFocus(true)
.create();}
2.3動的ストリームにアクセスする権利の請求を提出し、アナライザーとLensEngineを作成するためのコードを添付します
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_live_face_analyse);
if (savedInstanceState != null) {
this.lensType = savedInstanceState.getInt("lensType");
}
this.mPreview = this.findViewById(R.id.preview);
this.createFaceAnalyzer();
this.findViewById(R.id.facingSwitch).setOnClickListener(this);
// Checking Camera Permissions
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
this.createLensEngine();
} else {
this.requestCameraPermission();
}}
private void requestCameraPermission() {
final String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(this, permissions, LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE);
return;
}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode != LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
return;
}
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
this.createLensEngine();
return;
}}
さらなる行動
とても簡単ですね。開発プロセスに慣れていない場合でも、わずか30分で便利な新機能を作成できます。それでは、この関数で何ができるか見てみましょう。
笑顔で一人の写真を撮る:

笑顔で数人の写真を撮ります。

他にどのように顔認識を使用できますか?いくつかのオプションがあります:
1。顔の特徴を美化します。
2.顔の輪郭や特徴を誇張または変更して、興味深い効果を作成します。
3.子供が不適切なコンテンツにアクセスするのを防ぐ年齢決定機能を作成します。
4.ユーザーが画面を見る時間を決定することにより、目の保護機能を設計します。
5.ランダムなコマンド(たとえば、頭を振る、点滅する、口を開く)を使用して、カメラの前で人が生きているかどうかを確認します。
6.年齢や性別に応じてユーザーに商品をすすめます。
詳細については、当社のWebサイトをご覧ください。developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4
我々はHUAWEI MLキットを使用する他の方法を共有することになります。乞うご期待!