Распознавание автомобильных номеров (iANPR SDK)

Сейчас, пока идет разработка и тестирование SDK для распознавания автомобильных номеров iANPR, решил поделиться с некоторыми предварительными результатами. Первоначальная версия SDK рассчитана на стандартные российские номера. Библиотека работает на базе OpenCV. Тестируется версия под Windows, но потом возможна поддержка и других операционных систем.



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

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) весовую ошибку:

где



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

Распознавание одномерных сигналов с использованием OpenCV

Добавлен материал в библиотеку: Распознавание одномерных сигналов с использованием OpenCV
Содержание:
1. Понятие матриц в OpenCV
2. Обработка одномерных сигналов
3. Преобразование Фурье
4. Сравнение сигналов с шаблоном
Заключение

Детектирование автомобильных номеров в OpenCV на основе контурного анализа

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



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

OMarks и OpenCV

Библиотека OMarks предназначена для распознавания оптических маркеров. В версии 1.0 поддерживаются маркеры на основе баркодов Small Aztec. Вместе с библиотекой идет пример на OpenCV, с помощью которого было сделано следующее видео:



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

Получение скелета с помощью Kinect SDK

С помощью Kinect SDK получение скелета человека является простой задачей. Ниже на рисунке то, что планируется получить. Для простейшей демонстрации помимо скелета будет определяться подняты ли вверх руки. В Kinect SDK уже есть пример получения скелета, который вы можете посмотреть.



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

Green Screen с помощью Kinect SDK

С помощью Kinect SDK легко можно сделать эффект Green Screen – т.е. выделение человека от фона, а вместо фона выводить любую картинку. Я не буду заниматься приведение картинок примеров – в конце-концов если вы используете Kinect, то можете запустить пример Green Screen и посмотреть, что и как. Здесь мы рассмотрим модифицированное приложение для упрощения объяснений, поскольку не каждый разбирается в Win32 API.
Исходный код примера приведен ниже:
#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"
#include "NuiApi.h"


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

Получение карты глубины с использованием Kinect SDK

Первым приложением, которое хочется сделать при помощи Kinect — это то, для чего в основном сенсор и предназначен. Получение карты глубины. Для этого напишем следующий пример (предполагается, что Kinect SDK установлен и естественно есть сам сенсор). Пример построен на основе DepthBasics-D2D, только выброшено все лишнее.

#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"
#include "NuiApi.h"

static const int        cDepthWidth  = 640;
static const int        cDepthHeight = 480;
static const int        cBytesPerPixel = 1;

INuiSensor*             m_pNuiSensor = NULL;
HANDLE                  m_pDepthStreamHandle = NULL;
HANDLE                  m_hNextDepthFrameEvent = INVALID_HANDLE_VALUE;
BYTE*  m_depthRGBX;

HRESULT CreateFirstConnected();
void GetDepth();

int main()
{	
	m_depthRGBX = new BYTE[cDepthWidth*cDepthHeight*cBytesPerPixel];

	// Коннектимся к кинекту
    CreateFirstConnected();



( Читать дальше )
  • 0
  • 11 января 2013, 18:49
  • vidikon
  • 2