Одним из сервисов, получивших наибольшее внимание на презентации Huawei HMS Core 4.0, стал сервис машинного обучения ML Kit. Зачем вам услуга ML Kit? Какие проблемы он может решить в ходе разработки? Сегодня я представляю вашему вниманию одну из важнейших функций 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;
}}
Дальнейшие действия
Довольно просто, не так ли? Даже если вы не знакомы с процессом разработки, вы все равно можете создать новую полезную функцию всего за полчаса! Теперь давайте посмотрим, что может делать эта функция.
Как сфотографировать одного человека с улыбкой:
Фотосъемка нескольких человек с улыбкой:
Как еще можно использовать распознавание лиц? Вот несколько вариантов:
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 #механическое обучение
-
Получите Удобство С Картой Gemalto Card
19 Oct, 24 -
Кавитация
19 Oct, 24 -
Будущее Цифровых Книг. Версия Из Ideo
19 Oct, 24 -
Обзор 5 Популярных Онлайн-Чатов
19 Oct, 24