Распознавание через камеру Android

Обновлено: 29.01.2023

Оптическое распознавание символов ( Оптическое распознавание символов , сокр. OCR ) позволяет компьютеру читать текст на изображении, позволяя приложениям понимать вывески, статьи, листовки, страницы текста, меню или чего-либо в тексте. Mobile Vision Text API предоставляет разработчикам Android мощную и надежную функцию OCR, которая поддерживает большинство устройств Android и не увеличивает размер вашего приложения.

В этом уроке вы создадите приложение, в котором в процессе видеосъемки будет распознаваться и воспроизводиться весь текст, попадающий в кадр.

Мы также публиковали статьи о других функциях Mobile Vision:

Исходный код можно скачать здесь.

Или клонируйте репозиторий GitHub из командной строки:

Репозиторий visionSamples содержит множество примеров связанных проектов Mobile Vision. В этом уроке используются только два:

Обновление сервисов Google Play

Возможно, вам потребуется обновить установленную версию Google Repository, чтобы использовать Mobile Vision Text API.

Откройте Android Studio и откройте SDK Manager:



< /p>


Убедитесь, что репозиторий Google обновлен. Это должна быть версия не ниже 26.



< /p>

Добавить зависимость от сервисов Google Play и создать приложение для запуска

Теперь вы можете открыть начальный проект:


Выберите каталог запуска из загруженного кода ( Файл > Открыть > ). ocr-reader ocr-codelab/ocr-reader-start

Добавьте в приложение зависимость Службы Google Play. Без этой зависимости Text API будет недоступен.

Проект может указывать на отсутствие файла integer/google_play_services_version и выдавать ошибку. Это нормально, мы исправим это на следующем шаге.

Откройте файл build.gradle в модуле приложения и измените блок зависимостей, включив в него зависимость play-services-vision . Когда все будет готово, файл должен выглядеть так:


Нажмите кнопку синхронизации Gradle .


Нажмите кнопку "Пуск".

Через несколько секунд вы увидите экран «Прочитать текст», но это просто черный экран.



< /p>


Теперь ничего не происходит, потому что CameraSource не настроен. Давайте сделаем это.


Если у вас что-то пойдет не так, вы можете открыть проект и убедиться, что он работает правильно. Этот проект является законченной версией урока, и если эта версия не работает, вам следует проверить, все ли в порядке с вашим устройством и настройками. ocr-reader-complete Android Studio

Настройка TextRecognizer и CameraSource

Для начала мы создадим наш TextRecognizer . Этот объект-детектор обрабатывает изображения и определяет, какой текст появляется внутри них. После инициализации TextRecognizer можно использовать для обнаружения текста во всех типах изображений. Найдите метод createCameraSource и создайте TextRecognizer:

Теперь TextRecognizer готов к работе. Однако это может еще не сработать. Если на устройстве недостаточно памяти или Сервисы Google Play не могут загрузить зависимости OCR, объект TextRecognizer не будет работать. Прежде чем мы начнем использовать его для распознавания текста, нам нужно проверить его готовность. Мы добавим эту проверку в createCameraSource после инициализации TextRecognizer:

Теперь, когда мы убедились, что TextRecognizer готов к работе, мы можем использовать его для распознавания отдельных кадров. Но мы хотим сделать кое-что поинтереснее: прочитать текст в видеорежиме. Для этого мы создадим CameraSource, предварительно настроенный для управления камерой. Нам нужно установить высокое разрешение съемки и включить автофокус, чтобы справиться с задачей распознавания мелкого текста. Если вы уверены, что ваши пользователи будут смотреть на большие блоки текста, например вывески, вы можете использовать меньшее разрешение, и тогда обработка кадров будет происходить быстрее:

Вот как должен выглядеть метод createCameraSource, когда вы закончите:

Если вы запустите приложение, то увидите, что видео запустилось! Но для обработки изображений с камеры нам нужно закончить этот последний TODO для createCameraSource : создайте текстовый процессор процессора, как только он станет доступен.

