Чем распознавать на мобильных платформах?

    image

    image

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

    Как распознавать?


    На самом деле способов распознавать на мобильных устройствах не так то и много.

    Существует три варианта:

    1. Юзать уже готовую библиотеку, и просто скармливать ей изображения
    2. Использовать какое-то апи или сделать распознавание на сервере
    3. Написать свою библиотеку для распознавания текста

    1. Взять библиотеку и скармливать ей картинки


    Ничего космического в том нету, ведь есть масса библиотек для этих целей, но одни подходят лучше, а другие хуже. Для себя я отметил эти:

    • Tesseract


    image

    Написана эта библиотека на С++. И она здесь вовсе не потому что крутая. Мой совет: обходите её стороной. В интернете куча статей восхваляющих эту библиотеку, да синтаксис прост и удобен, но на личном опыте проверено что она ужасна. Почему так объясняю: Для мобильных устройств есть ограничения по нагрузке на процессор, и если скормить картинку в хорошем разрешении телефон просто подвиснет, и здесь уже даже многопоточность не поможет, она просто не приспособлена для мобильных, при этом точность распознавания — просто днище, если половину поймет — уже хорошо. Если кто-то не верит — можете сами проверить это займет не более часа.

    Точность: 4/10
    Скорость: 4/10
    Простота: 8/10
    Нагрузка: 2/10

    Общее впечатление: ужас, обходите десятой дорогой


    • OpenCV


    image

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

    Точность: 8/10
    Скорость: 6/10
    Простота: 8/10
    Нагрузка: 6/10

    Фича: Просто хорошая библиотека ни больше ни меньше
    Общее впечатление: в целом неплохо


    • Mobile vision


    image

    Мой фаворит среди библиотек. Распознает текст, детектит лица, эмоции, считывает QR коды. Одним словом функционал хороший. Самое главное — это низкие требования к железу. Писалась специально для мобильных устройств. Мне очень понравилось то что можно прикреплять к ней камеру и не просто делать фотографию и выводить результаты, а сразу, на лету сканировать поток данных с камеры, распознавать, и поверх камеры рисовать всякие штуки на основе результатов, и при этом проседаний фпс не наблюдается. Но еще один важный критерий — точность, здесь она где-то 95%. Правда есть и минусы. В прошлом месяце гугл выпустил баганую версию play services и распознавание текста на многих устройствах не работало — был просто креш, но сейчас все вроде ок.

    Ссылка на сайт: https://developers.google.com/vision/

    Точность: 10/10
    Скорость: 10/10
    Простота: 7/10
    Нагрузка: 9/10

    Фича: прикрепление к камере за счет быстрой обработки данных без потери качества
    Общее впечатление: прекрасно


    2. Запросы в сеть


    Суть проста: мы передаем фотографию в сеть и получаем ответ в виде json. Фотки можно передавать по-разному: ссылка, base64 string, Post запрос. Из недостатков: постоянный доступ в интернет, нельзя обрабатывать поток с камеры.

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


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

    Точность: зависит от библиотеки
    Скорость: зависит от библиотеки + время на запрос
    Простота: 1/10(делать свой сервер с распознаванием — дело не 5 минут)
    Нагрузка: 10/10(минимальна, только запрос в сеть)

    Фича: Не зависите ни от кого, и подстраиваете под себя
    Общее впечатление: геморно, но вполне реально


    • Cloud Platform Vision


    image
    Мне понравилось юзать эту штуку. Имеет самый большой спектр функций: ocr, logo recognition, face detection, Label detection и т.д. Отдельно хочу выделить распознавание достопримечательностей — аналогов просто нет, а точность высокая, может распознать дряхлую церквушку в каком-нибудь Мухосранске, но бывают и казусы. Скармливать можно ссылки и base64 string.

    Библиотека для создания запросов к cloud vision она конечно не очень, но как пример для написания клиента норм: https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/vision

    Точность: 10/10
    Скорость: время на запрос
    Простота: 7/10
    Нагрузка: 10/10(минимальна, только запрос в сеть)

    Фича: Можете распознавать все подряд, Landmark detection
    Общее впечатление: вполне круто, но расценки...


    • Kairos


    Мало кто знает про это прекрасное api для распознавания лиц (features). Оно дает точные результаты, и его легко использовать. Вообще у них есть еще sdk для запросов, но оно платное, хотя на гитхабе его можно отрыть(я находил). Цены сравнительно демократичны, так что юзать можно.

    Точность: 10/10
    Скорость: время на запрос
    Простота: 9/10 с sdk, если без то 6/10
    Нагрузка: 10/10(минимальна, только запрос в сеть)

    Фича: Большой спектр функций в распознавании лиц
    Общее впечатление: вполне круто если вам нужно распознавать только лица


    3. Написать свою библиотеку для распознавания
    Пафосно и круто, но вам прийдется убить кучу времени.

    Точность: зависит от вас
    Скорость: зависит от вас
    Простота: -1/10
    Нагрузка: зависит от вас

    Фича: что хочу то ворочу


    Надеюсь что этот список кому-то поможет, публикуйте в комментах библиотеки которых нету в списке, но они крутые, или не очень.
    • +16
    • 9,8k
    • 9
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 9
      +4
      Сейчас бы сравнить библиотеку OCR общего назначения с библиотекой CV общего назначения.
      Тут я распознавал текст и было плохо, а тут квадратики, и было хорошо.
      Серьезно? А оценка как формировалась, по субъективным ощущениям? Где примеры кода, где сравнительные тесты на одной и той же выборке?
        0
        Автор думаю даже понятия не имеет, чем отличается Tesseract от OpenCV. Кстати, следуя логике автора:
        Мой совет: обходите её стороной. Наисана она на С++.

        OpenCV тоже писан на крестах, и его тоже нужно обходить стороной.

        Библиотеки абсолютно разного назначения: Tesseract используется для распознавания текста, имея некоторую (довольно слабую) предобработку изображений (основанную на Leptonica). OpenCV — Computer Vision library, которая вообще не умеет в распознавание символов, но имеет много классных штук для олбработки изображений. Можно и даже нужно комбинировать OpenCV и Tesseract для получения более-менее приемлемого результата.

        А что касается готовых API — мне действительно интересно, что же там под капотом у них работает.
          0
          Я прекрасно знаю что opencv на С++, и я не имел ввиду обходить tesseract стороной из-за того что он на С++, как-то все равно на чем написано, проблема в том что он не может распознавать текст нормально. Просто так вышло что написал я про язык программирования не там где надо, но сейчас подправлю.

          Устройство на котором я тестил имеет мощнейший процессор и камеру на 16Мп, но даже с таким железом и вынесением в отдельный поток было жесткое провесание секунд на 10, а результат был полным бредом, в лучшем случае половина распознавалась. Вот почему она ужасна.
          0
          Ок, а где вы видите здесь сравнение? Это характеристика каждой библиотеки, а не сравнение какая круче, ведь как вы заметили глупо сравнивать распознавалку лиц и текста.

          Спрашиваете как формировалась оценка, я вам отвечу: в течении года я пробовал разные библиотеки распознавания — одни распознавали лица, другие текст, а третьи квадратики. Я клепал небольшую приложуху с одной из библиотек и распознавал с их помощью разные фото. Тестил это добро на xiaomi mi max: процессор Sharpadragon 630, 3гб оперативки, 16мп камера

          Данные были реально разными даже для библиотек с одинаковыми функциями, поэтому я не в праве говорить какая библиотека лучше, но tesseract был просто очевидно хуже, там даже сильно и сравнивать не надо было, он не мог распознать и половину текста, а еще размер APK c tesseract в 17 раз превосходил APK с mobile vision. Поэтому можете быть уверены, что эти выводы были сделаны на основе реального опыта.
          0

          А TensorFlow? А dlib?

            –1
            Mobile Vision не сильно быстрее OpenCV, все винескольких потоках вот и нет просадки fps
              0
              Тссс тут на самом деле ICO kairos рекламируют :)
                +1
                А как же ABBYY OCR? Там и API, и SDK, и много языков.
                  0
                  Спасибо. Не знал о нем.

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

                Самое читаемое