Введение

В предыдущем посте мы рассмотрели, как использовать функцию обнаружения скелета HUAWEI ML Kit для обнаружения таких точек, как голова, шея, плечи, колени и лодыжки. Но помимо обнаружения скелета, ML Kit также предоставляет возможность обнаружения ключевых точек руки, которая может обнаруживать 21 ключевую точку руки, такую ​​как кончики пальцев, суставы и запястья.

Сценарии применения

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

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

Разработка обнаружения ключевых точек руки

Теперь посмотрим, как быстро интегрировать функцию обнаружения ключевых точек руки в ML Kit. В качестве примера возьмем обнаружение видеопотока.

1. Подготовка

Вы можете найти подробную информацию о необходимых приготовлениях в разделе Разработчики HUAWEI - Процесс разработки.

Здесь мы просто рассмотрим самые важные процедуры.

1.1 Настройте адрес репозитория Maven в файле build.gradle на уровне проекта

buildscript   {
repositories {
...
maven {url   'https://developer.huawei.com/repo/'}
}
}
dependencies {
...
classpath   'com.huawei.agconnect:agcp:1.3.1.300'
}
allprojects   {
repositories {
...
maven {url   'https://developer.huawei.com/repo/'}
}
}

1.2 Добавление зависимостей SDK в файл build.gradle уровня приложения

dependencies{
//   Import the base SDK.
implementation   'com.huawei.hms:ml-computer-vision-handkeypoint:2.0.2.300'
//   Import the hand keypoint detection model package.
implementation   'com.huawei.hms:ml-computer-vision-handkeypoint-model:2.0.2.300'
}

1.3 Добавление конфигурации в заголовок файла

apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'

1.4. Добавьте эти утверждения в файл AndroidManifest.xml, чтобы модель машинного обучения могла автоматически обновляться.

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

1.5 Подать заявку на разрешение камеры и разрешение на чтение локального файла

<!--Camera permission-->
<uses-permission android:name="android.permission.CAMERA" />
<!--Read permission-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2. Разработка кода

2.1 Создание ручного анализатора ключевых точек

MLHandKeypointAnalyzerSetting setting = new MLHandKeypointAnalyzerSetting.Factory()
// MLHandKeypointAnalyzerSetting.TYPE_ALL   indicates that all results are returned.
// MLHandKeypointAnalyzerSetting.TYPE_KEYPOINT_ONLY   indicates that only hand keypoint information is returned.
// MLHandKeypointAnalyzerSetting.TYPE_RECT_ONLY   indicates that only palm information is returned.
setSceneType(MLHandKeypointAnalyzerSetting.TYPE_ALL)
// Set the maximum number of hand regions   that can be detected within an image. A maximum of 10 hand regions can be   detected by default.
setMaxHandResults(1)
create();
MLHandKeypointAnalyzer analyzer = MLHandKeypointAnalyzerFactory.getInstance().getHandKeypointAnalyzer(setting);

2.2 Создание класса HandKeypointTransactor для обработки результатов обнаружения

Этот класс реализует API MLAnalyzer.MLTransactor ‹T› и использует метод transactResult в этом классе для получения результатов обнаружения и реализации определенных служб. Помимо информации о координатах для каждой ключевой точки руки, результаты обнаружения включают значение достоверности для ладони и каждой ключевой точки. Ключевые точки ладони и руки, которые обнаруживаются неправильно, могут быть отфильтрованы на основе значений достоверности. Вы можете установить порог на основе допуска нераспознавания.

public class HandKeypointTransactor implements MLAnalyzer.MLTransactor<List<MLHandKeypoints>> {
@Override
public void transactResult(MLAnalyzer.Result<List<MLHandKeypoints>> results) {
SparseArray<List<MLHandKeypoints>> analyseList  = result.getAnalyseList();
// Determine detection result processing   as required. Note that only the detection results are processed.
// Other detection-related APIs provided   by ML Kit cannot be called.
}
@Override
public void destroy() {
// Callback method used to release   resources when the detection ends.
}
}

2.3 Настройте процессор результатов обнаружения для привязки анализатора к процессору результатов

analyzer.setTransactor(new HandKeypointTransactor());

2.4 Создание экземпляра класса LensEngine

Класс LensEngine предоставляется HMS Core ML SDK для захвата динамических потоков с камеры и передачи этих потоков в анализатор. Размер дисплея камеры должен быть установлен в диапазоне от 320 x 320 пикселей до 1920 x 1920 пикселей.

LensEngine lensEngine = new LensEngine.Creator(getApplicationContext(), analyzer)
setLensType(LensEngine.BACK_LENS)
applyDisplayDimension(1280, 720)
applyFps(20.0f)
enableAutomaticFocus(true)
create();

2.5 Вызов метода запуска для запуска камеры и чтения потоков с камеры для обнаружения

// Implement other logic of the SurfaceView control by yourself.
SurfaceView mSurfaceView = findViewById(R.id.surface_view);
try {
lensEngine.run(mSurfaceView.getHolder());
} catch (IOException e) {
// Exception handling logic.
}

2.6 Остановите анализатор, чтобы освободить ресурсы обнаружения после завершения обнаружения

if (analyzer! = null) {
analyzer.stop ();
}
if (lensEngine! = null) {
lensEngine.release ();
}

Демо-эффект

И это все! Теперь мы можем видеть ключевые точки рук, появляющиеся при выполнении различных жестов. Помните, что при необходимости вы можете расширить эту возможность.

Исходный код Github

Для получения дополнительной информации посетите:
l официальный сайт: https://developer.huawei.com/consumer/en/hms
l страницу документации: https: //developer.huawei .com / consumer / en / doc / development
l Reddit, чтобы присоединиться к нашему обсуждению разработчиков: https://www.reddit.com/r/HMSCore/
l GitHub : https: / /github.com/HMS-Core
l Переполнение стека : https://stackoverflow.com/questions/tagged/huawei-mobile-services