Как Настроить Автоматическую Фотосъемку Улыбки За Полчаса С Помощью Huawei Ml Kit

Одним из сервисов, получивших наибольшее внимание на презентации Huawei HMS Core 4.0, стал сервис машинного обучения ML Kit. Зачем вам услуга ML Kit? Какие проблемы он может решить в ходе разработки? Сегодня я представляю вашему вниманию одну из важнейших функций ML Kit — распознавание лиц.



Обзор распознавания лиц



Как настроить автоматическую фотосъемку улыбки за полчаса с помощью HUAWEI ML Kit

Эта функция может распознавать ориентацию лица, выражения лица (радость, отвращение, удивление, грусть и гнев), атрибуты (пол, возраст, одежда и аксессуары), а также то, открыты или закрыты глаза.

Он также может определять координаты носа, глаз, губ и бровей и даже одновременно идентифицировать группы лиц.

А самое главное, функция распознавания лиц абсолютно бесплатна и работает на любом телефоне Android.

Разработка функции автоматической стрельбы при улыбке группы людей

Я расскажу о том, как вы можете использовать описанные выше функции для создания демо-версии функции автоматической улыбки.

Вы можете скачать демо-версию исходного кода по адресу 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) Переопределить результат транзакции В анализатор.

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



Дальнейшие действия

Довольно просто, не так ли? Даже если вы не знакомы с процессом разработки, вы все равно можете создать новую полезную функцию всего за полчаса! Теперь давайте посмотрим, что может делать эта функция.

Как сфотографировать одного человека с улыбкой:

Как настроить автоматическую фотосъемку улыбки за полчаса с помощью HUAWEI ML Kit

Фотосъемка нескольких человек с улыбкой:

Как настроить автоматическую фотосъемку улыбки за полчаса с помощью HUAWEI ML Kit

Как еще можно использовать распознавание лиц? Вот несколько вариантов: 1. Украсьте черты лица.

2. Создавайте интересные эффекты, увеличивая или изменяя контуры и черты лица.

3. Создайте функцию определения возраста, которая предотвратит доступ детей к нежелательному контенту.

4. Разработайте функцию защиты глаз, определяя, сколько времени пользователь смотрит на экран.

5. Определить, жив ли человек перед камерой, можно с помощью случайных команд (например, покачать головой, моргнуть, открыть рот).

6. Рекомендуйте продукты пользователям в соответствии с их возрастом и полом.

Для более подробной информации посетите наш сайт: Developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4 Мы расскажем вам о других способах использования HUAWEI ML Kit. Следите за обновлениями! Теги: #Машинное обучение #разработка для Android #Разработка для Arduino #HMS ML Kit #механическое обучение

Вместе с данным постом часто просматривают: