php распознавание текста на картинке

OCR в PHP: чтение текста с изображений с помощью Tesseract

Оптическое распознавание символов (OCR) — это процесс преобразования печатного текста в цифровое представление. Он имеет множество практических применений — от оцифровки печатных книг, создания электронных записей квитанций до распознавания номерных знаков и даже обхода CAPTCHA на основе изображений.

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

Tesseract — это программа с открытым исходным кодом для выполнения распознавания текста. Вы можете запустить его на системах * Nix, Mac OSX и Windows, но используя библиотеку, мы можем использовать ее в приложениях PHP. Этот учебник разработан, чтобы показать вам, как.

Установка

подготовка

Для простоты и согласованности мы будем использовать виртуальную машину для запуска приложения, которое мы предоставляем с помощью Vagrant. Это позаботится об установке PHP и Nginx, хотя мы установим Tesseract отдельно, чтобы продемонстрировать процесс.

Vagrant Setup

Введите следующую команду, чтобы загрузить конфигурацию Homestead Improved Vagrant в каталог с именем ocr :

Давайте изменим конфигурацию Nginx в Homestead.yml из:

Вам также необходимо добавить следующее в ваш файл hosts:

Установка Tesseract Binary

Следующим шагом является установка двоичного файла Тессеракта.

Как я упоминал выше, в README есть инструкции для других операционных систем.

Тестирование и настройка установки

Мы собираемся использовать оболочку PHP, но прежде чем мы начнем строить, мы можем проверить, что Tesseract работает с использованием командной строки.

В виртуальной vagrant ssh ( vagrant ssh ) выполните следующую команду, чтобы «прочитать» образ и выполнить процесс распознавания:

Это создает файл в текущей папке с именем out.txt который все хорошо, должен содержать слово «ВНИМАНИЕ».

Теперь попробуйте с файлом sign2.jpg :

( Изображение является адаптированной версией этого ).

На этот раз вы должны обнаружить, что он произвел слово «Einbahnstral’ie». Это близко, но это не правильно — даже несмотря на то, что текст на изображении довольно четкий и ясный, он не смог распознать символ eszett (ß).

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

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

Затем скопируйте файлы в следующий каталог:

На этот раз текст должен быть правильно обозначен как «Einbahnstraße».

Не стесняйтесь добавлять дополнительные языки, повторяя этот процесс.

Настройка приложения

Мы собираемся использовать эту библиотеку-оболочку для использования Tesseract из PHP.

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

Первый шаг — установить зависимости с помощью Composer:

Теперь создайте следующие три каталога:

Нам понадобится форма для загрузки ( views\index.twig ):

И страница с результатами ( views\results.twig ):

Теперь создайте скелет приложения Silex ( public\index.php ):

Если вы посещаете приложение в своем браузере, вы должны увидеть форму загрузки файла. Если вы следите за новостями и используете Homestead Improved с Vagrant, вы найдете его по следующему URL:

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

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

Выполнить OCR на изображении действительно просто. Мы просто вызываем метод recognize() :

Наконец, мы можем отобразить страницу результатов, передав ей результаты OCR:

Практический пример

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

Посмотрите на следующее изображение и попробуйте загрузить его в свое приложение:

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

Результаты должны выглядеть так:

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

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

Вы можете указать Tesseract ограничить его вывод определенными диапазонами символов. Таким образом, мы можем сказать, чтобы он возвращал только цифры, используя следующую строку:

Однако есть проблема с этим. Вместо того, чтобы игнорировать нечисловые символы, он обычно интерпретирует буквы как цифры. Например, имя «Боб» можно интерпретировать как число «808».

Вместо этого давайте используем двухэтапный процесс:

Давайте добавим порт PHP библиотеки libphonenumber в наш файл composer.json :

Не забудьте обновить:

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

Надеемся, что комментарии объяснят, что делает функция. Обратите внимание, что если библиотека не сможет проанализировать строку чисел как номер телефона, она выдаст исключение. Это не проблема как таковая; мы просто игнорируем это и переходим к следующему кандидату.

