Проверить состояние по изображению с помощью TensorFlow очень просто.

Предыстория

Однажды в рабочее время я смотрю местный телеканал, который играет в нашем приложении. Моя работа заключается в разработке OTT-приложения, которое предоставляет много отличного контента и несколько местных телеканалов. Пока я смотрю на приложение, я кое-что увидел. Что-то, что дает мне замечательную идею.

Я увидел возможность добавить рекламу. На местном телеканале при воспроизведении рекламы я могу заменить контент нашей рекламой. Как мы узнаем, когда телеканал показывает рекламу? есть образец

Шаблон

Воспроизводимый контент телеканала:

Телевизионные рекламные ролики канала:

Цель

Моя цель

Замените контент/трансляцию нашей рекламой, когда телеканал воспроизводит рекламу.

Цель этого блога

Наше приложение может автоматически проверять, воспроизводит ли телеканал рекламу или контент.

Исполнение

Обучить модель TFLite

Модель TensorFlow — это структура данных, содержащая логику и знания сети машинного обучения, обученной решать конкретную задачу. Есть много способов получить модель TensorFlow, от использования предварительно обученных моделей до обучения собственных.

Почему модель TFLite? Мобильное приложение поддерживает TF Lite для использования модели для TensorFlow. TFLite — это меньшая модель, и она уже квантизируется. Таким образом, эта модель быстрее модели TensorFlow с небольшим снижением точности.

Машинное обучение Firebase

Самый простой способ обучить модель TFLite — использовать Firebase Machine Learning. Вы можете просто загрузить несколько изображений и маркировки, и тренироваться.. очень просто. Учебник Поезд с Firebase

Чтобы обучить свою модель самостоятельно, перейдите по этой ссылке



Используйте модель

Я использую Firebase MLKit для использования модели в моем проекте приложения для Android.

  • Добавьте зависимости для библиотек 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 -> представляет значение результата метки. чем большее значение вы получили, тем более достоверный результат вы получили.

Если вам нужны другие изображения для тестирования, вы можете получить их по этой ссылке. Посмотрите и сделайте снимок логотипа.