Pull to refresh

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

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

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

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

www.youtube.com/watch?v=h9kPI7_vhAU
www.youtube.com/watch?v=256bg5_vNvg
www.youtube.com/watch?v=PUhwGTSNGhI

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

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

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

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

Ссылки


www.emgu.com/wiki/index.php/Main_Page
ru.wikipedia.org/wiki/OpenCV
devnuances.com
Tags:
Hubs:
+4
Comments8

Articles