123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import org.opencv.core.*;
- import org.opencv.face.*;
- import org.opencv.imgcodecs.*;
- import org.opencv.imgproc.*;
- import org.opencv.objdetect.*;
- import java.util.*;
- public class Facemark {
- static {
- System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
- }
- public static void main(String[] args) {
- if (args.length < 3) {
- System.out.println("use: java Facemark [image file] [cascade file] [model file]");
- return;
- }
- // read the image
- Mat img = Imgcodecs.imread(args[0]);
- // setup face detection
- CascadeClassifier cascade = new CascadeClassifier(args[1]);
- MatOfRect faces = new MatOfRect();
- // detect faces
- cascade.detectMultiScale(img, faces);
- // setup landmarks detector
- Facemark fm = Face.createFacemarkKazemi();
- fm.loadModel(args[2]);
- // fit landmarks for each found face
- ArrayList<MatOfPoint2f> landmarks = new ArrayList<MatOfPoint2f>();
- fm.fit(img, faces, landmarks);
- // draw them
- for (int i=0; i<landmarks.size(); i++) {
- MatOfPoint2f lm = landmarks.get(i);
- for (int j=0; j<lm.rows(); j++) {
- double [] dp = lm.get(j,0);
- Point p = new Point(dp[0], dp[1]);
- Imgproc.circle(img,p,2,new Scalar(222),1);
- }
- }
- // save result
- Imgcodecs.imwrite("landmarks.jpg",img);
- }
- }
|