Tesseract-Ocr и OpenCV

В предыдущем посте http://recog.ru/blog/tesseract-ocr/191.html приведен базовый пример работы с Tesseract-Ocr. Модифицируем его таким образом, чтобы работать с OpenCV картинками.
#include <baseapi.h>
#include <allheaders.h>
#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"

int main() {

        tesseract::TessBaseAPI *myOCR = 
                new tesseract::TessBaseAPI();

		printf("Tesseract-ocr version: %s\n",
               myOCR->Version());
        printf("Leptonica version: %s\n",
               getLeptonicaVersion());


        if (myOCR->Init(NULL, "rus")) {
          fprintf(stderr, "Could not initialize tesseract.\n");
          exit(1);
        }
        
		IplImage* Image = cvLoadImage( "test.tif" );		
		char outText[10000];
		myOCR->SetImage( (uchar*)Image->imageData, Image->width, Image->height, Image->nChannels, Image->widthStep );
		myOCR->Recognize(0);		        
		
		lstrcpy( outText, myOCR->GetUTF8Text() );		
        printf( "OCR output:\n\n");
        printf(outText);
        
        myOCR->Clear();
        myOCR->End();        

		cvReleaseImage( &Image );
        return 0;
}



( Читать дальше )

Tesseract-Ocr в Visual Studio - распознаем страницу текста

tesseract-ocr — свободная библиотека для распознавания текста. Для того, чтобы ее подключить необходимо скачать следующие компоненты:
Leptonica — http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip
Последнюю версию tesseract-ocr (на данный момент 3.02 ) — https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.02-win32-lib-include-dirs.zip&can=2&q=
Данные обучения русскому языку — https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.rus.tar.gz
Все можно собирать самостоятельно, скачав исходные коды, но мы этим заниматься не будем.

Создав новый проект, подключаем пути до lib и h файлов. И пишем простенький код.


( Читать дальше )

AdaBoost в OpenCV

AdaBoost – алгоритм машинного обучения. Алгоритмы типа Boosting предназначены для обучения T «слабых» классификаторов. По отдельности эти классификаторы как правило просты. Каждый классификатор Kt (t = {1, 2, … T}) ассоциирован с весом at, который применяется при объединении результатов со всех классификаторов. Входной вектор признаков
X = (x1, x2, …xi, …, XM)
(где i – номер признака) помечается бинарными метками yi = {-1, +1} (для других Boosting алгоритмов может быть диапазон значений).
Распределение Dt(i), которое должно быть инициализировано заранее, сообщает сколько «стоит» неправильная оценка каждого признака. Ключевой особенностью Boostingа является то, что, когда алгоритм прогрессирует, эта «стоимость» будет развиваться так, что обучение «слабых» классификаторов будет сфокусировано на тех признаках, которые ранее в «слабых» классификаторах давали плохие результаты.
Алгоритм:
1. D1(i) = 1/m, для i = 1,...,m.
2. Для t = 1,...,T:
2.1. Найти классификатор Kt минимизирующий Dt(i) весовую ошибку:

где



( Читать дальше )

Распознавание текста с использованием шаблонов

Здесь показано, как распознавать текст с использованием контуров. Однако в случае зашумления и искажения контуров данный метод работает неудовлетворительно. Конечно, известны методы распознавание текста на базе нейронных сетей, но существует ещё более простой метод (в плане обучения), основанный на сравнении с эталоном (шаблоном). В ряде случае сравнение с шаблоном будет достаточно для распознавания текста, например, при распознавании автомобильных номеров.


( Читать дальше )