- PVSM.RU - https://www.pvsm.ru -

Начало работы с OpenCV и его применение в C#

Хочу немного рассказать про технологию OpenCV и её применение на языке программирования C#.

OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии BSD.

На эту библиотеку я натолкнулся буквально недавно. На сайте toster.ru [1] я задал вопрос про необычные темы для дипломных работ и в одном из ответов получил ссылки на результат работы с этой библиотекой. Вот некоторые из них:

www.youtube.com/watch?v=h9kPI7_vhAU [2]
www.youtube.com/watch?v=256bg5_vNvg [3]
www.youtube.com/watch?v=PUhwGTSNGhI [4]

Для начала работы надо будет скачать нужные нам файлы с сайта www.emgu.com/wiki/index.php/Main_Page [5].

Emgu CV является кросс-платформенным .Net дополнением для библиотеки OpenCV для обработки изображений. Разработано для работы с .NET совместимыми языками, такими как C #, VB, VC ++, IronPython и т.д., может быть использовано в Visual Studio, Xamarin, работает с Windows, Linux, Mac OS X, IOS, Android и Windows Phone.

После того, как мы скачали и установили актуальную версию, можно приступать к работе. В данном примере мы будем находить и распознавать лицо и глаза человека.

Для этого нам понадобятся уже готовые xml-файлы, в которых содержится вся необходимая нам информация. Как было сказано, OpenCV является Open Source проектом, так что при желании можно найти множество уже готовых решений.

Для работы подключим соответствующие библиотеки:

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.Cvb;

Для начала нам потребуется создать экземпляр класса Capture:

Capture capture = new Capture();

Этот объект будет отвечать за перехват видео потока.

Для создания объекта, который распознает наше лицо или глаза, мы будем использовать замечательный класс HaarCascade. Классификатор (а именно каскад форсированных классификаторов, работающих с Хаара-подобными функциями) обучается с несколькими сотнями образцов видов конкретного объекта (например, лицо или автомобиль), называет положительные примеры, которые масштабируются в тот же размер (скажем, 20х20), и отрицательные примеры — произвольные изображения одного и того же размера.

То есть при создании экземпляра класса HaarCascade в его конструкторе мы указываем ссылку на xml файл, который содержит нужные нам данные.

//for face
HaarCascade faceCascade = new HaarCascade("haarcascade_frontalface_alt.xml");
//for eye
HaarCascade eyeCascade = new HaarCascade("haarcascade_eye.xml");

Для того, что бы работать дальше с перехваченным кадром, надо использовать метод QueryFrame().

Image<Bgr, Byte> image = capture.QueryFrame();

Мы получаем наш кадр, которые нам передает наше устройство (веб-камера). Далее найденное нами изображение переводим в серый цвет.

Image<Gray, Byte> grayImage = image.Convert<Gray, Byte>(); 

Теперь надо найти атрибуты, которые принадлежат нашему лицу и глазам.

var Face = grayImage.DetectHaarCascade(faceCascade)[0];                             
foreach (var face in Face)
{
//Если таковы найдены, то рисуем вокруг них круг, с заданным цветом и толщиной линии.
image.Draw(face.rect, new Bgr(255, 255, 255), 10); 
} 
//Аналогично и для глаз
var Eye = grayImage.DetectHaarCascade(eyeCascade)[0]; 
foreach (var eye in Eye)
{
image.Draw(eye.rect, new Bgr(0, 0, 255), 3);          
}

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

imageBoxEyeAndFaceDetector.Image = image;

Теперь мы можем задать работу нашего когда в нужном нам месте, например, при нажатии кнопки.

Application.Idle += Method;

Ссылка для скачивания xml файлов: ifolder.com.ua/z3fihkcet19n.html [6]

Так же советую просмотреть это видео для общего понимания работы машинного зрения www.youtube.com/watch?v=TyEfJyJA7gQ [7].

Удачи вам в вашей работе.

Ссылки

www.emgu.com/wiki/index.php/Main_Page [5]
ru.wikipedia.org/wiki/OpenCV [8]
devnuances.com [9]

Автор: olololosh

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/c-2/92478

Ссылки в тексте:

[1] toster.ru: https://toster.ru/

[2] www.youtube.com/watch?v=h9kPI7_vhAU: https://www.youtube.com/watch?v=h9kPI7_vhAU

[3] www.youtube.com/watch?v=256bg5_vNvg: https://www.youtube.com/watch?v=256bg5_vNvg

[4] www.youtube.com/watch?v=PUhwGTSNGhI: https://www.youtube.com/watch?v=PUhwGTSNGhI

[5] www.emgu.com/wiki/index.php/Main_Page: http://www.emgu.com/wiki/index.php/Main_Page

[6] ifolder.com.ua/z3fihkcet19n.html: http://ifolder.com.ua/z3fihkcet19n.html

[7] www.youtube.com/watch?v=TyEfJyJA7gQ: https://www.youtube.com/watch?v=TyEfJyJA7gQ

[8] ru.wikipedia.org/wiki/OpenCV: https://ru.wikipedia.org/wiki/OpenCV

[9] devnuances.com: http://devnuances.com/

[10] Источник: http://habrahabr.ru/post/260741/