Запустите многоядерный процессор изображений, используя FireBase MLKit - PullRequest
2 голосов
/ 01 мая 2020

Я пытаюсь обнаружить объекты и текст, используя firebase MLKit в режиме прямой трансляции с камеры в android. Для обработки изображения существуют определенные c распознаватели ( FirebaseVisionTextRecognizer , FirebaseVisionObjectDetector ). Если я использую эти распознаватели один за другим, все работает нормально, я могу получить ответ на желание.

Однако я хочу обнаруживать как объекты, так и текст одновременно, используя ту же камеру, что и приложение Google Lens. Чтобы добиться этого, во-первых, я попытался запустить оба распознавателя вместе, но есть большая задержка (требуется время для выполнения определенного c кадра), поскольку оба запускаются последовательно, и, следовательно, работало только обнаружение текста, но не обнаружение объекта. Это означает, что нет никакого результата от обнаружения объекта.

Затем я попытался выполнить оба распознавателя параллельно, задержка уменьшилась, но не настолько, чтобы API обнаружения вернул ответ. Когда в ленте камеры нет текста, обнаружение объектов работает хорошо, но когда в ленте камеры есть текст, задержка увеличивается, и поэтому нет объектов отслеживания.

Примечание. Я проверил задержку вызова функции после обнаружения (код, который выполняется после обнаружения объекта), и это не занимает много времени. Распознавателям требуется больше времени для обработки изображения в случае параллельного выполнения. Я тестирую на телефоне Samsung Galaxy S30s и думаю, что у него не так уж и плохой процессор.

Несколько набросков из кода:

  1. Использование FirebaseVisionObjectDetectorOptions.STREAM_MODE , enableMultipleObjects = false и enableClassification = false для обнаружения объекта
  2. Использование формата FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21 при сборке FirebaseVisionImageMetadata
  3. В соответствии с лучшими практиками, определенными Google, удаление последних кадров при обнаружении
  4. Использование OnDeviceObjectDetector для обнаружения объектов
  5. Для обнаружения текста я использую OnDeviceTextRecognizer

Мне нужна помощь, чтобы понять, как приложение Google Lens выполняет несколько распознавателей вместе, но не в моем приложении. Что я могу сделать, чтобы включить несколько распознавателей в одном кадре камеры?

1 Ответ

1 голос
/ 01 мая 2020

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

... поскольку оба запускаются последовательно, и, следовательно, работало только обнаружение текста, но не обнаружение объекта.

Функция ObjectDetection с STREAM_MODE ожидает задержку между двумя рамки изображения малы, скажем, <300 мс. Если вы запустите распознавание текста между ними, задержка может быть слишком большой, чтобы функция ObjectDetection не могла работать должным образом. Вы можете изменить <code>STREAM_MODE на SINGLE_IMAGE_MODE, чтобы получить результат в настройках, но задержка будет выше.

...