- PVSM.RU - https://www.pvsm.ru -
Хочу немного рассказать про технологию 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/
Нажмите здесь для печати.