Создать OcrDetectorProcessor

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

Перейти к классу OcrDetectorProcessor, реализующему интерфейс Detector.Processor:

Для реализации этого интерфейса необходимо переопределить два метода. Первый метод receiveDetections получает входные блоки TextBlock от TextRecognizer по мере их обнаружения. Второй — это выпуск, используемый для освобождения ресурсов TextRecognizer от уничтожения. В этом случае нам нужно просто очистить графическое полотно, что приведет к удалению всех объектов OcrGraphic.

Мы получим TextBlocks и создадим объекты OcrGraphic для каждого текстового блока, обнаруженного процессором. Мы реализуем логику их рисования на следующем шаге.

Теперь, когда процессор готов, нам нужно настроить textRecognizer для его использования. Вернитесь к последнему оставшемуся методу TODO createCameraSource в OcrCaptureActivity:

Теперь запустите приложение. На этом этапе при наведении камеры на текст будут появляться отладочные сообщения «Обнаружен текст!» В Android Monitor Logcat! Но это не очень наглядный способ визуализации того, что видит TextRecognizer, верно?

На следующем шаге мы нарисуем этот текст на экране.

Рисование текста на экране

Давайте реализуем метод draw в OcrGraphic. Нам нужно понять, есть ли на изображении текст, преобразовать координаты его границ в рамку холста, а затем нарисовать и границы, и текст.

Запустите приложение и протестируйте его на этом образце текста:



< /p>

На экране должна появиться рамка с текстом! Вы можете поиграть с цветом текста, используя TEXT_COLOR .



< /p>

Рамка вокруг текста выглядит правильно, но текст находится внизу.



< /p>


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

Вы можете получить Lines из TextBlock , вызвав getComponents , а затем, просматривая каждую строку, вы можете легко получить ее местоположение и текст внутри нее. Это позволяет рисовать текст там, где он действительно появляется.

Попробуйте еще раз этот текст:



< /p>

Хорошо! Вы даже можете разбить найденный текст на еще более мелкие компоненты, исходя из ваших потребностей. Вы можете вызвать getComponents в каждой строке и получить Elements (слова на латинице). Текст textSize можно настроить таким образом, чтобы он занимал столько же места, сколько фактический текст на экране.



< /p>

Воспроизведение текста при нажатии на него

Теперь текст с камеры преобразуется в структурированные строки, и эти строки отображаются на экране. Давайте сделаем с ними что-нибудь еще.

Используя TextToSpeech API, встроенный в Android, и метод, содержащийся в OcrGraphic, мы можем научить приложение говорить вслух, когда вы нажимаете на текст.

Во-первых, давайте реализуем метод, содержащийся в OcrGraphic. Нам просто нужно проверить, находятся ли местоположения x и y в пределах отображаемого текста.
OcrGraphic.java

Вы можете заметить, что у метода Draw много общего! В этом проекте следует добиться повторного использования кода, а здесь мы оставляем все как есть просто для примера.

Теперь обратимся к методу onTap в OcrCaptureActivity и обработаем клик по тексту, если он есть в этом месте.

Вы можете запустить приложение и через Android Monitor Logcat убедиться, что нажатие на текст действительно обрабатывается.

Давайте заставим наше приложение говорить! Перейдите в начало Activity и найдите метод onCreate.При запуске приложения мы должны инициализировать движок TextToSpeech для дальнейшего использования.

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

TextToSpeech также зависит от языка распознавания. Вы можете изменить язык на основе распознанного языка текста. Распознавание языка не встроено в Mobile Vision Text API, но доступно через Google Translate API. В качестве языка для распознавания текста можно использовать язык устройства пользователя.

Отлично, осталось только добавить код для воспроизведения текста в методе onTap.

Теперь, когда вы запускаете приложение и нажимаете на обнаруженный текст, ваше устройство воспроизводит его. Попробуйте!

Завершение

Теперь у вас есть приложение, которое умеет распознавать текст с камеры и произносить его вслух!

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

