ما هي خدمة ML Kit؟ ما هي المشاكل التي يمكن حلها أثناء التطوير؟
أقدم انتباهكم اليوم إلى إحدى أهم وظائف ML Kit - التعرف على الوجوه.
نظرة عامة على التعرف على الوجه
يمكن لهذه الوظيفة التعرف على اتجاه الوجه وتعبيرات الوجه (الفرح والاشمئزاز والمفاجأة والحزن والغضب) والعلامات (الجنس والعمر والملابس والإكسسوارات) وتحديد ما إذا كانت العيون مفتوحة أم مغلقة. يمكنه أيضًا تحديد إحداثيات الأنف والعينين والشفتين والحواجب ، وحتى تحديد مجموعات الوجوه في نفس الوقت.
والأهم من ذلك ، أن ميزة التعرف على الوجوه مجانية تمامًا وتعمل على أي هاتف يعمل بنظام Android.
تطوير وظيفة تصوير الابتسامة تلقائيًا لمجموعة من الأشخاص
سوف أطلعك على كيفية استخدام الميزات الموضحة أعلاه لإنشاء عرض توضيحي لميزة Automatic Smile Capture. يمكنك تنزيل الكود المصدري التجريبي على github.com/HMS-Core/hms-ml-demo .
1. التحضير
عند دمج أي أدوات تطوير HMS Core ، تكون عملية التحضير هي نفسها تقريبًا. تحتاج فقط إلى إضافة مستودع Maven واستيراد SDK.
1.1 أضف مستودع Maven المقدم من Huawei إلى ملف build.gradle على مستوى المشروع
أضف عنوان مستودع Maven:
buildscript {
repositories {
maven {url 'http://developer.huawei.com/repo/'}
} }allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}}
1.2 إضافة تبعيات SDK إلى ملف build.gradle على مستوى التطبيق
استيراد 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.3 إضافة وظيفة تحميل النموذج التلقائي إلى ملف AndroidManifest.xml
تستخدم هذه الوظيفة بشكل أساسي لتحديث النموذج. يمكن تنزيل النماذج تلقائيًا وتحديثها على الهاتف المحمول استنادًا إلى خوارزمية محسّنة.
<manifest
<application
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "face"/>
</application></manifest>
1.4 إرسال طلب للوصول إلى الكاميرا والذاكرة في ملف AndroidManifest.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) تجاوز المعاملات في موقع analer.setTransacto لمعالجة المحتوى الذي يتم إرجاعه عن طريق التعرف على الوجوه. على وجه التحديد ، يتم إرجاع قيمة الثقة (أن هناك ابتسامة على الوجه). عندما يصل مستوى الثقة إلى الحد المعين ، تلتقط الكاميرا صورة تلقائيًا.
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;
}}
مزيد من الإجراءات
بسيط جدا ، أليس كذلك؟ حتى إذا لم تكن معتادًا على عملية التطوير ، فلا يزال بإمكانك إنشاء ميزة جديدة مفيدة في نصف ساعة فقط! الآن دعونا نرى ما يمكن أن تفعله هذه الوظيفة.
التقط صورة لشخص واحد وهو يبتسم:
التقط صورة لعدة أشخاص وأنت تبتسم:
وإلا كيف يمكنك استخدام التعرف على الوجه؟ فيما يلي بعض الخيارات:
1. تجميل ملامح الوجه.
2. خلق تأثيرات مثيرة للاهتمام عن طريق المبالغة أو تغيير ملامح وملامح الوجه.
3. إنشاء وظيفة تحديد العمر التي تمنع الأطفال من الوصول إلى محتوى غير لائق.
4. تصميم وظيفة حماية العين من خلال تحديد مقدار الوقت الذي ينظر فيه المستخدم إلى الشاشة.
5. تحديد ما إذا كان شخص ما على قيد الحياة أمام الكاميرا باستخدام أوامر عشوائية (على سبيل المثال ، هز رأسك ، وميض ، وفتح فمك).
6. التوصية بالمنتجات للمستخدمين وفقًا لأعمارهم وجنسهم.
لمزيد من التفاصيل يرجى زيارة موقعنا على الانترنت:developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4
سنشارك طرقًا أخرى لاستخدام HUAWEI ML Kit. ترقب!