Вступление

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

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

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

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

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

Довольно весело, не правда ли? Теперь я покажу вам, как создать такую ​​игру, как Crazy Rockets, используя функцию распознавания лиц ML Kit.

Практика развития

Препараты

Чтобы найти подробную информацию о необходимых приготовлениях, перейдите в Процесс разработки.

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

1. Распознавание лиц

1.1 Настройка репозитория Maven

Перейдите в все проектырепозитории и настройте адрес репозитория Maven для HMS Core SDK.

allprojects {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}

Перейдите в buildscriptрепозитории и настройте адрес репозитория Maven для HMS Core SDK.

buildscript {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}

Перейдите в скрипт сборкизависимости и добавьте конфигурации подключаемого модуля AppGallery Connect.

dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
}
}

1.2 Интегрируйте SDK

Implementation 'com.huawei.hms:ml-computer-vision-face:2.0.1.300'

1.3 Создание анализатора лиц

MLFaceAnalyzer analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer();

1.4 Создание класса обработки

public class FaceAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLFace> {
@Override
public void transactResult(MLAnalyzer.Result<MLFace> results) {
SparseArray<MLFace> items = results.getAnalyseList();
// Process detection results 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.
}
}

1.5 Создайте LensEngine для захвата динамических потоков с камеры и передайте их анализатору

LensEngine lensEngine = new LensEngine.Creator(getApplicationContext(), analyzer)
.setLensType(LensEngine.BACK_LENS)
.applyDisplayDimension(1440, 1080)
.applyFps(30.0f)
.enableAutomaticFocus(true)
.create();

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

// 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.
}

1.7 Ресурсы для обнаружения релизов

if (analyzer != null) {
try {
analyzer.stop();
} catch (IOException e) {
// Exception handling.
}
}
if (lensEngine != null) {
lensEngine.release();
}

2. Обнаружение ключевых точек руки

2.1 Настройка репозитория Maven

Перейдите в все проектырепозитории и настройте адрес репозитория Maven для HMS Core SDK.

allprojects {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}

Перейдите в buildscriptрепозитории и настройте адрес репозитория Maven для HMS Core SDK.

buildscript {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}

Перейдите в скрипт сборкизависимости и добавьте конфигурации подключаемого модуля AppGallery Connect.

dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
}
}

2.2 Интегрируйте SDK

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

2.3 Создание анализатора ключевых точек руки по умолчанию

MLHandKeypointAnalyzer analyzer =MLHandKeypointAnalyzerFactory.getInstance().getHandKeypointAnalyzer();

2.4 Создание класса обработки

public class HandKeypointTransactor implements MLAnalyzer.MLTransactor<List<MLHandKeypoints>> {
@Override
public void transactResult(MLAnalyzer.Result<List<MLHandKeypoints>> results) {
SparseArray<List<MLHandKeypoints>> analyseList = results.getAnalyseList();
// Process detection results 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.5 Установите класс обработки

analyzer.setTransactor(new HandKeypointTransactor());

2.6 Создание Lengengine

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

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

// 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.8 Ресурсы для обнаружения релизов

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

Учить больше

Для получения дополнительной информации посетите Разработчики HUAWEI.

Подробные инструкции см. В Руководстве по разработке.

Вы можете присоединиться к дискуссии разработчиков HMS Core на Reddit.

Вы можете скачать демо и образец кода с GitHub.

Для решения проблем интеграции перейдите в Stack Overflow.