Теперь мы можем использовать его следующим образом:

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

Мы могли бы обернуть все это в новый маршрут:

Теперь у нас есть простой API — и, следовательно, ответ JSON, — который мы могли бы использовать, например, в качестве серверной части простого мобильного приложения для добавления контактов или осуществления вызовов с печатного номера телефона.

Резюме

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

Источник

Распознавание текста с помощью OCR

Tesseract — это движок оптического распознавания символов (OCR) с открытым исходным кодом, является самой популярной и качественной OCR-библиотекой.

OCR использует нейронные сети для поиска и распознавания текста на изображениях.

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

На одном из проектов стояла задача распознать чеки с фотографий.

Инструментом для распознавания был использован Tesseract OCR. Плюсами данной библиотеки можно отметить обученные языковые модели (>192), разные виды распознавания (изображение как слово, блок текста, вертикальный текст), легкая настройка. Так как Tesseract OCR написан на языке C++, был использован сторонний wrapper c github.

Различиями между версиями являются разные обученные модели (версия 4 имеет большую точность, поэтому мы использовали её).

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

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

Также был найден способ обработки изображения для его дальнейшего распознавания путем использования библиотеки OpenCV. Так как OpenCV написан на языке C++, и не существует оптимального для нашего решения написанного wrapper’а, было решено написать собственный wrapper для этой библиотеки с необходимыми для нас функциями обработки изображения. Основной сложностью является подбор значений для фильтра для корректной обработки изображения. Также есть возможность нахождения контуров чеков/текста, но не изучено до конца. Результат получился лучше (на 5-10%).

language — язык текста с картинки, можно выбрать несколько путем их перечисления через «+»;

pageSegmentationMode — тип расположения текста на картинке;

charBlacklist — символы, которые будут игнорироваться ignoring characters.

Использование только Tesseract дало точность

70% при идеальном изображении, при плохом освещении/качестве картинки точность была

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

Vision + Tesseract OCR

Так как результат был неудовлетворителен, было решено использовать библиотеку от Apple — Vision. Мы использовали Vision для нахождения блоков текста, дальнейшего разделения изображения на отдельные блоки и их распознавания. Результат был лучше на

5%, но и появлялись ошибки из-за повторяющихся блоков.

Недостатками этого решения были:

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

MLKit

Еще одним из методов определения текста является MLKit от Google, развернутый на Firebase. Данный метод показал наилучшие результаты (

90%), но главным недостатком этого метода является поддержка только латинских символов и сложная обработка разделенного текста в одной строке (наименование — слева, цена — справа).

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

В итоге можно сказать, что распознать текст на изображениях — задача выполнимая, но есть некоторые трудности. Основной проблемой является качество (размер, освещенность, контрастность) изображения, которую можно решить путем фильтрации изображения. При распознавании текста при помощи Vision или MLKit были проблемы с неверным порядком распознавания текста, обработкой разделенного текста.

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

Источник

PHP: распознать цифры, буквы с картинки

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинкеПриветствую вас дорогие читатели! В этой небольшой статья я поделюсь с вами своими небольшими наработками, по распознанию цифр и букв, а впрочем и любых других символов с картинки. Наверняка многие из вас задумывались о том, как бы распознать код с capcha в автоматическом режиме. Написать для этого скрипт и творить свои темные делишки;) Мне же предстояла задача, распознать с нескольких тысяч картинок текст и сделать это было нужно с помощью PHP (впрочем инструмент может быть и другим С, C++, delphi и т.д.)

Для начала вкратце расскажу о логике работы нашего скрипта, все достаточно просто и можно разделить на следующие этапы:
1) Загрузка картинки в память
2) Перебор всех пикселей картинки с получением значения цвета пикселя и запись значения в многомерный массив или одномерный линейный массив в зависимости от алгоритма сверки (я использовал второй вариант).
3) Приведение пикселей «шума» на изображение в нулевое значение, чтобы далее не путаться с ним.
4) Сверка элементов массива(матрицы) с эталонным массивом, содержащим значения той или иной буквы символа. В случаи максимального совпадения значений, фиксируем букву — как распознанную.

