Cara menyiapkan pengambilan senyum otomatis dalam waktu setengah jam dengan HUAWEI ML Kit

Salah satu layanan yang paling banyak mendapat perhatian pada presentasi Huawei HMS Core 4.0 adalah layanan pembelajaran mesin ML Kit.



Untuk apa layanan ML Kit? Masalah apa yang bisa dipecahkannya selama pengembangan?



Hari ini saya sampaikan kepada Anda salah satu fungsi terpenting ML Kit - pengenalan wajah.



Ikhtisar pengenalan wajah





Fitur ini dapat mengenali orientasi wajah, ekspresi wajah (kegembiraan, jijik, terkejut, sedih, dan marah), tanda (jenis kelamin, usia, pakaian dan aksesori), dan apakah mata terbuka atau tertutup. Itu juga dapat menentukan koordinat hidung, mata, bibir dan alis, dan bahkan mengidentifikasi kelompok wajah pada saat yang bersamaan.



Dan yang terpenting, fitur pengenalan wajah benar-benar gratis dan berfungsi di semua ponsel Android.



Mengembangkan fungsi pemotretan senyum otomatis untuk sekelompok orang



Saya akan memandu Anda tentang cara menggunakan fitur yang dijelaskan di atas untuk membuat demo fitur Pengambilan Senyuman Otomatis. Anda dapat mengunduh kode sumber demo di github.com/HMS-Core/hms-ml-demo .



1. Persiapan



Saat mengintegrasikan alat pengembangan Inti HMS apa pun, proses persiapannya hampir sama. Anda hanya perlu menambahkan repositori Maven dan mengimpor SDK.



1.1 Tambahkan repositori Maven yang disediakan oleh Huawei ke file build.gradle tingkat proyek Anda



Tambahkan alamat repositori Maven:



buildscript {
    repositories {        
        maven {url 'http://developer.huawei.com/repo/'}
    }    }allprojects {
    repositories {       
        maven { url 'http://developer.huawei.com/repo/'}
    }}


1.2 Tambahkan dependensi SDK ke file build.gradle di tingkat aplikasi



Impor SDK pengenalan wajah dan SDK inti:



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 Tambahkan fungsi pemuatan model otomatis ke file AndroidManifest.xml



Fungsi ini terutama digunakan untuk memperbarui model. Model dapat diunduh secara otomatis dan diperbarui di perangkat seluler berdasarkan algoritme yang dioptimalkan.



<manifest    
   <application  
       <meta-data                     
           android:name="com.huawei.hms.ml.DEPENDENCY"          
           android:value= "face"/>                 
   </application></manifest> 


1.4 Kirimkan permintaan untuk akses ke kamera dan memori di file AndroidManifest.xml



<!--Camera permission--><uses-permission android:name="android.permission.CAMERA" /><!--Storage permission--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


2. Pengembangan kode



2.1 Membuat penganalisis wajah untuk mengambil foto saat senyuman terdeteksi



Pertama, untuk mengkonfigurasi pengambilan foto deteksi senyum, ikuti langkah-langkah berikut:



(1) Konfigurasi pengaturan penganalisis.

(2) Mentransfer parameter ke penganalisis.

(3) Ganti transactResult di analyzer.setTransacto untuk menangani konten yang dikembalikan oleh pengenalan wajah. Secara khusus, tingkat kepercayaan (bahwa ada senyuman di wajah) dikembalikan. Saat tingkat kepercayaan mencapai ambang yang ditetapkan, kamera secara otomatis mengambil foto.



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);
            }
        }
    });}


Kedua, kami ingin menyimpan foto ini:



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 Membuat instance LensEngine untuk menangkap aliran kamera dinamis dan meneruskan aliran ke penganalisis



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 Mengirimkan aplikasi untuk hak mengakses aliran dinamis dan melampirkan kode untuk membuat penganalisis dan 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;
    }}


Tindakan selanjutnya



Cukup sederhana, bukan? Meskipun Anda tidak terbiasa dengan proses pengembangan, Anda masih dapat membuat fitur baru yang berguna hanya dalam setengah jam! Sekarang mari kita lihat apa fungsi fungsi ini.



Ambil foto satu orang sambil tersenyum:







Ambil foto beberapa orang sambil tersenyum:







Bagaimana lagi Anda bisa menggunakan pengenalan wajah? Berikut beberapa opsinya:

1. Mempercantik fitur wajah Anda.

2. Buat efek yang menarik dengan melebih-lebihkan atau mengubah kontur dan fitur wajah.

3. Buat fungsi penentuan usia yang akan mencegah anak-anak mengakses konten yang tidak pantas.

4. Rancang fungsi pelindung mata dengan menentukan lamanya waktu pengguna melihat layar.

5. Tentukan apakah seseorang masih hidup di depan kamera menggunakan perintah acak (misalnya menggelengkan kepala, berkedip, buka mulut).

6. Merekomendasikan produk kepada pengguna sesuai dengan usia dan jenis kelamin mereka.



Untuk lebih jelasnya, kunjungi situs web kami:developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4



Kami akan membagikan cara lain untuk menggunakan HUAWEI ML Kit. Tetap disini!



All Articles