[Машинное обучение, Разработка под Arduino] Как настроить автоматическую съемку при улыбке за полчаса с помощью HUAWEI ML Kit
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Один из сервисов, к которому было больше всего внимания на презентации 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) Переопределите transactResult в analyzer.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;
}}
Дальнейшие действия
Довольно просто, не правда ли? Даже если вам незнаком процесс разработки, вы все равно можете создать полезную новую функцию всего за полчаса! Теперь посмотрим, что может делать эта функция.
Делать фото одного человека при улыбке:
Делать фото нескольких человека при улыбке:
Чтобы узнать дополнительные подробности, зайдите на наш сайт: developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4
Мы расскажем о других способах использования HUAWEI ML Kit. Следите за обновлениями!
===========
Источник:
habr.com
===========
Похожие новости:
- [Искусственный интеллект, Машинное обучение] Deep Learning — как это работает? Часть 4
- [Разработка мобильных приложений, Разработка под Android, Администрирование баз данных, Kotlin] Сказ о том, как каскадное удаление в Realm долгий запуск победило
- [Swift, Машинное обучение, Программирование, Разработка под iOS] Реализуем машинное обучение на iOS устройстве с использованием Core ML, Swift и Neural Engine (перевод)
- [DIY или Сделай сам, Разработка под Arduino, Умный дом] Умный дом xiaomi правильнее, чем home assistant, но можно еще правильнее
- [Data Mining, Анализ и проектирование систем, Машинное обучение] О котах и Process Mining
- [Big Data, Машинное обучение] Минимизируем наложение лейблов в интерактивных визуализациях (перевод)
- [Искусственный интеллект, Машинное обучение, Профессиональная литература] Книга «Обработка естественного языка в действии»
- [Разработка под iOS, Разработка мобильных приложений, Swift, Машинное обучение] Новости о машинном обучении Apple в 2020 году (перевод)
- [Будущее здесь, Интервью, Искусственный интеллект, Машинное обучение, Программирование] Необычное собеседование: GPT-3 в роли кандидата (перевод)
- [Разработка под Android, Разработка мобильных приложений, Kotlin] Top 10 Kotlin App Development Companies 2020-21
Теги для поиска: #_mashinnoe_obuchenie (Машинное обучение), #_razrabotka_pod_arduino (Разработка под Arduino), #_hms_ml_kit, #_mechine_learning, #_android_development, #_mashinnoe_obuchenie (
Машинное обучение
), #_razrabotka_pod_arduino (
Разработка под Arduino
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:42
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Один из сервисов, к которому было больше всего внимания на презентации 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) Переопределите transactResult в analyzer.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; }} Дальнейшие действия Довольно просто, не правда ли? Даже если вам незнаком процесс разработки, вы все равно можете создать полезную новую функцию всего за полчаса! Теперь посмотрим, что может делать эта функция. Делать фото одного человека при улыбке: Делать фото нескольких человека при улыбке: Чтобы узнать дополнительные подробности, зайдите на наш сайт: developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4 Мы расскажем о других способах использования HUAWEI ML Kit. Следите за обновлениями! =========== Источник: habr.com =========== Похожие новости:
Машинное обучение ), #_razrabotka_pod_arduino ( Разработка под Arduino ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:42
Часовой пояс: UTC + 5