Например, вот так выглядит цифра 2 первого шрифта:
php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

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

Картинка для распознания
php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

Код скрипта выглядит следующим образом, (в листинге присутствует много лишнего кода, для вывода результатов в браузер, надеюсь в процессе разбора вам будет все понятно)

Пример работы скрипта можно посмотреть по этой ссылке.

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

Также существуют и другие способы распознания текста, например нейронные сети, о которых так много говорят;) Успехов!

Похожие записи

1 Comment to “PHP: распознать цифры, буквы с картинки”

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинке

спасибо очень помогло распознать номер с картинки,

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

А потом переделать под себя.

Оставить комментарий

Друзья, всем привет!

Меня зовут Роман Чернышов, я веб-разработчик и данный блог посвящен моим проектам и бизнесу.

Тут я делюсь личным опытом
и отвечаю на вопросы. Я всегда готов к сотрудничеству с вами, готов реализовать проект любой сложности( опыт 10+ лет ).

Источник

Детектирование текста на изображении, антиспам

Помощь в написании контрольных, курсовых и дипломных работ здесь.

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинкеГенерация текста на изображении
Здравствуйте! Только начал изучать php, поэтому уж слишком сильно не ругайте, пожалуйста. Задача.

Каракули вместо текста на изображении
Здравствуйте. Как только я решил проблему с накладыванием текста на изображения обнаружил еще одну.

Детектирование трещин на изображении
Добрый день, уважаемые господа и дамы. Я нахожусь в критической ситуации, когда сам уже ничего не.

