Распознавать буквы с помощью камеры смартфона

1

Я разработаю веб-приложение, которое может распознавать текст с помощью смартфона. Я видел в Интернете, что существует много решений, которые могут распознавать текст в видеоролике/потоке, но для этого решения необходимо разработать собственное приложение. Я хочу распознать текст, создав небольшой сайт, на котором я могу сделать следующее:

  1. Зарегистрируй себя
  2. Доступ к смартфоне
  3. Признать текст выстрелом
  4. Показывать буквы, распознанные в простой метке
  5. Сохраните эти буквы в удаленной базе данных, связанной с моей учетной записью

Кто-нибудь знает способ распознать письма, не снимая картинки и не используя собственное приложение? В Интернете я нашел tesseract ocr, но я не уверен, что могу использовать его на странице HTML5, CSS3 и javascript. Кто-нибудь пользовался этой библиотекой? В каком мобильном браузере он работает (Safari для iOS, браузер для Android и Internet Explorer для Windows Phone 7/8)?

3 ответа

1
Лучший ответ

Вы пробовали это? Это библиотека Javascript

OCRAD

  • 0
    Я думаю, я тоже смотрел на это: D, но я забыл это: D: D: D. Однако вы уверены, что он будет работать с камерой iOS, Android и Windows Phone?
  • 0
    Вы можете использовать это как OCR. После этого вы можете следить за чем-то вроде stackoverflow.com/questions/9431475/html5-camera-access
2

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

Там, вероятно, есть библиотека, так что, возможно, ваш лучший подход. Однако, в отсутствие библиотеки, я думаю, что это лучший подход (я только об этом расскажу).

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

2) Признание письма не обязательно (обязательно) требует цвета. На стороне устройства я бы рекомендовал преобразовать изображение в черно-белый или даже в массив целых чисел со значениями, представляющими яркость в разных точках изображения. Вероятно, вы захотите взять границы яркости относительно общей разницы в яркости изображения. То, что я имею в виду, - найти самый яркий пиксель и целое число 100, а самое темное - целое число 0, причем все остальные числа от 1 до 99 представляют разные равномерно распределенные яркости между максимумом и мин.

3) Теперь у вас есть немного меньшего изображения для отправки назад и обработки, чтобы отправить его на ваш сервер!

4) Итак, теперь сложный бит: нам нужно обработать это изображение. Во-первых, нам нужно будет выделить все буквы. Проблема в том, что буквы и фон могут быть любого цвета. На изображении могут быть другие объекты. Теперь нам нужно выяснить, какие объекты на изображении являются буквами и где они находятся. То, как я решил это, - это искать наиболее крупные аналогичные компоненты яркости на изображении. Я имею в виду, подсчитайте количество пикселей между каждым разным порогом яркости, и довольно вероятно, что бумага является наиболее важным вкладом, поскольку буквы являются вторыми. Не определенно, наверное.

5) Пройдите изображение и извлеките каждый объект. Вы можете сделать это, перейдя на каждый пиксель, если это цвет, который ваш код считает буквами, проверяя все соседние пиксели, а затем все их соседние пиксели, пока вы не найдете больше граничащих пикселей одинакового цвета. Это письмо.

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

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

7) Правильно, поэтому у нас есть набор объектов (надеюсь, с некоторыми прикрепленными координатами, чтобы вы не потеряли информацию о том, где на изображении появились эти объекты), которые, вероятно, являются буквами. Как мы узнаем их? Есть два основных способа сделать "Оптическое распознавание символов". Это: Matrix Matching и Feature Extraction. Функция Extraction включает поиск циклов и линий и других функций букв. Это очень сложно программировать, поэтому мы по-прежнему будем с Matrix Matching.

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

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

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

Короче говоря, это очень сложно. Вам, вероятно, лучше всего использовать библиотеку, которую кто-то создал, но даже тогда это будет неточно много времени.

Извините, если это не совсем тот ответ, который вам нужен. Спасибо, если вы прочтете это далеко. Я просто нахожу это очень интересной проблемой.

0

В интересах пользователей, которые сейчас сталкиваются с этим вопросом, есть JS-порт Tesseract (библиотека, упомянутая в самом вопросе) на GitHub: https://github.com/naptha/tesseract.js/. Таким образом, чтобы ответить на эту часть вопрос, да, на самом деле, вы можете использовать Tesseract в своих проектах на стороне браузера!

Также доступны (через одного разработчика!) Https://github.com/antimatter15/ocrad.js/ (упоминается в предыдущем ответе) и https://github.com/antimatter15/gocr.js/ - любой из этих может работать в ваших целях, но что-то, о чем следует помнить, заключается в том, что ничто не использует ничего близкого к тому, что было совершено, как Tesseract, с точки зрения способности распознавать текст. Таким образом, вы будете жертвовать немного (или иногда даже огромной) качеством в обмен на небольшие скрипты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню