-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCaffeeDemo.java
More file actions
64 lines (48 loc) · 2.13 KB
/
Copy pathCaffeeDemo.java
File metadata and controls
64 lines (48 loc) · 2.13 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package dnn;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.dnn.Dnn;
import org.opencv.dnn.Net;
import org.opencv.imgcodecs.Imgcodecs;
import origami.Origami;
import java.util.Arrays;
import java.util.List;
public class CaffeeDemo {
public static void main(String[] args) throws Exception {
Origami.init();
String sourceImageFile = "data/caffee/jeunehomme.jpg";
ageDemo(sourceImageFile);
genderDemo(sourceImageFile);
ageDemo("data/caffee/teenager2.jpg");
genderDemo("data/caffee/teenager2.jpg");
}
private static void ageDemo(String sourceImageFile) {
String tfnetFile = "data/caffee/age_net.caffemodel";
String protoFil = "data/caffee/age.prototxt";
List<String> labels = Arrays.asList("(0, 2)", "(4, 6)", "(8, 12)", "(15, 20)", "(25, 32)", "(38, 43)", "(48, 53)", "(60, 100)");
runCaffeeNetwork(sourceImageFile, tfnetFile, protoFil, labels);
}
private static void genderDemo(String sourceImageFile) {
String tfnetFile = "data/caffee/gender_net.caffemodel";
String protoFil = "data/caffee/gender.prototxt";
List<String> labels = Arrays.asList("Male", "Female");
runCaffeeNetwork(sourceImageFile, tfnetFile, protoFil, labels);
}
private static void runCaffeeNetwork(String sourceImageFile, String tfnetFile, String protoFil,
List<String> labels) {
Net net = Dnn.readNetFromCaffe(protoFil, tfnetFile);
// List<String> layernames = net.getLayerNames();
Mat image = Imgcodecs.imread(sourceImageFile);
// Mat inputBlob = Dnn.blobFromImage(image, 1.0, new Size(256, 256), new
// Scalar(0), true, true);
Mat inputBlob = Dnn.blobFromImage(image, 1.0, new Size(256, 256));
net.setInput(inputBlob);
net.setPreferableBackend(Dnn.DNN_BACKEND_OPENCV);
Mat result = net.forward();
result = result.reshape(1, 1);
System.out.println(result.dump());
Core.MinMaxLocResult minmax = Core.minMaxLoc(result);
System.out.println(labels.get((int) minmax.maxLoc.x));
}
}