На этой странице описывается старая версия API распознавания текста, которая была частью ML Kit для Firebase. Функциональность этого API разделена на два новых API (подробнее):

    является частью нового автономного пакета SDK ML Kit, который можно использовать как с Firebase, так и без него. является частью Firebase ML, которая включает в себя все облачные функции машинного обучения Firebase.

Вы можете использовать ML Kit для сохранения текста на изображениях. ML Kit имеет как API общего назначения, так и API, оптимизированный для содержания текста документов. API общего назначения имеет модели как на выбросах, так и в облаке. Распознавание текста документа доступно только в виде облачной модели. См. обзор для сравнения облачной модели и модели на перспективу.

Прежде чем вы потеряли

  1. Если вы еще этого не сделали, добавьте Firebase в свой проект Android .
  2. Добавьте зависимость для библиотеки ML Kit Android в файл Gradle вашего модуля (на уровне приложений) (обычно app/build.gradle ):
  3. Необязательно, но рекомендуется . Если вы создали встроенный в устройство API, настройте приложение для загрузки моделей машинного обучения на устройство после установки приложения из Play Store.

Для этого добавить следующее объявление в файл AndroidManifest.xml вашего приложения:

Если вы хотите использовать облачную модель и еще не удаленные облачные API для своего проекта, сделайте это прямо сейчас:

Только проекты уровня Blaze могут использовать облачные API.

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

Теперь вы готовы распознавать текст на изображениях.

Инструкции по входному изображению

Чтобы ML Kit точно распознавал текст, входные изображения должны были воспроизводить текст, представленный вкус отклика сенсора. В идеале для латинского текста размер каждого символа должен быть не менее 16x16. Для текста на китайском, японском и корейском языках (поддерживается только облачными API) размер каждого символа должен составлять 24x24 пикселя. Для всех языков, как правило, нет преимуществ в значении символов, размер которых превышает 24x24 пикселя.

Так, например, изображение размером 640x480 может хорошо подойти для быстрой визитной карточки, занимающей всю полосу изображения. Для плотного документа, почтового индекса на бумаге формата Letter, может быть взято изображение размером 720x1280 пикселей.

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

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

Распознавать текст на изображениях

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

1. Запустить распознаватель текста

Чтобы распознать текст на изображении, создайте объект FirebaseVisionImage из Bitmap , media.Image , ByteBuffer , байтового массива или файла изображения. Затем передайте объект FirebaseVisionImage методу processImage FirebaseVisionTextRecognizer .

Создание объекта FirebaseVisionImage из объекта media.Image , например, при захвате изображения с камеры устройства, передайте объект media.Image и поворот изображения в FirebaseVisionImage.fromMediaImage() .

Если вы выделяете CameraX, классы OnImageCapturedListener и ImageAnalysis.Analyzer вычисляют для вас значение поворота, поэтому вам просто необходимо преобразовать поворот в одну из констант ROTATION_ ML Kit перед вызовом FirebaseVisionImage.fromMediaImage() :

Котлин+КТХ

Если вы не учитываете охват камеры, которая дает вам вращение изображения, вы можете рассчитать его по вращению устройства и ориентации датчика камеры в исследовании:

Котлин+КТХ

Затем передайте объект media.Image и значение поворота в FirebaseVisionImage.fromMediaImage() :

Котлин+КТХ

Котлин+КТХ

Затем создайте объект FirebaseVisionImageMetadata, высота, высота, формат, кодирование цвета и поворот изображения:

Котлин+КТХ

Используйте буфер или массив и объект метаданных для создания объекта FirebaseVisionImage :

 Использование распознавания текста для VIA VAB-950 и его реализация в Android

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

API распознавания текста для Google может распознавать текст, написанный с использованием любого набора символов на основе латиницы. Для получения дополнительной информации об этом конкретном API ознакомьтесь с обзором на веб-сайте Google ML Kit здесь.

Распознавание текста на VIA VAB-950

