OpenCV - Nhận diện khuôn mặt trong ảnh
Các VideoCapture lớp của org.opencv.videoiogói chứa các lớp và phương thức để quay video bằng camera hệ thống. Chúng ta hãy đi từng bước và tìm hiểu cách thực hiện.
Bước 1: Tải thư viện gốc OpenCV
Trong khi viết mã Java bằng thư viện OpenCV, bước đầu tiên bạn cần làm là tải thư viện gốc của OpenCV bằng cách sử dụng loadLibrary(). Tải thư viện gốc OpenCV như hình dưới đây.
// Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Bước 2: Khởi tạo lớp CascadeClassifier
Các CascadeClassifier lớp của gói org.opencv.objdetectđược sử dụng để tải tệp phân loại. Khởi tạo lớp này bằng cách chuyểnxml tập tin lbpcascade_frontalface.xml như hình bên dưới.
// Instantiating the CascadeClassifier
String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
Bước 3: Phát hiện khuôn mặt
Bạn có thể phát hiện các khuôn mặt trong ảnh bằng phương pháp detectMultiScale() của lớp có tên CascadeClassifier. Phương thức này chấp nhận một đối tượng của lớpMat giữ hình ảnh đầu vào và một đối tượng của lớp MatOfRect để lưu trữ các khuôn mặt được phát hiện.
// Detecting the face in the snap
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
Thí dụ
Chương trình sau đây trình bày cách phát hiện khuôn mặt trong ảnh.
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
public class FaceDetectionImage {
public static void main (String[] args) {
// Loading the OpenCV core library
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// Reading the Image from the file and storing it in to a Matrix object
String file ="E:/OpenCV/chap23/facedetection_input.jpg";
Mat src = Imgcodecs.imread(file);
// Instantiating the CascadeClassifier
String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
// Detecting the face in the snap
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
System.out.println(String.format("Detected %s faces",
faceDetections.toArray().length));
// Drawing boxes for (Rect rect : faceDetections.toArray()) { Imgproc.rectangle( src, // where to draw the box new Point(rect.x, rect.y), // bottom left new Point(rect.x + rect.width, rect.y + rect.height), // top right new Scalar(0, 0, 255), 3 // RGB colour );
}
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap23/facedetect_output1.jpg", src);
System.out.println("Image Processed");
}
}
Giả sử rằng sau đây là hình ảnh đầu vào facedetection_input.jpg được chỉ định trong chương trình trên.
Đầu ra
Khi thực hiện chương trình, bạn sẽ nhận được kết quả sau:
Detected 3 faces
Image Processed
Nếu bạn mở đường dẫn được chỉ định, bạn có thể quan sát hình ảnh đầu ra như sau: