Path: blob/master/samples/java/tutorial_code/objectDetection/cascade_classifier/ObjectDetectionDemo.java
16354 views
import java.util.List;12import org.opencv.core.Core;3import org.opencv.core.Mat;4import org.opencv.core.MatOfRect;5import org.opencv.core.Point;6import org.opencv.core.Rect;7import org.opencv.core.Scalar;8import org.opencv.core.Size;9import org.opencv.highgui.HighGui;10import org.opencv.imgproc.Imgproc;11import org.opencv.objdetect.CascadeClassifier;12import org.opencv.videoio.VideoCapture;1314class ObjectDetection {15public void detectAndDisplay(Mat frame, CascadeClassifier faceCascade, CascadeClassifier eyesCascade) {16Mat frameGray = new Mat();17Imgproc.cvtColor(frame, frameGray, Imgproc.COLOR_BGR2GRAY);18Imgproc.equalizeHist(frameGray, frameGray);1920// -- Detect faces21MatOfRect faces = new MatOfRect();22faceCascade.detectMultiScale(frameGray, faces);2324List<Rect> listOfFaces = faces.toList();25for (Rect face : listOfFaces) {26Point center = new Point(face.x + face.width / 2, face.y + face.height / 2);27Imgproc.ellipse(frame, center, new Size(face.width / 2, face.height / 2), 0, 0, 360,28new Scalar(255, 0, 255));2930Mat faceROI = frameGray.submat(face);3132// -- In each face, detect eyes33MatOfRect eyes = new MatOfRect();34eyesCascade.detectMultiScale(faceROI, eyes);3536List<Rect> listOfEyes = eyes.toList();37for (Rect eye : listOfEyes) {38Point eyeCenter = new Point(face.x + eye.x + eye.width / 2, face.y + eye.y + eye.height / 2);39int radius = (int) Math.round((eye.width + eye.height) * 0.25);40Imgproc.circle(frame, eyeCenter, radius, new Scalar(255, 0, 0), 4);41}42}4344//-- Show what you got45HighGui.imshow("Capture - Face detection", frame );46}4748public void run(String[] args) {49String filenameFaceCascade = args.length > 2 ? args[0] : "../../data/haarcascades/haarcascade_frontalface_alt.xml";50String filenameEyesCascade = args.length > 2 ? args[1] : "../../data/haarcascades/haarcascade_eye_tree_eyeglasses.xml";51int cameraDevice = args.length > 2 ? Integer.parseInt(args[2]) : 0;5253CascadeClassifier faceCascade = new CascadeClassifier();54CascadeClassifier eyesCascade = new CascadeClassifier();5556if (!faceCascade.load(filenameFaceCascade)) {57System.err.println("--(!)Error loading face cascade: " + filenameFaceCascade);58System.exit(0);59}60if (!eyesCascade.load(filenameEyesCascade)) {61System.err.println("--(!)Error loading eyes cascade: " + filenameEyesCascade);62System.exit(0);63}6465VideoCapture capture = new VideoCapture(cameraDevice);66if (!capture.isOpened()) {67System.err.println("--(!)Error opening video capture");68System.exit(0);69}7071Mat frame = new Mat();72while (capture.read(frame)) {73if (frame.empty()) {74System.err.println("--(!) No captured frame -- Break!");75break;76}7778//-- 3. Apply the classifier to the frame79detectAndDisplay(frame, faceCascade, eyesCascade);8081if (HighGui.waitKey(10) == 27) {82break;// escape83}84}8586System.exit(0);87}88}8990public class ObjectDetectionDemo {91public static void main(String[] args) {92// Load the native OpenCV library93System.loadLibrary(Core.NATIVE_LIBRARY_NAME);9495new ObjectDetection().run(args);96}97}9899100