笑顔のスナップショットアーティファクトアンドリュースの開発にHuawei社HMS MLKit SDKで30分
プライマー
Huawei社HMS Core4.0、検討会議の情報を紹介する記者会見でリチャードゆう前にいくつかの時間は、突くしてください:
HMSコア4.0のHuawei社のグローバル起動し、それが何を意味するのでしょうか?
どのサービスに焦点を導入しており、機械学習サービス(機械学習キット短いMLKit)。
その機械学習サービスあなたが行うことができますか?開発者はアプリケーション開発プロセスにおける問題を解決する何を助けることができますか?
今日は誰も強力なマシンラーニングサービスは、開発者が提供する経験と利便性の下で提供さそうということ、例えば、あなたの本当の小さなサンプルを与え、顔検出と、についての議論を開始します。
提供機械学習顔検出サービスへの能力
誰もがショーサービス顔検出機能にHuawei社の機械学習を見て与えます。
、このチャートの移動の内側、顔認識、顔の支援の方向を識別することができ、顔の表情(幸せ、うんざりし、驚いて、悲しい、怒り、怒り)を検出するためのサポート、顔検出属性のサポート(性別、年齢から見ることができます顔検出のためのサポートを座標、オープンしたかどうかをサポートするために、検出閉じ摩耗が)、鼻、目、唇、眉毛などと同様備えており、また、複数の顔を同時に検出をサポートし、それは非常に強力ではありません!
コアのヒント:この機能は、モデルアンドリュースフルカバー無料です!
顔カメラを笑顔人々が戦闘を開発しました
今日では、機械学習のサービスを使用して、より認識+表現検出能力は、小さな笑顔のキャプチャデモを書く実用的な運動を行います。
ここでは、デモのソースコードを突くをダウンロードしてください
1開発準備
調製前Huawei社HMSの開発キットには、何よりもSDKを導入したアドオンMavenの依存関係よりも、似ています
1.1のGradleのプロジェクトレベルでHuawei社のMaven倉庫の追加
インクリメンタルには、次のアドレスを追加しますMavenの:
buildscript {
repositories {
maven {url 'http://developer.huawei.com/repo/'}
}
}
allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}
}
SDK 1.2アプリケーションレベル依存build.gradleの内部
顔認識SDKおよびSDK導入の基礎
dependencies{
// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300'
// 引入人脸检测能力包
implementation 'com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.2.300'
}
1.3自動的にモデルを追加すると、増分内のAndroidManifest.xmlというファイルをダウンロードします
これは主に、自動的に更新され、お使いの携帯電話にダウンロードすることができ、最適化アルゴリズムの背後にある、と、更新をモデル化するために使用されます
<manifest
<application
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "face"/>
</application>
</manifest>
1.4カメラアプリケーションとストレージ権内のAndroidManifest.xmlファイル
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--使用存储权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2コードの開発
2.1作成顔アナライザは、写真を撮った後、笑顔を検出します
カメラ検出後:
分析用1)構成パラメータ
2)アナライザに渡された分析パラメータ
コンテンツtransactResult顔認識処理を書き換えることによりanalyzer.setTransacto 3)を、認識が笑顔を返します自信を持っていれば、設定はそれに写真を撮るために、特定の信頼よりも大きくなるように、(単純な笑顔は、確率として理解することができます)。
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は、キャプチャカメラモーションビデオストリーム渡さアナライザを作成します
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多関節許可ダイナミックためのアプリケーション、およびビジュアルエンジンは、コードアナライザを作成します
@Override
public 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;
}
}
@Override
public 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は、ユーザの年齢、性別及びその他の試験結果の統合使用して、与えユーザーは関連製品をお勧めしません。
Huawei社の開発リーグの公式サイトが開発した、より詳細なリファレンスガイド:
Huawei社のDeveloper Connectionに機械学習サービス開発ガイド
次号
ベースのサービスを学習Huawei社のマシンは、ハンズオン共有に経験の一連の後ろになり、私たちは集中し続けることができます -