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

Обучение каскадного классификатора

Работа с каскадным классификатором включает два этапа: обучение и детектирование. Детектирование вы можете посмотреть, к примеру, на обнаружении лиц. А здесь описано как обучать классификатор.

В OpenCV есть два приложения для тренировки каскадов: opencv_haartraining и opencv_traincascade (новая версия написанная на C++). Но главное различие между этими двумя приложениями является то, что opencv_traincascade поддерживает как Хаара[Paul Viola, Michael Jones. Rapid Object Detection using a Boosted Cascade of Simple Features. Conference on Computer Vision and Pattern Recognition (CVPR), 2001, pp. 511-518.], так и LBP [Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li. Learning Multi-scale Block Local Binary Patterns for Face Recognition. International Conference on Biometrics (ICB), 2007, pp. 828-837.] особенности. LBP с точки зрения, как обучения, так и детектирования в несколько раз быстрее Хаара. Что касается достоверности распознавания, то все зависит от обучающей выборки. Можно обучить LBP так, что оно будет приближаться к Хаара особенностям.
opencv_traincascade и opencv_haartraining хранят обученные классификаторы в различных форматах. Новый интерфейс обнаружения (CascadeClassifier класса в objdetect модуле) поддерживают оба формата. opencv_traincascade может сохранять обучение каскада в старом формате. Но opencv_traincascade и opencv_haartraining не может загрузить классификатор в другом формате для дальнейшего обучения после перерыва.
opencv_traincascade приложение может использовать TBB для многопоточности. Чтобы использовать его в режиме многоядерных процессоров OpenCV должно быть откомпилировано с TBB.
Другие утилиты, используемые для обучения:
1. opencv_createsamples используется для подготовки учебного набора положительных и тестовых образцов в формате, который поддерживается как opencv_haartraining так и opencv_traincascade приложениями. На выходе получается файл с расширением *.vec, это двоичный формат, который содержит изображение.
2. opencv_performance может быть использовано для оценки качества классификаторов, но только для обученных opencv_haartraining. Она использует коллекцию размеченных изображений, запускает классификатор и сообщает так называемую производительность, т.е. количество найденных объектов, количество пропущенных объектов, количество ложных срабатываний и другую информацию.


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

Онлайн распознавание баркодов

с использованием библиотеки Zxing от Google. Поддержка кодов: QR code, UPC-A and UPC-E, EAN-8 and EAN-13, Code 39, Code 93, Code 128, ITF, Codabar, RSS-14, RSS Expanded.

http://intbusoft.com/online/barcode/

Особенности программирования систем распознавания образов реального времени

Системы распознавания образов (СРО) на настоящий момент находят все больше применения в промышленности, торговле, бизнесе и повседневной жизни. Огромное число компаний связывают свою деятельность с разработкой СРО реального времени (РВ) для персональных компьютеров, серверов, мобильных платформ и онлайн-сервисов. Большое количество отечественных и зарубежных ученых разрабатывают новые алгоритмы распознавания РВ, применяя при этом современные языки и среды программирования, зачастую не обращая внимания на тот факт, что система РВ – это прежде всего предсказуемая система. Поэтому в данной работе предлагается подход к программированию СРО РВ на языке C/C++ на платформе Windows XP/7.
В настоящее время при разработке сложных СРО РВ часто используют программную библиотеку OpenCV (opencv.willowgarage.com), которая может функционировать на различных платформах и операционных системах. Множество задач связано с обработкой видеопотоков, например, с web-камеры. В этом случае программный код библиотеки OpenCV выглядит следующим образом:
#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"
int main(int argc, char** argv){
	CvCapture* capture = cvCaptureFromCAM(0);
	cvNamedWindow( "Camera", 1 );
	IplImage* frame=0;
	do{
		frame = cvQueryFrame(capture );
		…<Какая-либо функция распознавания>
		cvShowImage( "Camera", frame);
		if (cvWaitKey( 20 ) == 32 ) break;
	}while ( 1 );
	cvReleaseCapture(&capture);
	return 0;
}

Однако здесь возникают вопросы: Как контролировать время выполнения функции распознавания? Что делать, если модуль распознавания образов ненадежен – а это часто бывает из-за высокой сложности алгоритмов распознавания. В этом случае можно использовать подход к выбору структуры СРО РВ, описанный в работе [Кручинин, А.Ю. Особенности разработки программных систем распознавания образов реального времени / А.Ю. Кручинин // Автоматизация в промышленности. – 2011. — №7. – С. 53-56.].


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