Один из сервисов, к которому было больше всего внимания на презентации Huawei HMS Core 4.0, — это сервис машинного обучения ML Kit.
Для чего нужен сервис ML Kit? Какие проблемы он может решить при разработке?
Сегодня представляю вашему вниманию одну из самых важных функций ML Kit — распознавание лица.
Эта функция может распознавать ориентацию лица, выражение лица (радость, отвращение, удивление, грусть и злость), признаки (пол, возраст, предметы одежды и аксессуары), а также определять, открыты глаза или закрыты. Она также может определять координаты носа, глаз, губ и бровей и даже определять группы лиц одновременно.
А главное — функция распознавания лица абсолютно бесплатна и работает на любом телефоне Android.
Я расскажу о том, как вы можете использовать возможности, описанные выше, для создания демо-версии функции автоматической съемки при улыбке. Вы можете скачать демо-версию исходного кода на github.com/HMS-Core/hms-ml-demo.
При интеграции любых средств разработки HMS Core процесс подготовки практически одинаковый. Нужно просто добавить репозиторий Maven и импортировать SDK.
Добавьте адрес репозитория Maven:
Импортируйте SDK функции распознавания лица и основной SDK:
Эта функция в основном используется для обновления модели. Модели можно загружать автоматически и обновлять на мобильном телефоне на базе оптимизированного алгоритма.
Во-первых, чтобы настроить съемку фото при обнаружении улыбки, выполните следующие действия:
(1) Настройте параметры анализатора.
(2) Передайте параметры анализатору.
(3) Переопределите transactResult в analyzer.setTransacto для обработки контента, возвращенного при распознавании лица. В частности, возвращается значение доверительной вероятности (что на лице есть улыбка). Когда значение доверительной вероятности достигает установленного порогового значения, камера автоматически делает фото.
Во-вторых, мы хотим сохранить это фото:
Довольно просто, не правда ли? Даже если вам незнаком процесс разработки, вы все равно можете создать полезную новую функцию всего за полчаса! Теперь посмотрим, что может делать эта функция.
Делать фото одного человека при улыбке:
Делать фото нескольких человека при улыбке:
Чтобы узнать дополнительные подробности, зайдите на наш сайт: developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4
Мы расскажем о других способах использования HUAWEI 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. Следите за обновлениями!
v1000
Huawei очень хочет быть похожим на Apple, точнее чем-то средним между андроидом и iOS, даже названия технологий иногда созвучны. С другой стороны, хорошо когда есть конкуренция, еще один полноценный производитель одновременно железа и софта под него.