Детекція людського обличчя засобами openCV

Технологія розпізнавання облич з’явилася порівняно недавно. Перші розробки послідували відразу за хвилею перших досліджень в даній сфері в 60-х роках. Що стосується впровадження системи, то це стало реальністю лише в новому столітті. Джерело
В OpenCV наявні каскади Хаара для розпізнавання об'єктів на зображенні. Перелік існуючих каскадів :
- haarcascade_eye
- haarcascade_eye_tree_eyeglasses
- haarcascade_frontalcatface
- haarcascade_fullbody
- haarcascade_lowerbody
- haarcascade_smile
- та інші.
В даному прикладі розглянемо каскад Хаара haarcascade_frontalface_alt для виявлення обличчя на зображенні. Приклад повного коду наведено тут
Також розглянемо деякі функції OpenCV для нанесення тексту та фігур на зображення. Це пригодиться нам для візуального виділення обличчя. Отже, нанесення тексту на зображення:

                            
/** * * @param img Image. * @param text Text string to be drawn. * @param org Bottom-left corner of the text string in the image. * @param fontFace Font type. One of FONT_HERSHEY_SIMPLEX, * FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX, * FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, * FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, * or FONT_HERSHEY_SCRIPT_COMPLEX, where each of the font ID's can * be combined with FONT_HERSHEY_ITALIC to get the slanted letters. * @param fontScale Font scale factor that is multiplied by the font-specific * base size. * @param color Text color. */ public static void putText(Mat img, String text, Point org, int fontFace, double fontScale, Scalar color){}

Вхідними параметрами є зображення в форматі Mat, текст, координати, шрифт, розмір шрифту та колір.
Приклад затосуванян функції для малювання прямокутника:

    

    Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(250, 0, 0), 2);
                                                
						
У даному випадку вхідними параметрами є зображення, верхня ліва координата прямокутника, нижня права координата прямокутника, колір ліній та їх товщина
Приклад роботи програми наведено нижче



Код прогарми наступний:

CascadeClassifier faceDetector = new CascadeClassifier("C:\\Projects\\CVforStudents\\haarcascade_frontalface_alt.xml"); Mat image = Highgui.imread("C:\\Projects\\CVforStudents\\img\\input.png"); MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); Core.putText(image, "Detected " + faceDetections.toArray().length + " persons" , new Point(image.rows(),300), Core.FONT_HERSHEY_TRIPLEX, .7 ,new Scalar(0,0,255)); // Draw a bounding box around each face. int i = 0; for (Rect rect : faceDetections.toArray()) { Core.putText(image, "Find" , new Point(rect.x-20,rect.y), Core.FONT_HERSHEY_TRIPLEX, .3 ,new Scalar(255,255,255)); Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(250, 0, 0), 2); } String filename = "C:\\Projects\\CVforStudents\\img\\output1.png"; System.out.println(String.format("Writing %s", filename)); Highgui.imwrite(filename, image);