Проверить состояние по изображению с помощью TensorFlow очень просто.
Предыстория
Однажды в рабочее время я смотрю местный телеканал, который играет в нашем приложении. Моя работа заключается в разработке OTT-приложения, которое предоставляет много отличного контента и несколько местных телеканалов. Пока я смотрю на приложение, я кое-что увидел. Что-то, что дает мне замечательную идею.
Я увидел возможность добавить рекламу. На местном телеканале при воспроизведении рекламы я могу заменить контент нашей рекламой. Как мы узнаем, когда телеканал показывает рекламу? есть образец
Шаблон
Воспроизводимый контент телеканала:
Телевизионные рекламные ролики канала:
Цель
Моя цель
Замените контент/трансляцию нашей рекламой, когда телеканал воспроизводит рекламу.
Цель этого блога
Наше приложение может автоматически проверять, воспроизводит ли телеканал рекламу или контент.
Исполнение
Обучить модель TFLite
Модель TensorFlow — это структура данных, содержащая логику и знания сети машинного обучения, обученной решать конкретную задачу. Есть много способов получить модель TensorFlow, от использования предварительно обученных моделей до обучения собственных.
Почему модель TFLite? Мобильное приложение поддерживает TF Lite для использования модели для TensorFlow. TFLite — это меньшая модель, и она уже квантизируется. Таким образом, эта модель быстрее модели TensorFlow с небольшим снижением точности.
Машинное обучение Firebase
Самый простой способ обучить модель TFLite — использовать Firebase Machine Learning. Вы можете просто загрузить несколько изображений и маркировки, и тренироваться.. очень просто. Учебник Поезд с Firebase
Чтобы обучить свою модель самостоятельно, перейдите по этой ссылке
Используйте модель
Я использую Firebase MLKit для использования модели в моем проекте приложения для Android.
- Откройте проект Android-приложения.
- Если вы еще этого не сделали, добавьте Firebase в свой Android-проект.
- подготовьте файлы модели TFLite. Или загрузите мою модель TFLite, файл манифеста и файл dict, если вы хотите использовать мой.
- Поместите 3 файла в папку с вашими активами
- Добавьте зависимости для библиотек ML Kit Android в файл Gradle вашего модуля (на уровне приложения) (обычно
app/build.gradle
):
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' dependencies { // ... implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.3' }
- Затем добавьте следующее в файл
build.gradle
вашего приложения, чтобы убедиться, что Gradle не сжимает модели при создании приложения:
android {
// ...
aaptOptions { noCompress "tflite" // Your model's file extension: "tflite", "lite", etc. } }
- Загрузите модель
Укажите имя файла вашей модели. Мой “model.tflite”
. И создайте ярлык
val localModel = FirebaseCustomLocalModel.Builder()
.setAssetFilePath("model.tflite")
.build()
val labelerOptions = FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
.setConfidenceThreshold(ICON_CONFIDENCE_THRESHOLD)
.build()
val labeler = FirebaseVision.getInstance().getOnDeviceAutoMLImageLabeler(labelerOptions)
Проверка состояния значка телеканала
Наконец .. я могу проверить состояние значка телеканала, используя поток Tensor.
Последний шаг: используйте следующий код для проверки изображения. Просто дайте объект bitmap
из изображения, которое вы хотите протестировать.
Для тестирования изображений, которые необходимо преобразовать в растровые изображения, вы можете скачать их по этой ссылке.
val image = FirebaseVisionImage.fromBitmap(bitmap) try { labeler.processImage(image) .addOnSuccessListener { labels -> for (label in labels) { Log.d(TAG, "label : ${label.text}, confidence : ${label.confidence}") } } } catch (e: FirebaseMLException) { e.printStackTrace() }
label.text -> представляет имя результата метки.
label.confidence -> представляет значение результата метки. чем большее значение вы получили, тем более достоверный результат вы получили.
Если вам нужны другие изображения для тестирования, вы можете получить их по этой ссылке. Посмотрите и сделайте снимок логотипа.