Мы реализовали распознавание текста на VIA VAB-950 с помощью Google ML Kit. Этот API позволяет вам обнаруживать текст практически в любом контексте, будь то дорожные знаки, на экране компьютера, из документа в формате PDF или из письменных писем, и распознает их, чтобы воссоздать слово как полезный объект на нашей машине. В этом случае рамки формируются вокруг слов и фраз и помечаются соответствующим образом. Посетите GitHub здесь, чтобы загрузить его для себя, или прочитайте наше руководство по установке Google ML Kit здесь. Это наряду с CameraX API, и используемая физическая камера — это камера MIPI CSI-2.

В этом API используются три основных класса, которые принципиально важны для работы приложения. Эти три функции — «CameraXLivePreviewActivity», «TextGraphic» и «TextRecognitionProcessor», причем последний, возможно, является наиболее важным, поскольку именно здесь происходят основные процессы предварительного просмотра камеры и его обработки через объект TextRecognizer.


< /p>

Проще, чем случай обнаружения лиц, в этом случае нужно только установить для imageProcessor значение «textRecogntionProcessor», не более того.

Процесс «Log.i» просто добавляет процесс в журналы вашего устройства, для этой программы это не очень важно».

В зависимости от того, какой imageProcessor выбран, код будет обрабатывать входное изображение из предварительного просмотра (которое оказывается ImageProxy):


Затем два метода варианта использования «bindAnalysisUseCase» и «bindPreviewUseCase» объединяются методом «bindAllCameraUseCases». Далее идет класс Text RecognitionProcessor. Как упоминалось ранее, это, пожалуй, самый важный, но и самый простой. Большая часть фактического распознавания выполняется «под капотом» со стороны Google, но этот класс создает экземпляр объекта «TextRecognizer» из API распознавания текста, а затем вызывает метод «.process», используя живое изображение в качестве входных данных.




< img class="lazyload" data-src="https://j3fau2wsnso1qkiarz7keon5-wpengine.netdna-ssl.com/wp-content/uploads/2021/06/image-5.jpg" />

Алгоритм кажется очень точным для слов, напечатанных на экране, но немного хуже для распознавания рукописного текста.Посетите раздел блога нашего веб-сайта, чтобы найти все последние новости и учебные пособия по VIA VAB-950!

Как использовать компьютерное зрение в Android для создания приложения для распознавания изображений?

Эту гостевую статью в блоге Applozic написал г-н Деннис Муася. Его специальность — проектирование и разработка передовых приложений для платформы Android, WordPress и написание технических статей. Он любит программировать и изучать всевозможные новые инновационные темы. Его можно найти на его веб-сайте, в Twitter и LinkedIn.

Деннис Муася

Страницу этого проекта на GitHub можно найти здесь ComputerVision

Метод преобразования видео или изображения в набор точек данных известен как компьютерное зрение. Эти точки данных затем используются компьютером для идентификации и понимания того, что происходит на видео или изображении. Компьютерное зрение должно уметь распознавать и оценивать свойства изображения, такие как формы, цвета, текстуры и узоры. При создании приложения для идентификации изображений с помощью компьютерного зрения необходимо учитывать два фактора: качество и количество. Высококачественные фотографии с соответствующим освещением повысят производительность алгоритма и помогут достичь высоких показателей точности. Однако для того, чтобы алгоритм мог выполнять какие-либо прогнозы или анализ изображений, необходимо иметь достаточное количество изображений для работы.

Для начала важно понять, что влечет за собой распознавание изображений. Это компьютерное зрение и искусственный интеллект, представляющие собой набор методов обнаружения и анализа изображений, позволяющих автоматизировать конкретную задачу. TensorFlow Lite позволяет нам разрабатывать модели глубокого обучения, которые работают на мобильных устройствах (TFLite). На самом деле, варианты TFLite специально разработаны для мобильного и периферийного развертывания из-за их эффективных возможностей обработки. Разработчики могут использовать конвертер TensorFlow Lite, чтобы преобразовать модель глубокого обучения, созданную в TensorFlow, в версию для мобильных устройств.