Добавлено через 34 секунды
Ну или Администратор

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Распознавание текста на изображении
Знаю, тема не нова, но очень нужно распознать текст на изображении(

100x25px, язык английский +.

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинкеРаспознавание текста на изображении
Потребовалось распознать текст на картинке, попытался найти готовые библиотеки, из таких нашел.

php распознавание текста на картинке. Смотреть фото php распознавание текста на картинке. Смотреть картинку php распознавание текста на картинке. Картинка про php распознавание текста на картинке. Фото php распознавание текста на картинкеПоиск текста в изображении
Ситуация такова: Есть цветное изображения x*y размера надо найти текст(на белом фоне) он его цвет.

Источник

imagefttext

(PHP 4 >= 4.0.7, PHP 5, PHP 7, PHP 8)

imagefttext — Нанесение текста на изображение, используя шрифты FreeType 2

Описание

Список параметров

Размер шрифта в пунктах.

Угол в градусах, 0 градусов означает расположение текста слева направо. Положительные значения означают поворот текста против часовой стрелки. Например, текст повёрнутый на 90 градусов нужно будет читать снизу вверх.

y-координата. Это позиция базовой линии шрифта, в общем случае она не совпадает с низшей точкой в символе.

Путь к TrueType шрифту, который требуется использовать.

В большинстве случаев размещение файлов шрифтов в директории скрипта решает подобные проблемы включения файлов.

Текст для вставки в изображение.

Возможные значения массива options

КлючТипЗначение
linespacingfloatОпределяет рисование нижнего подчёркивания

Возвращаемые значения

Эта функция возвращает массив, определяющий четыре точки рамки текста. Текст внутри этих границ начинается с левого нижнего угла и поворачивается против часовой стрелки:

0нижняя левая x-координата
1нижняя левая y-координата
2нижняя правая x-координата
3нижняя правая y-координата
4верхняя правая x-координата
5верхняя правая y-координата
6верхняя левая x-координата
7верхняя левая y-координата

Список изменений

ВерсияОписание
8.0.0image теперь ожидает экземпляр GdImage ; ранее ожидался ресурс ( resource ).

Примеры

Пример #1 Пример использования imagefttext()

// Путь к ttf файлу шрифта
$font_file = ‘./arial.ttf’ ;

// Вывод изображения
header ( ‘Content-Type: image/png’ );

Примечания

Смотрите также

User Contributed Notes 15 notes

Do this as root :
apt-get install libfreetype6-dev

After spending the evening with some work on automatically generated images, I had the idea to switch of anti-aliasing (looking, if some font would look better that way), which turned out not to be quite so easy.

Actually you have to use the negative of the desired color to switch of antialising. I include the corresponding line from my code (line split up):

// USE NEGATIVE OF DESIRED COLOR TO SWITCH OF ANTI-ALIASING
ImageFTText ($neuesBild,$fontsize,$fontangle,$TextPosX,$TextPosY,
-$custom_fg,$fonttype,$text,array());

If you’re interested in turning off FreeType hinting, search for the following line in the gd source (gdft.c):
err = FT_Load_Glyph (face, glyph_index, FT_LOAD_DEFAULT);
and replace it with
err = FT_Load_Glyph (face, glyph_index, FT_LOAD_NO_HINTING);

Recompile GD, and vo�la: beauteous antialiasing.

This function is very simular to imageffttext(), you may find the information provided on its manual page helpful:

For a design project I am required to have spacing between characters; since imagefttext does not support this feature I have created a function which does support this.

The arguments are identical to imagefttext, accept that (array)$extrainfo now accepts the ‘character_spacing’ spacing parameter. The return values are as expected, and include the image boundaries of the entire string including the character spacing.

I hope this is of some use to someone.
— KeepSake

// Required header (assuming we use png images)
header ( «Content-type: image/png» );

could be different. This helped when setting GDFONTPATH.

GD1 was OK as it used pixels for font rendering, but GD2 uses points, which only makes any sense if you know the DPI that it assumes when rendering text on the image surface. I have not been able to find this anywhere in this documentation but have examined the GD2 source code and it appears to assume a DPI of 96 internally. However, this can easily be customised in the GD2 source so it cannot be assumed that all PHP interpreters out there have a GD2 compiled using 96dpi internally.

If it does, and you are using it to construct images whose target DPI is not 96, you can calculate the point size to supply to imageftbox() and imagefttext() like this:

/* 100mm x 100mm image */
$imageWidth = 100 ;
$imageHeight = 100 ;

/* 300 dpi image, therefore image is 1181 x 1181 pixels */
$imageDPI = 300 ;

header ( «Content-type: image/jpeg» );

I found myself in need of an align right function and found one on the imagepstext manual page. I can’t imagine I’m the only person who’s needed to use this, so here’s a slightly modified version that works with imagefttext:

$text1 = «shenko.homedns.org» ; // Here is our text

Thanks for the script! I modified it to show several fonts that I was wanting to use. I am using GD-2.0.7, FreeType-2.1.3(text rotation fix,among others), and PHP-4.2.3 and had to include the array information to get it to work.

Code change follows:
$fontfile=»/usr/local/fonts/ttf/bookantbd.ttf»;
// Waterfall of point sizes to see what Freetype 2’s autohinting looks like:
//
for($i=4;$i 1.0));
>

Since this function is not documented, I felt it was best that I shed some light on the extrainfo parameter.

Basically it accepts an array containing the following options as keys and an associated value:
(int) flags [more info in the GD reference manual]
(double/float) linespacing
(int) charmap
(int) hdpi
(int) vdpi
(string) xshow
(string) fontpath

My C/C++ is not very good but this is the best I can explain. Read the documentation for more information. 🙂

A very simple example of usage would be:

I’m not sure if this is a PHP issue or an GD issue, but after upgrading to PHP 5.3.2, text written at an angle has become top-justified (so «N» and «n» have the same top, but the bottom of the «N» is lower than the bottom of the «n». I’ve written a kludgy work-around, which writes the text to a non-rotated temporary image, then copies the temporary image, rotated onto the main image. The kludginess is to get around the fact that I can’t seem to extract the font info, particularly the distance between the baseline and the very bottom (I’ve hard-coded it as 30% of the font size)
I hope the bug can be fixed (if it is indeed a bug) or that others can improve this code:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *