В одном из своих проектов мне потребовалось распознавание символов и мой выбор остановился на tesseract ocr. На Хабре уже была подобная статья, но на данный момент она не актуальна, во время установки не получилось в точности повторить инструкции автора. В данной статье рассказывается о процессе установке Tesseract OCR под MinGW.
На данный момент разработкой tesseract ocr занимается компания Google, это может означать, что библиотека будет развиваться в ближайшем времени. Я постараюсь описать процесс установки максимально подробно, начиная с установки MinGW.
Установка MinGW
Для начала нам нужно установить MinGW, его можно скачать с официального сайта проекта. Во время установки необходимо выбрать следующие опции:
- C++ Compiler
- MSYS Basic System
Шаг 1. установка MinGW:
Не забываем отметить нужные нам опции: C++ Compiler и MSYS Basic System.
Дальше переходим в раздел Installation и выбираем Apply Chanages.
Далее выбираем для установки выбранный пакетов Apply.
Дожидаемся конца установки пакетов MinGW и нажимаем Close.
После выполнения данных действий инсталлятор можно закрыть.
Перед началом установки дополнительных пакетов, нам нужно добавить директорию MinGW в PATH.
Для этого переходим в свойства системы.
Далее переходим в Дополнительные параметры системы -> Переменные среды -> Создать.
В имя переменной вводим PATH. в Значение переменной вводим путь до папки с mingw, в нашем случае это C:\MinGW\bin.
Теперь нам нужно установить несколько пакетов с помощью MinGW Shell, которые нам понадобятся при сборе библиотеки Tesseract OCR.
Для открытия MinGW Shell переходим в папку C:\MinGW\msys\1.0 и запускаем бинарный файл msys.bat
В открывшуюся консоль вводим следующую команду:
mingw-get install mingw32-automake mingw32-autoconf mingw32-autotools mingw32-libz
В данном случае нам сказали, что у нас уже установлены данные пакеты, ничего страшного, это нормально.
Важный пункт! Нам необходимо примонтировать папку с нашим MinGW в MinSYS.
Для этого выполним следующие действия:
Создайте файл C:\MinGW\msys\1.0\etc\fstab что бы смонтировать каталог C:\MinGW на точку монтирования /mingw:
#Win32_Path Mount_Point c:/MinGW /mingw
Отлично, после создания fstab необходимо перезапустить MinGW Shell, достаточно просто закрыть и заново открыть msys.bat.
Установка библиотеки Leptonica
После настройки MinGW нам необходимо установить библиотеку Leptonica. Tesseract ocr для работы с изображениями использует библиотеку Leptonica, но перед её установкой нам необходимо установить несколько вспомогательных библиотек:
- libJpeg
- libPng
- libTiff
Установка LibJpeg
Для начала создадим каталог в котором будем хранить наши библиотеки, к примеру C:\libs\. В данном каталоге создадим подпапку libjpeg для хранения библиотеки. Теперь когда мы подготовили наше рабочее место, можно скачать LibJpeg с официального сайта и распаковать в нашу папку C:\libs\libjpeg.
После распаковки у меня получился следующий путь до папки libjpeg: C:\libs\libjpeg\jpegsrc.v8c.tar\jpegsrc.v8c\jpeg-8c.
Теперь нам необходимо собрать и установить библиотеку, для этого переходим в MinGW Shell и вводим следующие команды:
cd /C/libs/libjpeg/jpegsrc.v8c.tar/jpegsrc.v8c/jpeg-8c/ ./configure CFLAGS='-O2' CXXFLAGS='-O2' --prefix=/mingw make make install
Отлично на этом этапе установка libJpeg завершена.
Установка libPng
Скачиваем архив с исходными кодами с официального сайта проекта и распаковываем в каталог C:\libs\libpng. Возвращаемся в MinGW Shell, процедура установки данной библиотеки будет идентичная установки libJpeg. После распаковки у меня получился следующий каталог: C:\libs\libpng\libpng-1.5.4.tar\libpng-1.5.4
cd /C/libs/libpng/libpng-1.5.4.tar/libpng-1.5.4/ ./configure CFLAGS='-O2' CXXFLAGS='-O2' --prefix=/mingw make make install
Сборка libTiff
Архив с исходным кодом можно скачать с ftp сервера проекта. Распаковываем архив в C:\libs\libtiff. Сборка данной библиотеки аналогична сборки предыдущих двух библиотек.
После распаковки получился следующий путь: C:\libs\libtiff\tiff-3.9.5.tar\tiff-3.9.5.
cd /C/libs/libtiff/tiff-3.9.5.tar/tiff-3.9.5/ ./configure CFLAGS='-O2' CXXFLAGS='-O2' --prefix=/mingw make make install
Сборка Leptonica
После установки всех дополнительных библиотек мы переходим к сборе Leptonica. Для начала нам нужно скачать Leptonica 1.71, это важно, нам нужна именно версия 1.71. Как показали тесты, если взять версию выше или ниже, сам tesseract ocr не будет собираться. Но в этой версии есть один баг, который нам предстоит исправить. Для начала скачаем архив с исходными файлами с официального сайта. Распакуем скаченный архив в папку C:/libs/leptonica/. После распаковки у меня получился следующий путь: C:\libs\leptonica\leptonica-1.71.tar\leptonica-1.71.
Следующим шагом будет сборка библиотеки, она ни чем не отличается от сборки предыдущих библиотек:
cd /C/libs/leptonica/leptonica-1.71.tar/leptonica-1.71/ ./configure CFLAGS='-O2' CXXFLAGS='-O2' --prefix=/mingw make make install
Отлично. Переходим к сборке Tesseract OCR.
Сборка Tesseract OCR
После успешной сборки Leptonica можно приступать к сборке Tesseract OCR. Скачиваем архив с исходным кодом с официального сайта. Распаковываем скаченный архив с исходным кодом Tesseract OCR в папку C:\libs\tesseract. После распаковки у меня получился следующий путь: C:\libs\tesseract\tesseract-ocr-3.02.02.tar\tesseract-ocr-3.02.02\tesseract-ocr.
Собираем наш Tesseracr OCR.
cd /C/libs/tesseract/tesseract-ocr-3.02.02.tar/tesseract-ocr-3.02.02/tesseract-ocr ./configure CFLAGS='-D__MSW32__ -O2' CXXFLAGS='-D__MSW32__-O2' LIBS='-lws2_32' LIBLEPT_HEADERSDIR='/mingw/include' --prefix=/mingw make make install
Процесс сборки Tesseracrt занимает достаточно много времени, пока можно сходить выпить чаю.
Заголовочные файлы tesseract ocr будут лежать в C:\MinGW\include\tesseract, заголовочные файлы Leptonica в C:\MinGW\include\leptonica, все библиотеки в C:\mingw\lib.
Для успешной работы будущих программ следует скачать и установить SDK Tesseract ocr с официального сайта.
Осталось исправить маленькие баги, который появляется после установки Tesseract OCR.
Для этого переходить в папку с заголовочными файлами Tesseract OCR C:\MinGW\include\tesseract.
Комментируем в файле platform.h повторное объявление типа BLOB. Должно получиться нечто следующее:
/*typedef struct _BLOB { unsigned int cbSize; char *pBlobData; } BLOB, *LPBLOB;*/
Комментируем объявление класса PBLOB в baseapi.h.
Приложение для тестирования Tesseract OCR
После установки tesseract ocr его можно протестировать, напишем простенькое приложение на C++.
#include <tesseract/baseapi.h> #include <leptonica/allheaders.h> #include <string> #include <iostream> int main(int argc, char* argv[]) { tesseract::TessBaseAPI ocr; ocr.Init(NULL, "eng"); if(argc > 1) { PIX* pix = pixRead(argv[1]); ocr.SetImage(pix); std::string result = ocr.GetUTF8Text(); std::cout << "Recognition text: " << result << std::endl; } else std::cout << "Drag and drop image file to program for recognition" << std::endl; return 0; }
Собрать приложение можно из командной строки:
g++ -O2 main.cpp -o ocr.exe -ltesseract -llept -lws2_32
AlexP11223
Дык «установка» или «сборка»? На оф. сайте же есть бинарники, собирать совсем не обязательно.
KostyaKulakov Автор
Действительно, спасибо за замечание. В данном случае имеется ввиду «Сборка».