В этом руководстве мы создадим модель TensorFlow для идентификации фотографий на Android с помощью пользовательского набора данных и сверточной нейронной сети (CNN). Вместо того, чтобы разрабатывать CNN с нуля, мы будем использовать предварительно обученную модель и модифицировать ее в соответствии с нашим новым набором данных с помощью трансферного обучения. Затем модель будет использоваться в приложении для Android, которое распознает фотографии, сделанные камерой. На Github вы можете найти проект, который был разработан в результате этого руководства. Он прошел все необходимые тесты и теперь работает.

Предварительный просмотр фото

Что такое компьютерное зрение?

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

Что такое распознавание изображений?

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

Например, чтобы определить, была ли на изображении корова, конвейер может выглядеть следующим образом:

  • Модель распознавания изображений, обученная на фотографиях «коровы» и «не коровы».
  • В модель загружаются следующие данные:
  • Вывод модели изображения: показатель достоверности, показывающий вероятность того, что это изображение содержит этот класс элементов (например, корову).

Сверточные нейронные сети используют слои, чтобы выполнять математические вычисления с изображениями. Слои включали слои. Вы можете использовать предварительно обученные проекты сетевых моделей, совместимые со стандартными изображениями наборов данных, используя трансферное обучение. Итак, начните с создания собственной сети, но вы быстро увидите, что предварительно обученные сети превосходят их. Для начала используйте предварительно обученные модели.

Шаги

Теперь я шаг за шагом проведу вас через процесс создания вашего приложения. Я предполагаю, что у вас уже установлена ​​Android Studio и вы знакомы с основами Kotlin.
Я настроил Github для примера приложения. Вы можете либо следовать этой инструкции, либо просто клонировать репозиторий Github. Этот код можно использовать любым удобным для вас способом.

Шаг 1. Требования TensorFlow

Компоненты, необходимые для распознавания изображений на Android, перечислены ниже.

  • Зависимость: краткий обзор TensorFlow (вы также можете использовать самую последнюю версию, хотя предварительная версия подходит).
  • Инициализация Tensorflow (метод в ClassifierActivity)
  • TensorFlowImageClassifier
  • Интерфейс для классификаторов

Интерфейс классификатора и активность классификатора легко продублировать. Перейдите по этому URL-адресу, чтобы увидеть эти файлы. Я предложу вам более подробные инструкции позже в этом руководстве. Итак, давайте начнем эту вечеринку.

Шаг 2. Включение необходимых зависимостей

Начинать с самых важных зависимостей всегда разумно. Для этого варианта использования нам потребуются следующие элементы:
TensorFlow Lite — это библиотека Android, для которой требуется много комплекта камеры.
Добавьте следующие зависимости в файл build.Gradle:

aaptOptions noCompress «tflite»
noCompress «lite»
>
>

файл реализации зависимостей(dir: 'libs', include: ['*.jar'])
реализация 'com.android.support:appcompat-v7:28.0.0'
реализация 'com .android.support:exifinterface:28.0.0'

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

Настроить

Следующим этапом будет разработка макета.
Для целей этой статьи я предполагаю, что ваше приложение имеет только одно действие и одну цель в жизни: функционировать в качестве предварительного просмотра камеры. Итак, откройте файл макета вашей активности, как показано здесь «C:\Users\AndroidStudioProjects\app\src\main\res\layout\activity_main.XML», и добавьте следующее представление.

(Предположим, что корневой тег вашего файла макета — ConstraintLayout)
Как и следовало ожидать, это вид, который будет отображать предварительный просмотр камеры на экране пользователя. Для простоты мы пока сохраним ориентацию экрана в портретном режиме. Найдите тег активности в файле AndroidManifest.xml и добавьте к нему атрибут screenOrientation:

Теперь, когда мы завершили сложную часть, давайте перейдем к действиям.

Шаг 3. Инициализация Tensorflow в активности классификатора

