Предисловие
«Позвольте мне показать вам фотографии, которые я сделал перед тем, как отправиться в живописное место, пейзаж очень хороший»
"Да, я тоже собираюсь поиграть, скоро поделись"
……
"А что насчет фотографии, ты ее не нашел?"
«Подождите, в телефоне слишком много фотографий, дайте мне время, чтобы их найти»
Для многих это норма?
Глядя на сотни или даже тысячи фотографий на телефоне, пытаться найти конкретное фото - все равно, что искать иголку в стоге сена, что требует времени и усилий. Можно ли просматривать альбом только от начала до конца и не выполнять поиск по категории элементов на фотографии?
Конечно, функция распознавания сцен службы машинного обучения Huawei может точно классифицировать фотографии, идентифицируя и маркируя элементы на изображениях, чтобы создать умный альбом. С помощью этой функции мы можем быстро найти нужную фотографию.
Характеристики
Служба распознавания сцен Huawei поддерживает классификацию содержимого сцены изображений и добавление аннотационной информации, такой как еда, цветы, зеленые растения, кошки, собаки, кухни, горы, стиральные машины и другие 102 сцены, и на основе идентифицированной информации создание более интеллектуальных Опыт применения фотоальбома.
Распознавание сцены имеет следующие особенности:
-
Распознавание сцен с несколькими типами
поддерживает 102 вида распознавания сцен и продолжает расти. -
Высокая точность распознавания
позволяет распознавать различные объекты и сцены, а точность распознавания высока. -
Признайте высокую скорость отклика в
миллисекундах и постоянно оптимизируйте производительность. - Простая и эффективная интеграция
предоставляет интерфейс API и пакет SDK, чтобы облегчить интеграцию с клиентами, упростить работу и снизить затраты на разработку.
Сценарий применения
В дополнение к применению распознавания сцен для создания интеллектуальных альбомов, поиска и классификации фотографий, он также может автоматически выбирать соответствующие фильтры сцены и параметры камеры для определения сцены съемки, помогая пользователям делать более красивые фотографии.
Код разработки
1 Подготовка к разработке
1.1 Настройте AppGallery Connect.
Перед разработкой приложения вам необходимо настроить соответствующую информацию в AppGallery Connect.
Чтобы узнать о конкретных шагах, перейдите по ссылке ниже:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/config-agc-0000001050990353-V5
1.2 Настройте адрес хранилища Maven для HMS Core SDK и завершите интеграцию SDK этой службы.
(1) Откройте файл build.gradle уровня проекта Android Studio.
(2) Добавьте плагин HUAWEI agcp и базу кода Maven.
- Настройте адрес репозитория Maven для HMS Core SDK в «allprojects> repositories».
- Настройте адрес хранилища Maven для HMS Core SDK в «buildscript> репозитории».
- Если файл «agconnect-services.json» добавлен в приложение, вам необходимо добавить конфигурацию agcp в «buildscript> dependencies».
buildscript {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
}
allprojects {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}
2 Код разработки
Обнаружение неподвижного изображения
2.1 Создайте экземпляр детектора распознавания сцены.
// 方式1:使用默认的参数配置。
MLSceneDetectionAnalyzer analyzer = MLSceneDetectionAnalyzerFactory.getInstance().getSceneDetectionAnalyzer();
// 方式2:按自定义配置创建场景识别分析器实例。
MLSceneDetectionAnalyzerSetting setting = new MLSceneDetectionAnalyzerSetting.Factory()
// 设置场景识别可信度阈值。
.setConfidence(confidence)
.create();
MLSceneDetectionAnalyzer analyzer = MLSceneDetectionAnalyzerFactory.getInstance().getSceneDetectionAnalyzer(setting);
2.2 Создайте MLFrame с помощью android.graphics.Bitmap, поддерживаемые форматы изображений: jpg / jpeg / png / bmp.
MLFrame frame = new MLFrame.Creator().setBitmap(bitmap).create();
2.3 Выполните распознавание сцены.
// 方式1:同步识别。
SparseArray<MLSceneDetection> results = analyzer.analyseFrame(frame);
// 方式2:异步识别。
Task<List<MLSceneDetection>> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<List<MLSceneDetection>>() {
public void onSuccess(List<MLSceneDetection> result) {
// 场景识别成功的处理逻辑。
}})
.addOnFailureListener(new OnFailureListener() {
public void onFailure(Exception e) {
// 场景识别识别失败的处理逻辑。
// failure.
if (e instanceof MLException) {
MLException mlException = (MLException)e;
// 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
int errorCode = mlException.getErrCode();
// 获取报错信息,开发者可以结合错误码,快速定位问题。
String errorMessage = mlException.getMessage();
} else {
// 其他异常。
}
}
});
2.4 После завершения обнаружения остановите анализатор и освободите ресурсы обнаружения.
if (analyzer != null) {
analyzer.stop();
}
Обнаружение видеопотока
Разработчики могут самостоятельно обработать видеопоток, преобразовать видеопоток в объект MLFrame, а затем выполнить распознавание сцены в соответствии с методом обнаружения статического изображения.
Если разработчик вызывает интерфейс обнаружения синхронизации, он также может использовать встроенный класс SDK LensEngine для реализации распознавания сцены видеопотока. Пример кода выглядит следующим образом:
3.1 Создание анализатора распознавания сцены Поддерживается только анализатор распознавания конечной сцены.
MLSceneDetectionAnalyzer analyzer = MLSceneDetectionAnalyzerFactory.getInstance().getSceneDetectionAnalyzer();
3.2 Разработчик создает класс обработки результатов распознавания «SceneDetectionAnalyzerTransactor», который реализует интерфейс MLAnalyzer.MLTransactor <T>, и использует метод transactResult в интерфейсе для получения результатов обнаружения и реализации определенных сервисов.
public class SceneDetectionAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLSceneDetection> {
@Override
public void transactResult(MLAnalyzer.Result<MLSceneDetection> results) {
SparseArray<MLSceneDetection> items = results.getAnalyseList();
// 开发者根据需要处理识别结果,需要注意,这里只对检测结果进行处理。
// 不可调用ML Kit提供的其他检测相关接口。
}
@Override
public void destroy() {
// 检测结束回调方法,用于释放资源等。
}
}
3.3 Настройте процессор результатов распознавания для реализации привязки анализатора и процессора результатов.
analyzer.setTransactor(new SceneDetectionAnalyzerTransactor());
// 创建LensEngine,该类由ML Kit SDK提供,用于捕捉相机动态视频流并传入分析器。
Context context = this.getApplicationContext();
LensEngine lensEngine = new LensEngine.Creator(context, this.analyzer)
.setLensType(LensEngine.BACK_LENS)
.applyDisplayDimension(1440, 1080)
.applyFps(30.0f)
.enableAutomaticFocus(true)
.create();
3.4 Вызвать метод запуска, запустить камеру, прочитать видеопоток и идентифицировать.
// 请自行实现SurfaceView控件的其他逻辑。
SurfaceView mSurfaceView = findViewById(R.id.surface_view);
try {
lensEngine.run(mSurfaceView.getHolder());
} catch (IOException e) {
// 异常处理逻辑。
}
3.5 После завершения обнаружения остановите анализатор и освободите ресурсы обнаружения.
if (analyzer != null) {
analyzer.stop();
}
if (lensEngine != null) {
lensEngine.release();
}
ДЕМО выставка
Исходная ссылка:https://developer.huawei.com/consumer/cn/forum/topic/0201404868263200225?fid=18
Автор: передай привет