Введение
В предыдущем посте мы рассмотрели, как использовать функцию обнаружения скелета 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 ();
}
Демо-эффект
И это все! Теперь мы можем видеть ключевые точки рук, появляющиеся при выполнении различных жестов. Помните, что при необходимости вы можете расширить эту возможность.
Для получения дополнительной информации посетите:
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