1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.demos.facestuff;
31
32 import java.io.IOException;
33 import java.net.MalformedURLException;
34 import java.util.List;
35
36 import org.openimaj.image.DisplayUtilities;
37 import org.openimaj.image.MBFImage;
38 import org.openimaj.image.colour.RGBColour;
39 import org.openimaj.image.processing.face.alignment.FaceAligner;
40 import org.openimaj.image.processing.face.alignment.RotateScaleAligner;
41 import org.openimaj.image.processing.face.detection.keypoints.FKEFaceDetector;
42 import org.openimaj.image.processing.face.detection.keypoints.FacialKeypoint;
43 import org.openimaj.image.processing.face.detection.keypoints.KEDetectedFace;
44 import org.openimaj.math.geometry.transforms.TransformUtilities;
45 import org.openimaj.video.VideoDisplay;
46 import org.openimaj.video.VideoDisplayListener;
47 import org.openimaj.video.capture.VideoCapture;
48
49 public class LiveAlignment {
50 public static void main(String[] args) throws MalformedURLException, IOException {
51 final FKEFaceDetector detector = new FKEFaceDetector();
52
53 final FaceAligner<KEDetectedFace> aligner = new RotateScaleAligner(200);
54
55 final VideoCapture vc = new VideoCapture(640, 480);
56 VideoDisplay.createOffscreenVideoDisplay(vc).addVideoListener(new VideoDisplayListener<MBFImage>() {
57
58 @Override
59 public void beforeUpdate(MBFImage frame) {
60 if (frame == null)
61 return;
62 final List<KEDetectedFace> faces = detector.detectFaces(frame.flatten());
63
64 if (faces.size() <= 0)
65 return;
66
67 final KEDetectedFace face = faces.get(0);
68 DisplayUtilities.displayName(aligner.align(face), "aligned");
69
70 for (final FacialKeypoint kp : face.getKeypoints()) {
71 frame.drawPoint(
72 kp.position.transform(TransformUtilities.translateMatrix(face.getBounds().x,
73 face.getBounds().y)), RGBColour.RED, 3);
74 }
75
76 DisplayUtilities.displayName(frame, "tracked");
77 }
78
79 @Override
80 public void afterUpdate(VideoDisplay<MBFImage> display) {
81 }
82 });
83 }
84 }