Методы, указанные ниже в классе Classifier Activity, должны вызываться «методом создания». Tensorflow инициализируется в начале вашей программы. Для этого скопируйте и вставьте приведенный ниже код в класс Classifier. Пожалуйста, оставьте комментарий, если у вас есть какие-либо вопросы о коде.

классификатор класса(
варной интерпретатор: Интерпретатор? = ноль,
var inputSize: Int = 0,
var labelList: List = emptyList()
) : IClassifier

частное значение объекта-компаньона MAX_RESULTS = 3
частное значение BATCH_SIZE = 1
частное значение PIXEL_SIZE = 3
частное значение THRESHOLD = 0,1f

@Throws(IOException::class)
fun create(assetManager: AssetManager,
modelPath: String,
labelPath: String,
inputSize: Int): Классификатор

val classifier = Classifier()
classifier.interpreter = Interpreter(classifier.loadModelFile(assetManager, modelPath))
classifier.labelList = classifier.loadLabelList(assetManager, labelPath)
classifier. размер ввода = размер ввода

переопределить удовольствие распознатьImage(bitmap: Bitmap): List val byteBuffer = convertBitmapToByteBuffer(bitmap)
val result = Array(1) < ByteArray(labelList.size) >
интерпретатор. run(byteBuffer, result)
return getSortedResult(result)
>

переопределить интерпретатор fun close(). close()
interpreter = null
>

@Throws(IOException::class)
private fun loadLabelList(assetManager: AssetManager, labelPath: String): List val labelList = ArrayList ()
val reader = BufferedReader(InputStreamReader(assetManager.open( labelPath)))
while (true) val line = reader.readLine() ?: break
labelList.add(line)
>
reader.close()
возврат списка меток
>

private fun convertBitmapToByteBuffer(bitmap: Bitmap): ByteBuffer val byteBuffer = ByteBuffer.allocateDirect(BATCH_SIZE * inputSize * inputSize * PIXEL_SIZE)
byteBuffer.order(ByteOrder.nativeOrder())
val intValues ​​= IntArray (inputSize * inputSize)
bitmap.getPixels(intValues, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height)
var pixel = 0
for (i in 0 до inputSize) for (j в 0 до inputSize) val `val` = intValues[pixel++]
byteBuffer.put((`val` shr 16 и 0xFF).toByte())
byteBuffer.put( (`val` shr 8 и 0xFF).toByte())
byteBuffer.put((`val` и 0xFF).toByte())
>
>
вернуть byteBuffer
>

частное развлечение getSortedResult(labelProbArray: Array ): Список

для (i в labelList.indices) val достоверность = (labelProbArray[0][i].toInt() и 0xff) / 255.0f
if (достоверность > ПОРОГ) pq.add(IClassifier.Recognition( «» + i,
if (labelList.size > i) labelList[i] else «Неизвестно»,
надежность))
>
>

val опознавания = ArrayList ()
val опознаванияSize = Math.min(pq.size, MAX_RESULTS)
для (i в 0 до опознанияSize) опознания.добавить(pq.poll())
>

Поместите «classifier.interpreter = Interpreter(classifier.loadModelFile(assetManager, modelPath))» в начало класса, поскольку эти методы работают в потоке. Переменные описаны ниже. Это параметры, которые требуются для нашей модели.

Шаг 4. Добавление истории приложения

Начнем с добавления исполнителя для анализатора изображения с камеры, который будет выполнять код обработки; поверх действия добавьте следующую строку:

private val executor = Executors.newSingleThreadExecutor()

Когда он больше не нужен, мы также отключим его в методе onDestroy активности:

переопределить fun onDestroy() super.onDestroy()
executor.execute < classifier.close() >
>

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

Анализатор изображений

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

В методе onCreate класса App Activity необходимо вызвать метод initTensorFlowAndLoadModel. Tensorflow инициализируется в начале вашей программы. Для этого скопируйте и вставьте приведенный ниже код в класс App Activity. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь оставлять комментарии, и я буду рад ответить на них.

Читайте также: