jeevana commited on
Commit
30555e7
1 Parent(s): 63bc0c4

group14 1st commit

Browse files
Dockerfile ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11
2
+
3
+ COPY requirements.txt requirements.txt
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ bzip2 \
7
+ g++ \
8
+ git \
9
+ graphviz \
10
+ libgl1-mesa-glx \
11
+ libhdf5-dev \
12
+ openmpi-bin \
13
+ wget \
14
+ python3-tk && \
15
+ rm -rf /var/lib/apt/lists/*
16
+
17
+ RUN pip install --upgrade pip
18
+
19
+ RUN pip install --no-cache-dir -r requirements.txt
20
+
21
+ RUN useradd -m -u 1000 myuser
22
+
23
+ USER myuser
24
+
25
+ COPY --chown=myuser app app
26
+
27
+ EXPOSE 8001
28
+
29
+ CMD ["python", "app/main.py"]
README.md CHANGED
@@ -5,6 +5,7 @@ colorFrom: pink
5
  colorTo: pink
6
  sdk: docker
7
  pinned: false
 
8
  ---
9
 
10
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
5
  colorTo: pink
6
  sdk: docker
7
  pinned: false
8
+ app_port: 8001
9
  ---
10
 
11
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app/Hackathon_setup/__init__.py ADDED
File without changes
app/Hackathon_setup/exp_recognition.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ from matplotlib import pyplot as plt
4
+ import torch
5
+ # In the below line,remove '.' while working on your local system.However Make sure that '.' is present before face_recognition_model while uploading to the server, Do not remove it.
6
+ from .exp_recognition_model import *
7
+ from PIL import Image
8
+ import base64
9
+ import io
10
+ import os
11
+ ## Add more imports if required
12
+
13
+ #############################################################################################################################
14
+ # Caution: Don't change any of the filenames, function names and definitions #
15
+ # Always use the current_path + file_name for refering any files, without it we cannot access files on the server #
16
+ #############################################################################################################################
17
+
18
+ # Current_path stores absolute path of the file from where it runs.
19
+ current_path = os.path.dirname(os.path.abspath(__file__))
20
+
21
+
22
+ #1) The below function is used to detect faces in the given image.
23
+ #2) It returns only one image which has maximum area out of all the detected faces in the photo.
24
+ #3) If no face is detected,then it returns zero(0).
25
+
26
+ def detected_face(image):
27
+ eye_haar = current_path + '/haarcascade_eye.xml'
28
+ face_haar = current_path + '/haarcascade_frontalface_default.xml'
29
+ face_cascade = cv2.CascadeClassifier(face_haar)
30
+ eye_cascade = cv2.CascadeClassifier(eye_haar)
31
+ gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
32
+ faces = face_cascade.detectMultiScale(gray, 1.3, 5)
33
+ face_areas=[]
34
+ images = []
35
+ required_image=0
36
+ for i, (x,y,w,h) in enumerate(faces):
37
+ face_cropped = gray[y:y+h, x:x+w]
38
+ face_areas.append(w*h)
39
+ images.append(face_cropped)
40
+ required_image = images[np.argmax(face_areas)]
41
+ required_image = Image.fromarray(required_image)
42
+ return required_image
43
+
44
+
45
+ #1) Images captured from mobile is passed as parameter to the below function in the API call, It returns the Expression detected by your network.
46
+ #2) The image is passed to the function in base64 encoding, Code for decoding the image is provided within the function.
47
+ #3) Define an object to your network here in the function and load the weight from the trained network, set it in evaluation mode.
48
+ #4) Perform necessary transformations to the input(detected face using the above function), this should return the Expression in string form ex: "Anger"
49
+ #5) For loading your model use the current_path+'your model file name', anyhow detailed example is given in comments to the function
50
+ ##Caution: Don't change the definition or function name; for loading the model use the current_path for path example is given in comments to the function
51
+ def get_expression(img):
52
+ device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
53
+
54
+ ##########################################################################################
55
+ ##Example for loading a model using weight state dictionary: ##
56
+ ## face_det_net = facExpRec() #Example Network ##
57
+ ## model = torch.load(current_path + '/exp_recognition_net.t7', map_location=device) ##
58
+ ## face_det_net.load_state_dict(model['net_dict']) ##
59
+ ## ##
60
+ ##current_path + '/<network_definition>' is path of the saved model if present in ##
61
+ ##the same path as this file, we recommend to put in the same directory ##
62
+ ##########################################################################################
63
+ ##########################################################################################
64
+
65
+ face = detected_face(img)
66
+ if face==0:
67
+ face = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))
68
+
69
+ # YOUR CODE HERE, return expression using your model
70
+
71
+ return "YET TO BE CODED"
app/Hackathon_setup/exp_recognition_model.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torchvision
3
+ import torch.nn as nn
4
+ from torchvision import transforms
5
+ ## Add more imports if required
6
+
7
+ ####################################################################################################################
8
+ # Define your model and transform and all necessary helper functions here #
9
+ # They will be imported to the exp_recognition.py file #
10
+ ####################################################################################################################
11
+
12
+ # Definition of classes as dictionary
13
+ classes = {0: 'ANGER', 1: 'DISGUST', 2: 'FEAR', 3: 'HAPPINESS', 4: 'NEUTRAL', 5: 'SADNESS', 6: 'SURPRISE'}
14
+
15
+ # Example Network
16
+ class facExpRec(torch.nn.Module):
17
+ def __init__(self):
18
+ pass # remove 'pass' once you have written your code
19
+ #YOUR CODE HERE
20
+
21
+ def forward(self, x):
22
+ pass # remove 'pass' once you have written your code
23
+ #YOUR CODE HERE
24
+
25
+ # Sample Helper function
26
+ def rgb2gray(image):
27
+ return image.convert('L')
28
+
29
+ # Sample Transformation function
30
+ #YOUR CODE HERE for changing the Transformation values.
31
+ trnscm = transforms.Compose([rgb2gray, transforms.Resize((48,48)), transforms.ToTensor()])
app/Hackathon_setup/face_recognition.py.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ from matplotlib import pyplot as plt
4
+ import torch
5
+
6
+ # In the below line,remove '.' while working on your local system. However Make sure that '.' is present before face_recognition_model while uploading to #the server, Do not remove it.
7
+ from .face_recognition_model import *
8
+ from PIL import Image
9
+ import base64
10
+ import io
11
+ import os
12
+ import joblib
13
+ import pickle
14
+
15
+ # Add more imports if required
16
+
17
+
18
+ ###########################################################################################################################################
19
+ # Caution: Don't change any of the filenames, function names and definitions #
20
+ # Always use the current_path + file_name for refering any files, without it we cannot access files on the server #
21
+ ###########################################################################################################################################
22
+
23
+ # Current_path stores absolute path of the file from where it runs.
24
+ current_path = os.path.dirname(os.path.abspath(__file__))
25
+
26
+ # 1) The below function is used to detect faces in the given image.
27
+ # 2) It returns only one image which has maximum area out of all the detected faces in the photo.
28
+ # 3) If no face is detected,then it returns zero(0).
29
+
30
+
31
+ def detected_face(image):
32
+ eye_haar = current_path + "/haarcascade_eye.xml"
33
+ face_haar = current_path + "/haarcascade_frontalface_default.xml"
34
+ face_cascade = cv2.CascadeClassifier(face_haar)
35
+ eye_cascade = cv2.CascadeClassifier(eye_haar)
36
+ gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
37
+ faces = face_cascade.detectMultiScale(gray, 1.3, 5)
38
+ face_areas = []
39
+ images = []
40
+ required_image = 0
41
+ for i, (x, y, w, h) in enumerate(faces):
42
+ face_cropped = gray[y : y + h, x : x + w]
43
+ face_areas.append(w * h)
44
+ images.append(face_cropped)
45
+ required_image = images[np.argmax(face_areas)]
46
+ required_image = Image.fromarray(required_image)
47
+ return required_image
48
+
49
+
50
+ # 1) Images captured from mobile is passed as parameter to the below function in the API call. It returns the similarity measure between given images.
51
+ # 2) The image is passed to the function in base64 encoding, Code for decoding the image is provided within the function.
52
+ # 3) Define an object to your siamese network here in the function and load the weight from the trained network, set it in evaluation mode.
53
+ # 4) Get the features for both the faces from the network and return the similarity measure, Euclidean,cosine etc can be it. But choose the Relevant measure.
54
+ # 5) For loading your model use the current_path+'your model file name', anyhow detailed example is given in comments to the function
55
+ # Caution: Don't change the definition or function name; for loading the model use the current_path for path example is given in comments to the function
56
+ def get_similarity(img1, img2):
57
+ device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
58
+
59
+ det_img1 = detected_face(img1)
60
+ det_img2 = detected_face(img2)
61
+ if det_img1 == 0 or det_img2 == 0:
62
+ det_img1 = Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY))
63
+ det_img2 = Image.fromarray(cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY))
64
+ face1 = trnscm(det_img1).unsqueeze(0)
65
+ face2 = trnscm(det_img2).unsqueeze(0)
66
+ ##########################################################################################
67
+ ##Example for loading a model using weight state dictionary: ##
68
+ ## feature_net = light_cnn() #Example Network ##
69
+ ## model = torch.load(current_path + '/siamese_model.t7', map_location=device) ##
70
+ ## feature_net.load_state_dict(model['net_dict']) ##
71
+ ## ##
72
+ ##current_path + '/<network_definition>' is path of the saved model if present in ##
73
+ ##the same path as this file, we recommend to put in the same directory ##
74
+ ##########################################################################################
75
+ ##########################################################################################
76
+
77
+ # YOUR CODE HERE, load the model
78
+ print(torch.__version__)
79
+ #torch.load('./siamese_model.t7',map_location='cpu')
80
+
81
+ file = open(current_path + "/siamese_model.t7")
82
+ file.seek(0, os.SEEK_END)
83
+ print("Size of file is :", file.tell(), "bytes")
84
+ feature_net = Siamese() # ##
85
+ model = torch.load(current_path + "/siamese_model.t7", map_location="cpu") ##
86
+ #model = torch.load(current_path + "/siamese_model.t7")
87
+ feature_net.load_state_dict(model["net_dict"]) ##
88
+
89
+ ##
90
+
91
+ # YOUR CODE HERE, return similarity measure using your model
92
+ features_1 = feature_net(face1)[1]
93
+ features_2 = feature_net(face2)[1]
94
+
95
+ # Use cosine similarity to measure the similarity between given two images
96
+ dissimilarity = torch.nn.functional.cosine_similarity(features_1, features_2).item()
97
+
98
+ return dissimilarity
99
+
100
+
101
+ # 1) Image captured from mobile is passed as parameter to this function in the API call, It returns the face class in the string form ex: "Person1"
102
+ # 2) The image is passed to the function in base64 encoding, Code to decode the image provided within the function
103
+ # 3) Define an object to your network here in the function and load the weight from the trained network, set it in evaluation mode
104
+ # 4) Perform necessary transformations to the input(detected face using the above function).
105
+ # 5) Along with the siamese, you need the classifier as well, which is to be finetuned with the faces that you are training
106
+ ##Caution: Don't change the definition or function name; for loading the model use the current_path for path example is given in comments to the function
107
+ def get_face_class(img1):
108
+ device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
109
+
110
+ det_img1 = detected_face(img1)
111
+ if det_img1 == 0:
112
+ det_img1 = Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY))
113
+ ##YOUR CODE HERE, return face class here
114
+ ##Hint: you need a classifier finetuned for your classes, it takes o/p of siamese as i/p to it
115
+ ##Better Hint: Siamese experiment is covered in one of the labs
116
+ return "YET TO BE CODED"
117
+
118
+
119
+
120
+
app/Hackathon_setup/face_recognition_model.py.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import math
2
+ import torch
3
+ import torchvision
4
+ import torch.nn as nn
5
+ import torch.nn.functional as F
6
+ from torchvision import transforms
7
+ # Add more imports if required
8
+
9
+ # Sample Transformation function
10
+ # YOUR CODE HERE for changing the Transformation values.
11
+ trnscm = transforms.Compose([transforms.Resize((100,100)), transforms.ToTensor()])
12
+
13
+ ##Example Network
14
+ class Siamese(torch.nn.Module):
15
+ def __init__(self):
16
+ super(Siamese, self).__init__()
17
+ #YOUR CODE HERE
18
+ self.cnn1 = nn.Sequential(
19
+ nn.ReflectionPad2d(1), #Pads the input tensor using the reflection of the input boundary, it similar to the padding.
20
+ nn.Conv2d(1, 4, kernel_size=3),
21
+ nn.ReLU(inplace=True),
22
+ nn.BatchNorm2d(4),
23
+
24
+ nn.ReflectionPad2d(1),
25
+ nn.Conv2d(4, 8, kernel_size=3),
26
+ nn.ReLU(inplace=True),
27
+ nn.BatchNorm2d(8),
28
+
29
+
30
+ nn.ReflectionPad2d(1),
31
+ nn.Conv2d(8, 8, kernel_size=3),
32
+ nn.ReLU(inplace=True),
33
+ nn.BatchNorm2d(8),
34
+ )
35
+
36
+ self.fc1 = nn.Sequential(
37
+ nn.Linear(8*100*100, 500),
38
+ nn.ReLU(inplace=True),
39
+
40
+ nn.Linear(500, 500),
41
+ nn.ReLU(inplace=True),
42
+
43
+ nn.Linear(500, 5))
44
+
45
+ # forward_once is for one image. This can be used while classifying the face images
46
+ def forward_once(self, x):
47
+ output = self.cnn1(x)
48
+ output = output.view(output.size()[0], -1)
49
+ output = self.fc1(output)
50
+ return output
51
+
52
+ def forward(self, input1, input2):
53
+ output1 = self.forward_once(input1)
54
+ output2 = self.forward_once(input2)
55
+ return output1, output2
56
+
57
+ # def forward(self, x):
58
+ # pass # remove 'pass' once you have written your code
59
+ #YOUR CODE HERE
60
+
61
+ ##########################################################################################################
62
+ ## Sample classification network (Specify if you are using a pytorch classifier during the training) ##
63
+ ## classifier = nn.Sequential(nn.Linear(64, 64), nn.BatchNorm1d(64), nn.ReLU(), nn.Linear...) ##
64
+ ##########################################################################################################
65
+
66
+ # YOUR CODE HERE for pytorch classifier
67
+ classes = ['person1','person2','person3','person4','person5','person6','person7']
68
+
69
+ num_of_classes = len(classes)
70
+
71
+ classifier = nn.Sequential(nn.Linear(256, 64), nn.BatchNorm1d(64), nn.ReLU(),
72
+ nn.Linear(64, 32), nn.BatchNorm1d(32), nn.ReLU(),
73
+ nn.Linear(32, num_of_classes))
74
+
75
+ #classifier = classifier.to(device) -error thrown
76
+ print(classifier)
77
+
78
+ # Definition of classes as dictionary
79
+ #classes = ['person1','person2','person3','person4','person5','person6','person7']
80
+
app/Hackathon_setup/haarcascade_eye.xml ADDED
The diff for this file is too large to render. See raw diff
 
app/Hackathon_setup/haarcascade_frontalface_default.xml ADDED
The diff for this file is too large to render. See raw diff
 
app/Hackathon_setup/lbpcascade_frontalface.xml ADDED
@@ -0,0 +1,1505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ number of positive samples 3000
4
+ number of negative samples 1500
5
+ -->
6
+ <opencv_storage>
7
+ <cascade type_id="opencv-cascade-classifier">
8
+ <stageType>BOOST</stageType>
9
+ <featureType>LBP</featureType>
10
+ <height>24</height>
11
+ <width>24</width>
12
+ <stageParams>
13
+ <boostType>GAB</boostType>
14
+ <minHitRate>0.9950000047683716</minHitRate>
15
+ <maxFalseAlarm>0.5000000000000000</maxFalseAlarm>
16
+ <weightTrimRate>0.9500000000000000</weightTrimRate>
17
+ <maxDepth>1</maxDepth>
18
+ <maxWeakCount>100</maxWeakCount></stageParams>
19
+ <featureParams>
20
+ <maxCatCount>256</maxCatCount></featureParams>
21
+ <stageNum>20</stageNum>
22
+ <stages>
23
+ <!-- stage 0 -->
24
+ <_>
25
+ <maxWeakCount>3</maxWeakCount>
26
+ <stageThreshold>-0.7520892024040222</stageThreshold>
27
+ <weakClassifiers>
28
+ <!-- tree 0 -->
29
+ <_>
30
+ <internalNodes>
31
+ 0 -1 46 -67130709 -21569 -1426120013 -1275125205 -21585
32
+ -16385 587145899 -24005</internalNodes>
33
+ <leafValues>
34
+ -0.6543210148811340 0.8888888955116272</leafValues></_>
35
+ <!-- tree 1 -->
36
+ <_>
37
+ <internalNodes>
38
+ 0 -1 13 -163512766 -769593758 -10027009 -262145 -514457854
39
+ -193593353 -524289 -1</internalNodes>
40
+ <leafValues>
41
+ -0.7739216089248657 0.7278633713722229</leafValues></_>
42
+ <!-- tree 2 -->
43
+ <_>
44
+ <internalNodes>
45
+ 0 -1 2 -363936790 -893203669 -1337948010 -136907894
46
+ 1088782736 -134217726 -741544961 -1590337</internalNodes>
47
+ <leafValues>
48
+ -0.7068563103675842 0.6761534214019775</leafValues></_></weakClassifiers></_>
49
+ <!-- stage 1 -->
50
+ <_>
51
+ <maxWeakCount>4</maxWeakCount>
52
+ <stageThreshold>-0.4872078299522400</stageThreshold>
53
+ <weakClassifiers>
54
+ <!-- tree 0 -->
55
+ <_>
56
+ <internalNodes>
57
+ 0 -1 84 2147483647 1946124287 -536870913 2147450879
58
+ 738132490 1061101567 243204619 2147446655</internalNodes>
59
+ <leafValues>
60
+ -0.8083735704421997 0.7685696482658386</leafValues></_>
61
+ <!-- tree 1 -->
62
+ <_>
63
+ <internalNodes>
64
+ 0 -1 21 2147483647 263176079 1879048191 254749487 1879048191
65
+ -134252545 -268435457 801111999</internalNodes>
66
+ <leafValues>
67
+ -0.7698410153388977 0.6592915654182434</leafValues></_>
68
+ <!-- tree 2 -->
69
+ <_>
70
+ <internalNodes>
71
+ 0 -1 106 -98110272 1610939566 -285484400 -850010381
72
+ -189334372 -1671954433 -571026695 -262145</internalNodes>
73
+ <leafValues>
74
+ -0.7506558895111084 0.5444605946540833</leafValues></_>
75
+ <!-- tree 3 -->
76
+ <_>
77
+ <internalNodes>
78
+ 0 -1 48 -798690576 -131075 1095771153 -237144073 -65569 -1
79
+ -216727745 -69206049</internalNodes>
80
+ <leafValues>
81
+ -0.7775990366935730 0.5465461611747742</leafValues></_></weakClassifiers></_>
82
+ <!-- stage 2 -->
83
+ <_>
84
+ <maxWeakCount>4</maxWeakCount>
85
+ <stageThreshold>-1.1592328548431396</stageThreshold>
86
+ <weakClassifiers>
87
+ <!-- tree 0 -->
88
+ <_>
89
+ <internalNodes>
90
+ 0 -1 47 -21585 -20549 -100818262 -738254174 -20561 -36865
91
+ -151016790 -134238549</internalNodes>
92
+ <leafValues>
93
+ -0.5601882934570313 0.7743113040924072</leafValues></_>
94
+ <!-- tree 1 -->
95
+ <_>
96
+ <internalNodes>
97
+ 0 -1 12 -286003217 183435247 -268994614 -421330945
98
+ -402686081 1090387966 -286785545 -402653185</internalNodes>
99
+ <leafValues>
100
+ -0.6124526262283325 0.6978127956390381</leafValues></_>
101
+ <!-- tree 2 -->
102
+ <_>
103
+ <internalNodes>
104
+ 0 -1 26 -50347012 970882927 -50463492 -1253377 -134218251
105
+ -50364513 -33619992 -172490753</internalNodes>
106
+ <leafValues>
107
+ -0.6114496588706970 0.6537628173828125</leafValues></_>
108
+ <!-- tree 3 -->
109
+ <_>
110
+ <internalNodes>
111
+ 0 -1 8 -273 -135266321 1877977738 -2088243418 -134217987
112
+ 2146926575 -18910642 1095231247</internalNodes>
113
+ <leafValues>
114
+ -0.6854077577590942 0.5403239130973816</leafValues></_></weakClassifiers></_>
115
+ <!-- stage 3 -->
116
+ <_>
117
+ <maxWeakCount>5</maxWeakCount>
118
+ <stageThreshold>-0.7562355995178223</stageThreshold>
119
+ <weakClassifiers>
120
+ <!-- tree 0 -->
121
+ <_>
122
+ <internalNodes>
123
+ 0 -1 96 -1273 1870659519 -20971602 -67633153 -134250731
124
+ 2004875127 -250 -150995969</internalNodes>
125
+ <leafValues>
126
+ -0.4051094949245453 0.7584033608436585</leafValues></_>
127
+ <!-- tree 1 -->
128
+ <_>
129
+ <internalNodes>
130
+ 0 -1 33 -868162224 -76810262 -4262145 -257 1465211989
131
+ -268959873 -2656269 -524289</internalNodes>
132
+ <leafValues>
133
+ -0.7388162612915039 0.5340843200683594</leafValues></_>
134
+ <!-- tree 2 -->
135
+ <_>
136
+ <internalNodes>
137
+ 0 -1 57 -12817 -49 -541103378 -152950 -38993 -20481 -1153876
138
+ -72478976</internalNodes>
139
+ <leafValues>
140
+ -0.6582943797111511 0.5339496731758118</leafValues></_>
141
+ <!-- tree 3 -->
142
+ <_>
143
+ <internalNodes>
144
+ 0 -1 125 -269484161 -452984961 -319816180 -1594032130 -2111
145
+ -990117891 -488975296 -520947741</internalNodes>
146
+ <leafValues>
147
+ -0.5981323719024658 0.5323504805564880</leafValues></_>
148
+ <!-- tree 4 -->
149
+ <_>
150
+ <internalNodes>
151
+ 0 -1 53 557787431 670265215 -1342193665 -1075892225
152
+ 1998528318 1056964607 -33570977 -1</internalNodes>
153
+ <leafValues>
154
+ -0.6498787999153137 0.4913350641727448</leafValues></_></weakClassifiers></_>
155
+ <!-- stage 4 -->
156
+ <_>
157
+ <maxWeakCount>5</maxWeakCount>
158
+ <stageThreshold>-0.8085358142852783</stageThreshold>
159
+ <weakClassifiers>
160
+ <!-- tree 0 -->
161
+ <_>
162
+ <internalNodes>
163
+ 0 -1 60 -536873708 880195381 -16842788 -20971521 -176687276
164
+ -168427659 -16777260 -33554626</internalNodes>
165
+ <leafValues>
166
+ -0.5278195738792419 0.6946372389793396</leafValues></_>
167
+ <!-- tree 1 -->
168
+ <_>
169
+ <internalNodes>
170
+ 0 -1 7 -1 -62981529 -1090591130 805330978 -8388827 -41945787
171
+ -39577 -531118985</internalNodes>
172
+ <leafValues>
173
+ -0.5206505060195923 0.6329920291900635</leafValues></_>
174
+ <!-- tree 2 -->
175
+ <_>
176
+ <internalNodes>
177
+ 0 -1 98 -725287348 1347747543 -852489 -16809993 1489881036
178
+ -167903241 -1 -1</internalNodes>
179
+ <leafValues>
180
+ -0.7516061067581177 0.4232024252414703</leafValues></_>
181
+ <!-- tree 3 -->
182
+ <_>
183
+ <internalNodes>
184
+ 0 -1 44 -32777 1006582562 -65 935312171 -8388609 -1078198273
185
+ -1 733886267</internalNodes>
186
+ <leafValues>
187
+ -0.7639313936233521 0.4123568832874298</leafValues></_>
188
+ <!-- tree 4 -->
189
+ <_>
190
+ <internalNodes>
191
+ 0 -1 24 -85474705 2138828511 -1036436754 817625855
192
+ 1123369029 -58796809 -1013468481 -194513409</internalNodes>
193
+ <leafValues>
194
+ -0.5123769044876099 0.5791834592819214</leafValues></_></weakClassifiers></_>
195
+ <!-- stage 5 -->
196
+ <_>
197
+ <maxWeakCount>5</maxWeakCount>
198
+ <stageThreshold>-0.5549971461296082</stageThreshold>
199
+ <weakClassifiers>
200
+ <!-- tree 0 -->
201
+ <_>
202
+ <internalNodes>
203
+ 0 -1 42 -17409 -20481 -268457797 -134239493 -17473 -1 -21829
204
+ -21846</internalNodes>
205
+ <leafValues>
206
+ -0.3763174116611481 0.7298233509063721</leafValues></_>
207
+ <!-- tree 1 -->
208
+ <_>
209
+ <internalNodes>
210
+ 0 -1 6 -805310737 -2098262358 -269504725 682502698
211
+ 2147483519 1740574719 -1090519233 -268472385</internalNodes>
212
+ <leafValues>
213
+ -0.5352765917778015 0.5659480094909668</leafValues></_>
214
+ <!-- tree 2 -->
215
+ <_>
216
+ <internalNodes>
217
+ 0 -1 61 -67109678 -6145 -8 -87884584 -20481 -1073762305
218
+ -50856216 -16849696</internalNodes>
219
+ <leafValues>
220
+ -0.5678374171257019 0.4961479902267456</leafValues></_>
221
+ <!-- tree 3 -->
222
+ <_>
223
+ <internalNodes>
224
+ 0 -1 123 -138428633 1002418167 -1359008245 -1908670465
225
+ -1346685918 910098423 -1359010520 -1346371657</internalNodes>
226
+ <leafValues>
227
+ -0.5706262588500977 0.4572288393974304</leafValues></_>
228
+ <!-- tree 4 -->
229
+ <_>
230
+ <internalNodes>
231
+ 0 -1 9 -89138513 -4196353 1256531674 -1330665426 1216308261
232
+ -36190633 33498198 -151796633</internalNodes>
233
+ <leafValues>
234
+ -0.5344601869583130 0.4672054052352905</leafValues></_></weakClassifiers></_>
235
+ <!-- stage 6 -->
236
+ <_>
237
+ <maxWeakCount>5</maxWeakCount>
238
+ <stageThreshold>-0.8776460289955139</stageThreshold>
239
+ <weakClassifiers>
240
+ <!-- tree 0 -->
241
+ <_>
242
+ <internalNodes>
243
+ 0 -1 105 1073769576 206601725 -34013449 -33554433 -789514004
244
+ -101384321 -690225153 -264193</internalNodes>
245
+ <leafValues>
246
+ -0.7700348496437073 0.5943940877914429</leafValues></_>
247
+ <!-- tree 1 -->
248
+ <_>
249
+ <internalNodes>
250
+ 0 -1 30 -1432340997 -823623681 -49153 -34291724 -269484035
251
+ -1342767105 -1078198273 -1277955</internalNodes>
252
+ <leafValues>
253
+ -0.5043668746948242 0.6151274442672730</leafValues></_>
254
+ <!-- tree 2 -->
255
+ <_>
256
+ <internalNodes>
257
+ 0 -1 35 -1067385040 -195758209 -436748425 -134217731
258
+ -50855988 -129 -1 -1</internalNodes>
259
+ <leafValues>
260
+ -0.6808040738105774 0.4667325913906097</leafValues></_>
261
+ <!-- tree 3 -->
262
+ <_>
263
+ <internalNodes>
264
+ 0 -1 119 832534325 -34111555 -26050561 -423659521 -268468364
265
+ 2105014143 -2114244 -17367185</internalNodes>
266
+ <leafValues>
267
+ -0.4927591383457184 0.5401885509490967</leafValues></_>
268
+ <!-- tree 4 -->
269
+ <_>
270
+ <internalNodes>
271
+ 0 -1 82 -1089439888 -1080524865 2143059967 -1114121
272
+ -1140949004 -3 -2361356 -739516</internalNodes>
273
+ <leafValues>
274
+ -0.6445107460021973 0.4227822124958038</leafValues></_></weakClassifiers></_>
275
+ <!-- stage 7 -->
276
+ <_>
277
+ <maxWeakCount>6</maxWeakCount>
278
+ <stageThreshold>-1.1139287948608398</stageThreshold>
279
+ <weakClassifiers>
280
+ <!-- tree 0 -->
281
+ <_>
282
+ <internalNodes>
283
+ 0 -1 52 -1074071553 -1074003969 -1 -1280135430 -5324817 -1
284
+ -335548482 582134442</internalNodes>
285
+ <leafValues>
286
+ -0.5307556986808777 0.6258179545402527</leafValues></_>
287
+ <!-- tree 1 -->
288
+ <_>
289
+ <internalNodes>
290
+ 0 -1 99 -706937396 -705364068 -540016724 -570495027
291
+ -570630659 -587857963 -33628164 -35848193</internalNodes>
292
+ <leafValues>
293
+ -0.5227634310722351 0.5049746036529541</leafValues></_>
294
+ <!-- tree 2 -->
295
+ <_>
296
+ <internalNodes>
297
+ 0 -1 18 -2035630093 42119158 -268503053 -1671444 261017599
298
+ 1325432815 1954394111 -805306449</internalNodes>
299
+ <leafValues>
300
+ -0.4983572661876679 0.5106441378593445</leafValues></_>
301
+ <!-- tree 3 -->
302
+ <_>
303
+ <internalNodes>
304
+ 0 -1 111 -282529488 -1558073088 1426018736 -170526448
305
+ -546832487 -5113037 -34243375 -570427929</internalNodes>
306
+ <leafValues>
307
+ -0.4990860521793366 0.5060507059097290</leafValues></_>
308
+ <!-- tree 4 -->
309
+ <_>
310
+ <internalNodes>
311
+ 0 -1 92 1016332500 -606301707 915094269 -1080086049
312
+ -1837027144 -1361600280 2147318747 1067975613</internalNodes>
313
+ <leafValues>
314
+ -0.5695009231567383 0.4460467398166657</leafValues></_>
315
+ <!-- tree 5 -->
316
+ <_>
317
+ <internalNodes>
318
+ 0 -1 51 -656420166 -15413034 -141599534 -603435836
319
+ 1505950458 -787556946 -79823438 -1326199134</internalNodes>
320
+ <leafValues>
321
+ -0.6590405106544495 0.3616424500942230</leafValues></_></weakClassifiers></_>
322
+ <!-- stage 8 -->
323
+ <_>
324
+ <maxWeakCount>7</maxWeakCount>
325
+ <stageThreshold>-0.8243625760078430</stageThreshold>
326
+ <weakClassifiers>
327
+ <!-- tree 0 -->
328
+ <_>
329
+ <internalNodes>
330
+ 0 -1 28 -901591776 -201916417 -262 -67371009 -143312112
331
+ -524289 -41943178 -1</internalNodes>
332
+ <leafValues>
333
+ -0.4972776770591736 0.6027074456214905</leafValues></_>
334
+ <!-- tree 1 -->
335
+ <_>
336
+ <internalNodes>
337
+ 0 -1 112 -4507851 -411340929 -268437513 -67502145 -17350859
338
+ -32901 -71344315 -29377</internalNodes>
339
+ <leafValues>
340
+ -0.4383158981800079 0.5966237187385559</leafValues></_>
341
+ <!-- tree 2 -->
342
+ <_>
343
+ <internalNodes>
344
+ 0 -1 69 -75894785 -117379438 -239063587 -12538500 1485072126
345
+ 2076233213 2123118847 801906927</internalNodes>
346
+ <leafValues>
347
+ -0.6386105418205261 0.3977999985218048</leafValues></_>
348
+ <!-- tree 3 -->
349
+ <_>
350
+ <internalNodes>
351
+ 0 -1 19 -823480413 786628589 -16876049 -1364262914 242165211
352
+ 1315930109 -696268833 -455082829</internalNodes>
353
+ <leafValues>
354
+ -0.5512794256210327 0.4282079637050629</leafValues></_>
355
+ <!-- tree 4 -->
356
+ <_>
357
+ <internalNodes>
358
+ 0 -1 73 -521411968 6746762 -1396236286 -2038436114
359
+ -185612509 57669627 -143132877 -1041235973</internalNodes>
360
+ <leafValues>
361
+ -0.6418755054473877 0.3549866080284119</leafValues></_>
362
+ <!-- tree 5 -->
363
+ <_>
364
+ <internalNodes>
365
+ 0 -1 126 -478153869 1076028979 -1645895615 1365298272
366
+ -557859073 -339771473 1442574528 -1058802061</internalNodes>
367
+ <leafValues>
368
+ -0.4841901361942291 0.4668019413948059</leafValues></_>
369
+ <!-- tree 6 -->
370
+ <_>
371
+ <internalNodes>
372
+ 0 -1 45 -246350404 -1650402048 -1610612745 -788400696
373
+ 1467604861 -2787397 1476263935 -4481349</internalNodes>
374
+ <leafValues>
375
+ -0.5855734348297119 0.3879135847091675</leafValues></_></weakClassifiers></_>
376
+ <!-- stage 9 -->
377
+ <_>
378
+ <maxWeakCount>7</maxWeakCount>
379
+ <stageThreshold>-1.2237116098403931</stageThreshold>
380
+ <weakClassifiers>
381
+ <!-- tree 0 -->
382
+ <_>
383
+ <internalNodes>
384
+ 0 -1 114 -24819 1572863935 -16809993 -67108865 2146778388
385
+ 1433927541 -268608444 -34865205</internalNodes>
386
+ <leafValues>
387
+ -0.2518476545810700 0.7088654041290283</leafValues></_>
388
+ <!-- tree 1 -->
389
+ <_>
390
+ <internalNodes>
391
+ 0 -1 97 -1841359 -134271049 -32769 -5767369 -1116675 -2185
392
+ -8231 -33603327</internalNodes>
393
+ <leafValues>
394
+ -0.4303432404994965 0.5283288359642029</leafValues></_>
395
+ <!-- tree 2 -->
396
+ <_>
397
+ <internalNodes>
398
+ 0 -1 25 -1359507589 -1360593090 -1073778729 -269553812
399
+ -809512977 1744707583 -41959433 -134758978</internalNodes>
400
+ <leafValues>
401
+ -0.4259553551673889 0.5440809130668640</leafValues></_>
402
+ <!-- tree 3 -->
403
+ <_>
404
+ <internalNodes>
405
+ 0 -1 34 729753407 -134270989 -1140907329 -235200777
406
+ 658456383 2147467263 -1140900929 -16385</internalNodes>
407
+ <leafValues>
408
+ -0.5605589151382446 0.4220733344554901</leafValues></_>
409
+ <!-- tree 4 -->
410
+ <_>
411
+ <internalNodes>
412
+ 0 -1 134 -310380553 -420675595 -193005472 -353568129
413
+ 1205338070 -990380036 887604324 -420544526</internalNodes>
414
+ <leafValues>
415
+ -0.5192656517028809 0.4399855434894562</leafValues></_>
416
+ <!-- tree 5 -->
417
+ <_>
418
+ <internalNodes>
419
+ 0 -1 16 -1427119361 1978920959 -287119734 -487068946
420
+ 114759245 -540578051 -707510259 -671660453</internalNodes>
421
+ <leafValues>
422
+ -0.5013077259063721 0.4570254683494568</leafValues></_>
423
+ <!-- tree 6 -->
424
+ <_>
425
+ <internalNodes>
426
+ 0 -1 74 -738463762 -889949281 -328301948 -121832450
427
+ -1142658284 -1863576559 2146417353 -263185</internalNodes>
428
+ <leafValues>
429
+ -0.4631414115428925 0.4790246188640595</leafValues></_></weakClassifiers></_>
430
+ <!-- stage 10 -->
431
+ <_>
432
+ <maxWeakCount>7</maxWeakCount>
433
+ <stageThreshold>-0.5544230937957764</stageThreshold>
434
+ <weakClassifiers>
435
+ <!-- tree 0 -->
436
+ <_>
437
+ <internalNodes>
438
+ 0 -1 113 -76228780 -65538 -1 -67174401 -148007 -33 -221796
439
+ -272842924</internalNodes>
440
+ <leafValues>
441
+ -0.3949716091156006 0.6082032322883606</leafValues></_>
442
+ <!-- tree 1 -->
443
+ <_>
444
+ <internalNodes>
445
+ 0 -1 110 369147696 -1625232112 2138570036 -1189900 790708019
446
+ -1212613127 799948719 -4456483</internalNodes>
447
+ <leafValues>
448
+ -0.4855885505676270 0.4785369932651520</leafValues></_>
449
+ <!-- tree 2 -->
450
+ <_>
451
+ <internalNodes>
452
+ 0 -1 37 784215839 -290015241 536832799 -402984963
453
+ -1342414991 -838864897 -176769 -268456129</internalNodes>
454
+ <leafValues>
455
+ -0.4620285332202911 0.4989669024944305</leafValues></_>
456
+ <!-- tree 3 -->
457
+ <_>
458
+ <internalNodes>
459
+ 0 -1 41 -486418688 -171915327 -340294900 -21938 -519766032
460
+ -772751172 -73096060 -585322623</internalNodes>
461
+ <leafValues>
462
+ -0.6420643329620361 0.3624351918697357</leafValues></_>
463
+ <!-- tree 4 -->
464
+ <_>
465
+ <internalNodes>
466
+ 0 -1 117 -33554953 -475332625 -1423463824 -2077230421
467
+ -4849669 -2080505925 -219032928 -1071915349</internalNodes>
468
+ <leafValues>
469
+ -0.4820112884044647 0.4632140696048737</leafValues></_>
470
+ <!-- tree 5 -->
471
+ <_>
472
+ <internalNodes>
473
+ 0 -1 65 -834130468 -134217476 -1349314083 -1073803559
474
+ -619913764 -1449131844 -1386890321 -1979118423</internalNodes>
475
+ <leafValues>
476
+ -0.4465552568435669 0.5061788558959961</leafValues></_>
477
+ <!-- tree 6 -->
478
+ <_>
479
+ <internalNodes>
480
+ 0 -1 56 -285249779 1912569855 -16530 -1731022870 -1161904146
481
+ -1342177297 -268439634 -1464078708</internalNodes>
482
+ <leafValues>
483
+ -0.5190586447715759 0.4441480338573456</leafValues></_></weakClassifiers></_>
484
+ <!-- stage 11 -->
485
+ <_>
486
+ <maxWeakCount>7</maxWeakCount>
487
+ <stageThreshold>-0.7161560654640198</stageThreshold>
488
+ <weakClassifiers>
489
+ <!-- tree 0 -->
490
+ <_>
491
+ <internalNodes>
492
+ 0 -1 20 1246232575 1078001186 -10027057 60102 -277348353
493
+ -43646987 -1210581153 1195769615</internalNodes>
494
+ <leafValues>
495
+ -0.4323809444904327 0.5663768053054810</leafValues></_>
496
+ <!-- tree 1 -->
497
+ <_>
498
+ <internalNodes>
499
+ 0 -1 15 -778583572 -612921106 -578775890 -4036478
500
+ -1946580497 -1164766570 -1986687009 -12103599</internalNodes>
501
+ <leafValues>
502
+ -0.4588732719421387 0.4547033011913300</leafValues></_>
503
+ <!-- tree 2 -->
504
+ <_>
505
+ <internalNodes>
506
+ 0 -1 129 -1073759445 2013231743 -1363169553 -1082459201
507
+ -1414286549 868185983 -1356133589 -1077936257</internalNodes>
508
+ <leafValues>
509
+ -0.5218553543090820 0.4111092388629913</leafValues></_>
510
+ <!-- tree 3 -->
511
+ <_>
512
+ <internalNodes>
513
+ 0 -1 102 -84148365 -2093417722 -1204850272 564290299
514
+ -67121221 -1342177350 -1309195902 -776734797</internalNodes>
515
+ <leafValues>
516
+ -0.4920000731945038 0.4326725304126740</leafValues></_>
517
+ <!-- tree 4 -->
518
+ <_>
519
+ <internalNodes>
520
+ 0 -1 88 -25694458 67104495 -290216278 -168563037 2083877442
521
+ 1702788383 -144191964 -234882162</internalNodes>
522
+ <leafValues>
523
+ -0.4494568109512329 0.4448510706424713</leafValues></_>
524
+ <!-- tree 5 -->
525
+ <_>
526
+ <internalNodes>
527
+ 0 -1 59 -857980836 904682741 -1612267521 232279415
528
+ 1550862252 -574825221 -357380888 -4579409</internalNodes>
529
+ <leafValues>
530
+ -0.5180826783180237 0.3888972699642181</leafValues></_>
531
+ <!-- tree 6 -->
532
+ <_>
533
+ <internalNodes>
534
+ 0 -1 27 -98549440 -137838400 494928389 -246013630 939541351
535
+ -1196072350 -620603549 2137216273</internalNodes>
536
+ <leafValues>
537
+ -0.6081240773200989 0.3333222270011902</leafValues></_></weakClassifiers></_>
538
+ <!-- stage 12 -->
539
+ <_>
540
+ <maxWeakCount>8</maxWeakCount>
541
+ <stageThreshold>-0.6743940711021423</stageThreshold>
542
+ <weakClassifiers>
543
+ <!-- tree 0 -->
544
+ <_>
545
+ <internalNodes>
546
+ 0 -1 29 -150995201 2071191945 -1302151626 536934335
547
+ -1059008937 914128709 1147328110 -268369925</internalNodes>
548
+ <leafValues>
549
+ -0.1790193915367127 0.6605972051620483</leafValues></_>
550
+ <!-- tree 1 -->
551
+ <_>
552
+ <internalNodes>
553
+ 0 -1 128 -134509479 1610575703 -1342177289 1861484541
554
+ -1107833788 1577058173 -333558568 -136319041</internalNodes>
555
+ <leafValues>
556
+ -0.3681024610996246 0.5139749646186829</leafValues></_>
557
+ <!-- tree 2 -->
558
+ <_>
559
+ <internalNodes>
560
+ 0 -1 70 -1 1060154476 -1090984524 -630918524 -539492875
561
+ 779616255 -839568424 -321</internalNodes>
562
+ <leafValues>
563
+ -0.3217232525348663 0.6171553134918213</leafValues></_>
564
+ <!-- tree 3 -->
565
+ <_>
566
+ <internalNodes>
567
+ 0 -1 4 -269562385 -285029906 -791084350 -17923776 235286671
568
+ 1275504943 1344390399 -966276889</internalNodes>
569
+ <leafValues>
570
+ -0.4373284578323364 0.4358185231685638</leafValues></_>
571
+ <!-- tree 4 -->
572
+ <_>
573
+ <internalNodes>
574
+ 0 -1 76 17825984 -747628419 595427229 1474759671 575672208
575
+ -1684005538 872217086 -1155858277</internalNodes>
576
+ <leafValues>
577
+ -0.4404836893081665 0.4601220190525055</leafValues></_>
578
+ <!-- tree 5 -->
579
+ <_>
580
+ <internalNodes>
581
+ 0 -1 124 -336593039 1873735591 -822231622 -355795238
582
+ -470820869 -1997537409 -1057132384 -1015285005</internalNodes>
583
+ <leafValues>
584
+ -0.4294152259826660 0.4452161788940430</leafValues></_>
585
+ <!-- tree 6 -->
586
+ <_>
587
+ <internalNodes>
588
+ 0 -1 54 -834212130 -593694721 -322142257 -364892500
589
+ -951029539 -302125121 -1615106053 -79249765</internalNodes>
590
+ <leafValues>
591
+ -0.3973052501678467 0.4854526817798615</leafValues></_>
592
+ <!-- tree 7 -->
593
+ <_>
594
+ <internalNodes>
595
+ 0 -1 95 1342144479 2147431935 -33554561 -47873 -855685912 -1
596
+ 1988052447 536827383</internalNodes>
597
+ <leafValues>
598
+ -0.7054683566093445 0.2697997391223908</leafValues></_></weakClassifiers></_>
599
+ <!-- stage 13 -->
600
+ <_>
601
+ <maxWeakCount>9</maxWeakCount>
602
+ <stageThreshold>-1.2042298316955566</stageThreshold>
603
+ <weakClassifiers>
604
+ <!-- tree 0 -->
605
+ <_>
606
+ <internalNodes>
607
+ 0 -1 39 1431368960 -183437936 -537002499 -137497097
608
+ 1560590321 -84611081 -2097193 -513</internalNodes>
609
+ <leafValues>
610
+ -0.5905947685241699 0.5101932883262634</leafValues></_>
611
+ <!-- tree 1 -->
612
+ <_>
613
+ <internalNodes>
614
+ 0 -1 120 -1645259691 2105491231 2130706431 1458995007
615
+ -8567536 -42483883 -33780003 -21004417</internalNodes>
616
+ <leafValues>
617
+ -0.4449204802513123 0.4490709304809570</leafValues></_>
618
+ <!-- tree 2 -->
619
+ <_>
620
+ <internalNodes>
621
+ 0 -1 89 -612381022 -505806938 -362027516 -452985106
622
+ 275854917 1920431639 -12600561 -134221825</internalNodes>
623
+ <leafValues>
624
+ -0.4693818688392639 0.4061094820499420</leafValues></_>
625
+ <!-- tree 3 -->
626
+ <_>
627
+ <internalNodes>
628
+ 0 -1 14 -805573153 -161 -554172679 -530519488 -16779441
629
+ 2000682871 -33604275 -150997129</internalNodes>
630
+ <leafValues>
631
+ -0.3600351214408875 0.5056326985359192</leafValues></_>
632
+ <!-- tree 4 -->
633
+ <_>
634
+ <internalNodes>
635
+ 0 -1 67 6192 435166195 1467449341 2046691505 -1608493775
636
+ -4755729 -1083162625 -71365637</internalNodes>
637
+ <leafValues>
638
+ -0.4459891915321350 0.4132415652275085</leafValues></_>
639
+ <!-- tree 5 -->
640
+ <_>
641
+ <internalNodes>
642
+ 0 -1 86 -41689215 -3281034 1853357967 -420712635 -415924289
643
+ -270209208 -1088293113 -825311232</internalNodes>
644
+ <leafValues>
645
+ -0.4466069042682648 0.4135067760944367</leafValues></_>
646
+ <!-- tree 6 -->
647
+ <_>
648
+ <internalNodes>
649
+ 0 -1 80 -117391116 -42203396 2080374461 -188709 -542008165
650
+ -356831940 -1091125345 -1073796897</internalNodes>
651
+ <leafValues>
652
+ -0.3394956290721893 0.5658645033836365</leafValues></_>
653
+ <!-- tree 7 -->
654
+ <_>
655
+ <internalNodes>
656
+ 0 -1 75 -276830049 1378714472 -1342181951 757272098
657
+ 1073740607 -282199241 -415761549 170896931</internalNodes>
658
+ <leafValues>
659
+ -0.5346512198448181 0.3584479391574860</leafValues></_>
660
+ <!-- tree 8 -->
661
+ <_>
662
+ <internalNodes>
663
+ 0 -1 55 -796075825 -123166849 2113667055 -217530421
664
+ -1107432194 -16385 -806359809 -391188771</internalNodes>
665
+ <leafValues>
666
+ -0.4379335641860962 0.4123645126819611</leafValues></_></weakClassifiers></_>
667
+ <!-- stage 14 -->
668
+ <_>
669
+ <maxWeakCount>10</maxWeakCount>
670
+ <stageThreshold>-0.8402050137519836</stageThreshold>
671
+ <weakClassifiers>
672
+ <!-- tree 0 -->
673
+ <_>
674
+ <internalNodes>
675
+ 0 -1 71 -890246622 15525883 -487690486 47116238 -1212319899
676
+ -1291847681 -68159890 -469829921</internalNodes>
677
+ <leafValues>
678
+ -0.2670986354351044 0.6014143228530884</leafValues></_>
679
+ <!-- tree 1 -->
680
+ <_>
681
+ <internalNodes>
682
+ 0 -1 31 -1361180685 -1898008841 -1090588811 -285410071
683
+ -1074016265 -840443905 2147221487 -262145</internalNodes>
684
+ <leafValues>
685
+ -0.4149844348430634 0.4670888185501099</leafValues></_>
686
+ <!-- tree 2 -->
687
+ <_>
688
+ <internalNodes>
689
+ 0 -1 40 1426190596 1899364271 2142731795 -142607505
690
+ -508232452 -21563393 -41960001 -65</internalNodes>
691
+ <leafValues>
692
+ -0.4985891580581665 0.3719584941864014</leafValues></_>
693
+ <!-- tree 3 -->
694
+ <_>
695
+ <internalNodes>
696
+ 0 -1 109 -201337965 10543906 -236498096 -746195597
697
+ 1974565825 -15204415 921907633 -190058309</internalNodes>
698
+ <leafValues>
699
+ -0.4568729996681213 0.3965812027454376</leafValues></_>
700
+ <!-- tree 4 -->
701
+ <_>
702
+ <internalNodes>
703
+ 0 -1 130 -595026732 -656401928 -268649235 -571490699
704
+ -440600392 -133131 -358810952 -2004088646</internalNodes>
705
+ <leafValues>
706
+ -0.4770836830139160 0.3862601518630981</leafValues></_>
707
+ <!-- tree 5 -->
708
+ <_>
709
+ <internalNodes>
710
+ 0 -1 66 941674740 -1107882114 1332789109 -67691015
711
+ -1360463693 -1556612430 -609108546 733546933</internalNodes>
712
+ <leafValues>
713
+ -0.4877715110778809 0.3778986334800720</leafValues></_>
714
+ <!-- tree 6 -->
715
+ <_>
716
+ <internalNodes>
717
+ 0 -1 49 -17114945 -240061474 1552871558 -82775604 -932393844
718
+ -1308544889 -532635478 -99042357</internalNodes>
719
+ <leafValues>
720
+ -0.3721654713153839 0.4994400143623352</leafValues></_>
721
+ <!-- tree 7 -->
722
+ <_>
723
+ <internalNodes>
724
+ 0 -1 133 -655906006 1405502603 -939205164 1884929228
725
+ -498859222 559417357 -1928559445 -286264385</internalNodes>
726
+ <leafValues>
727
+ -0.3934195041656494 0.4769641458988190</leafValues></_>
728
+ <!-- tree 8 -->
729
+ <_>
730
+ <internalNodes>
731
+ 0 -1 0 -335837777 1860677295 -90 -1946186226 931096183
732
+ 251612987 2013265917 -671232197</internalNodes>
733
+ <leafValues>
734
+ -0.4323300719261169 0.4342164099216461</leafValues></_>
735
+ <!-- tree 9 -->
736
+ <_>
737
+ <internalNodes>
738
+ 0 -1 103 37769424 -137772680 374692301 2002666345 -536176194
739
+ -1644484728 807009019 1069089930</internalNodes>
740
+ <leafValues>
741
+ -0.4993278682231903 0.3665378093719482</leafValues></_></weakClassifiers></_>
742
+ <!-- stage 15 -->
743
+ <_>
744
+ <maxWeakCount>9</maxWeakCount>
745
+ <stageThreshold>-1.1974394321441650</stageThreshold>
746
+ <weakClassifiers>
747
+ <!-- tree 0 -->
748
+ <_>
749
+ <internalNodes>
750
+ 0 -1 43 -5505 2147462911 2143265466 -4511070 -16450 -257
751
+ -201348440 -71333206</internalNodes>
752
+ <leafValues>
753
+ -0.3310225307941437 0.5624626278877258</leafValues></_>
754
+ <!-- tree 1 -->
755
+ <_>
756
+ <internalNodes>
757
+ 0 -1 90 -136842268 -499330741 2015250980 -87107126
758
+ -641665744 -788524639 -1147864792 -134892563</internalNodes>
759
+ <leafValues>
760
+ -0.5266560912132263 0.3704403042793274</leafValues></_>
761
+ <!-- tree 2 -->
762
+ <_>
763
+ <internalNodes>
764
+ 0 -1 104 -146800880 -1780368555 2111170033 -140904684
765
+ -16777551 -1946681885 -1646463595 -839131947</internalNodes>
766
+ <leafValues>
767
+ -0.4171888828277588 0.4540435671806335</leafValues></_>
768
+ <!-- tree 3 -->
769
+ <_>
770
+ <internalNodes>
771
+ 0 -1 85 -832054034 -981663763 -301990281 -578814081
772
+ -932319000 -1997406723 -33555201 -69206017</internalNodes>
773
+ <leafValues>
774
+ -0.4556705355644226 0.3704262077808380</leafValues></_>
775
+ <!-- tree 4 -->
776
+ <_>
777
+ <internalNodes>
778
+ 0 -1 24 -118492417 -1209026825 1119023838 -1334313353
779
+ 1112948738 -297319313 1378887291 -139469193</internalNodes>
780
+ <leafValues>
781
+ -0.4182529747486115 0.4267231225967407</leafValues></_>
782
+ <!-- tree 5 -->
783
+ <_>
784
+ <internalNodes>
785
+ 0 -1 78 -1714382628 -2353704 -112094959 -549613092
786
+ -1567058760 -1718550464 -342315012 -1074972227</internalNodes>
787
+ <leafValues>
788
+ -0.3625369668006897 0.4684656262397766</leafValues></_>
789
+ <!-- tree 6 -->
790
+ <_>
791
+ <internalNodes>
792
+ 0 -1 5 -85219702 316836394 -33279 1904970288 2117267315
793
+ -260901769 -621461759 -88607770</internalNodes>
794
+ <leafValues>
795
+ -0.4742925167083740 0.3689507246017456</leafValues></_>
796
+ <!-- tree 7 -->
797
+ <_>
798
+ <internalNodes>
799
+ 0 -1 11 -294654041 -353603585 -1641159686 -50331921
800
+ -2080899877 1145569279 -143132713 -152044037</internalNodes>
801
+ <leafValues>
802
+ -0.3666271567344666 0.4580127298831940</leafValues></_>
803
+ <!-- tree 8 -->
804
+ <_>
805
+ <internalNodes>
806
+ 0 -1 32 1887453658 -638545712 -1877976819 -34320972
807
+ -1071067983 -661345416 -583338277 1060190561</internalNodes>
808
+ <leafValues>
809
+ -0.4567637443542481 0.3894708156585693</leafValues></_></weakClassifiers></_>
810
+ <!-- stage 16 -->
811
+ <_>
812
+ <maxWeakCount>9</maxWeakCount>
813
+ <stageThreshold>-0.5733128190040588</stageThreshold>
814
+ <weakClassifiers>
815
+ <!-- tree 0 -->
816
+ <_>
817
+ <internalNodes>
818
+ 0 -1 122 -994063296 1088745462 -318837116 -319881377
819
+ 1102566613 1165490103 -121679694 -134744129</internalNodes>
820
+ <leafValues>
821
+ -0.4055117964744568 0.5487945079803467</leafValues></_>
822
+ <!-- tree 1 -->
823
+ <_>
824
+ <internalNodes>
825
+ 0 -1 68 -285233233 -538992907 1811935199 -369234005 -529
826
+ -20593 -20505 -1561401854</internalNodes>
827
+ <leafValues>
828
+ -0.3787897229194641 0.4532003402709961</leafValues></_>
829
+ <!-- tree 2 -->
830
+ <_>
831
+ <internalNodes>
832
+ 0 -1 58 -1335245632 1968917183 1940861695 536816369
833
+ -1226071367 -570908176 457026619 1000020667</internalNodes>
834
+ <leafValues>
835
+ -0.4258328974246979 0.4202791750431061</leafValues></_>
836
+ <!-- tree 3 -->
837
+ <_>
838
+ <internalNodes>
839
+ 0 -1 94 -1360318719 -1979797897 -50435249 -18646473
840
+ -608879292 -805306691 -269304244 -17840167</internalNodes>
841
+ <leafValues>
842
+ -0.4561023116111755 0.4002747833728790</leafValues></_>
843
+ <!-- tree 4 -->
844
+ <_>
845
+ <internalNodes>
846
+ 0 -1 87 2062765935 -16449 -1275080721 -16406 45764335
847
+ -1090552065 -772846337 -570464322</internalNodes>
848
+ <leafValues>
849
+ -0.4314672648906708 0.4086346626281738</leafValues></_>
850
+ <!-- tree 5 -->
851
+ <_>
852
+ <internalNodes>
853
+ 0 -1 127 -536896021 1080817663 -738234288 -965478709
854
+ -2082767969 1290855887 1993822934 -990381609</internalNodes>
855
+ <leafValues>
856
+ -0.4174543321132660 0.4249868988990784</leafValues></_>
857
+ <!-- tree 6 -->
858
+ <_>
859
+ <internalNodes>
860
+ 0 -1 3 -818943025 168730891 -293610428 -79249354 669224671
861
+ 621166734 1086506807 1473768907</internalNodes>
862
+ <leafValues>
863
+ -0.4321364760398865 0.4090838730335236</leafValues></_>
864
+ <!-- tree 7 -->
865
+ <_>
866
+ <internalNodes>
867
+ 0 -1 79 -68895696 -67107736 -1414315879 -841676168
868
+ -619843344 -1180610531 -1081990469 1043203389</internalNodes>
869
+ <leafValues>
870
+ -0.5018386244773865 0.3702533841133118</leafValues></_>
871
+ <!-- tree 8 -->
872
+ <_>
873
+ <internalNodes>
874
+ 0 -1 116 -54002134 -543485719 -2124882422 -1437445858
875
+ -115617074 -1195787391 -1096024366 -2140472445</internalNodes>
876
+ <leafValues>
877
+ -0.5037505626678467 0.3564981222152710</leafValues></_></weakClassifiers></_>
878
+ <!-- stage 17 -->
879
+ <_>
880
+ <maxWeakCount>9</maxWeakCount>
881
+ <stageThreshold>-0.4892596900463104</stageThreshold>
882
+ <weakClassifiers>
883
+ <!-- tree 0 -->
884
+ <_>
885
+ <internalNodes>
886
+ 0 -1 132 -67113211 2003808111 1862135111 846461923 -2752
887
+ 2002237273 -273154752 1937223539</internalNodes>
888
+ <leafValues>
889
+ -0.2448196411132813 0.5689709186553955</leafValues></_>
890
+ <!-- tree 1 -->
891
+ <_>
892
+ <internalNodes>
893
+ 0 -1 62 1179423888 -78064940 -611839555 -539167899
894
+ -1289358360 -1650810108 -892540499 -1432827684</internalNodes>
895
+ <leafValues>
896
+ -0.4633283913135529 0.3587929606437683</leafValues></_>
897
+ <!-- tree 2 -->
898
+ <_>
899
+ <internalNodes>
900
+ 0 -1 23 -285212705 -78450761 -656212031 -264050110 -27787425
901
+ -1334349961 -547662981 -135796924</internalNodes>
902
+ <leafValues>
903
+ -0.3731099069118500 0.4290455579757690</leafValues></_>
904
+ <!-- tree 3 -->
905
+ <_>
906
+ <internalNodes>
907
+ 0 -1 77 341863476 403702016 -550588417 1600194541
908
+ -1080690735 951127993 -1388580949 -1153717473</internalNodes>
909
+ <leafValues>
910
+ -0.3658909499645233 0.4556473195552826</leafValues></_>
911
+ <!-- tree 4 -->
912
+ <_>
913
+ <internalNodes>
914
+ 0 -1 22 -586880702 -204831512 -100644596 -39319550
915
+ -1191150794 705692513 457203315 -75806957</internalNodes>
916
+ <leafValues>
917
+ -0.5214384198188782 0.3221037387847900</leafValues></_>
918
+ <!-- tree 5 -->
919
+ <_>
920
+ <internalNodes>
921
+ 0 -1 72 -416546870 545911370 -673716192 -775559454
922
+ -264113598 139424 -183369982 -204474641</internalNodes>
923
+ <leafValues>
924
+ -0.4289036989212036 0.4004956185817719</leafValues></_>
925
+ <!-- tree 6 -->
926
+ <_>
927
+ <internalNodes>
928
+ 0 -1 50 -1026505020 -589692154 -1740499937 -1563770497
929
+ 1348491006 -60710713 -1109853489 -633909413</internalNodes>
930
+ <leafValues>
931
+ -0.4621542394161224 0.3832748532295227</leafValues></_>
932
+ <!-- tree 7 -->
933
+ <_>
934
+ <internalNodes>
935
+ 0 -1 108 -1448872304 -477895040 -1778390608 -772418127
936
+ -1789923416 -1612057181 -805306693 -1415842113</internalNodes>
937
+ <leafValues>
938
+ -0.3711548447608948 0.4612701535224915</leafValues></_>
939
+ <!-- tree 8 -->
940
+ <_>
941
+ <internalNodes>
942
+ 0 -1 92 407905424 -582449988 52654751 -1294472 -285103725
943
+ -74633006 1871559083 1057955850</internalNodes>
944
+ <leafValues>
945
+ -0.5180652141571045 0.3205870389938355</leafValues></_></weakClassifiers></_>
946
+ <!-- stage 18 -->
947
+ <_>
948
+ <maxWeakCount>10</maxWeakCount>
949
+ <stageThreshold>-0.5911940932273865</stageThreshold>
950
+ <weakClassifiers>
951
+ <!-- tree 0 -->
952
+ <_>
953
+ <internalNodes>
954
+ 0 -1 81 4112 -1259563825 -846671428 -100902460 1838164148
955
+ -74153752 -90653988 -1074263896</internalNodes>
956
+ <leafValues>
957
+ -0.2592592537403107 0.5873016119003296</leafValues></_>
958
+ <!-- tree 1 -->
959
+ <_>
960
+ <internalNodes>
961
+ 0 -1 1 -285216785 -823206977 -1085589 -1081346 1207959293
962
+ 1157103471 2097133565 -2097169</internalNodes>
963
+ <leafValues>
964
+ -0.3801195919513702 0.4718827307224274</leafValues></_>
965
+ <!-- tree 2 -->
966
+ <_>
967
+ <internalNodes>
968
+ 0 -1 121 -12465 -536875169 2147478367 2130706303 -37765492
969
+ -866124467 -318782328 -1392509185</internalNodes>
970
+ <leafValues>
971
+ -0.3509117066860199 0.5094807147979736</leafValues></_>
972
+ <!-- tree 3 -->
973
+ <_>
974
+ <internalNodes>
975
+ 0 -1 38 2147449663 -20741 -16794757 1945873146 -16710 -1
976
+ -8406341 -67663041</internalNodes>
977
+ <leafValues>
978
+ -0.4068757295608521 0.4130136370658875</leafValues></_>
979
+ <!-- tree 4 -->
980
+ <_>
981
+ <internalNodes>
982
+ 0 -1 17 -155191713 866117231 1651407483 548272812 -479201468
983
+ -447742449 1354229504 -261884429</internalNodes>
984
+ <leafValues>
985
+ -0.4557141065597534 0.3539792001247406</leafValues></_>
986
+ <!-- tree 5 -->
987
+ <_>
988
+ <internalNodes>
989
+ 0 -1 100 -225319378 -251682065 -492783986 -792341777
990
+ -1287261695 1393643841 -11274182 -213909521</internalNodes>
991
+ <leafValues>
992
+ -0.4117803275585175 0.4118592441082001</leafValues></_>
993
+ <!-- tree 6 -->
994
+ <_>
995
+ <internalNodes>
996
+ 0 -1 63 -382220122 -2002072729 -51404800 -371201558
997
+ -923011069 -2135301457 -2066104743 -1042557441</internalNodes>
998
+ <leafValues>
999
+ -0.4008397758007050 0.4034757018089294</leafValues></_>
1000
+ <!-- tree 7 -->
1001
+ <_>
1002
+ <internalNodes>
1003
+ 0 -1 101 -627353764 -48295149 1581203952 -436258614
1004
+ -105268268 -1435893445 -638126888 -1061107126</internalNodes>
1005
+ <leafValues>
1006
+ -0.5694189667701721 0.2964762747287750</leafValues></_>
1007
+ <!-- tree 8 -->
1008
+ <_>
1009
+ <internalNodes>
1010
+ 0 -1 118 -8399181 1058107691 -621022752 -251003468 -12582915
1011
+ -574619739 -994397789 -1648362021</internalNodes>
1012
+ <leafValues>
1013
+ -0.3195341229438782 0.5294018983840942</leafValues></_>
1014
+ <!-- tree 9 -->
1015
+ <_>
1016
+ <internalNodes>
1017
+ 0 -1 92 -348343812 -1078389516 1717960437 364735981
1018
+ -1783841602 -4883137 -457572354 -1076950384</internalNodes>
1019
+ <leafValues>
1020
+ -0.3365339040756226 0.5067458748817444</leafValues></_></weakClassifiers></_>
1021
+ <!-- stage 19 -->
1022
+ <_>
1023
+ <maxWeakCount>10</maxWeakCount>
1024
+ <stageThreshold>-0.7612916231155396</stageThreshold>
1025
+ <weakClassifiers>
1026
+ <!-- tree 0 -->
1027
+ <_>
1028
+ <internalNodes>
1029
+ 0 -1 10 -1976661318 -287957604 -1659497122 -782068 43591089
1030
+ -453637880 1435470000 -1077438561</internalNodes>
1031
+ <leafValues>
1032
+ -0.4204545319080353 0.5165745615959168</leafValues></_>
1033
+ <!-- tree 1 -->
1034
+ <_>
1035
+ <internalNodes>
1036
+ 0 -1 131 -67110925 14874979 -142633168 -1338923040
1037
+ 2046713291 -2067933195 1473503712 -789579837</internalNodes>
1038
+ <leafValues>
1039
+ -0.3762553930282593 0.4075302779674530</leafValues></_>
1040
+ <!-- tree 2 -->
1041
+ <_>
1042
+ <internalNodes>
1043
+ 0 -1 83 -272814301 -1577073 -1118685 -305156120 -1052289
1044
+ -1073813756 -538971154 -355523038</internalNodes>
1045
+ <leafValues>
1046
+ -0.4253497421741486 0.3728055357933044</leafValues></_>
1047
+ <!-- tree 3 -->
1048
+ <_>
1049
+ <internalNodes>
1050
+ 0 -1 135 -2233 -214486242 -538514758 573747007 -159390971
1051
+ 1994225489 -973738098 -203424005</internalNodes>
1052
+ <leafValues>
1053
+ -0.3601998090744019 0.4563256204128265</leafValues></_>
1054
+ <!-- tree 4 -->
1055
+ <_>
1056
+ <internalNodes>
1057
+ 0 -1 115 -261031688 -1330369299 -641860609 1029570301
1058
+ -1306461192 -1196149518 -1529767778 683139823</internalNodes>
1059
+ <leafValues>
1060
+ -0.4034293889999390 0.4160816967487335</leafValues></_>
1061
+ <!-- tree 5 -->
1062
+ <_>
1063
+ <internalNodes>
1064
+ 0 -1 64 -572993608 -34042628 -417865 -111109 -1433365268
1065
+ -19869715 -1920939864 -1279457063</internalNodes>
1066
+ <leafValues>
1067
+ -0.3620899617671967 0.4594142735004425</leafValues></_>
1068
+ <!-- tree 6 -->
1069
+ <_>
1070
+ <internalNodes>
1071
+ 0 -1 36 -626275097 -615256993 1651946018 805366393
1072
+ 2016559730 -430780849 -799868165 -16580645</internalNodes>
1073
+ <leafValues>
1074
+ -0.3903816640377045 0.4381459355354309</leafValues></_>
1075
+ <!-- tree 7 -->
1076
+ <_>
1077
+ <internalNodes>
1078
+ 0 -1 93 1354797300 -1090957603 1976418270 -1342502178
1079
+ -1851873892 -1194637077 -1153521668 -1108399474</internalNodes>
1080
+ <leafValues>
1081
+ -0.3591445386409760 0.4624078869819641</leafValues></_>
1082
+ <!-- tree 8 -->
1083
+ <_>
1084
+ <internalNodes>
1085
+ 0 -1 91 68157712 1211368313 -304759523 1063017136 798797750
1086
+ -275513546 648167355 -1145357350</internalNodes>
1087
+ <leafValues>
1088
+ -0.4297670423984528 0.4023293554782867</leafValues></_>
1089
+ <!-- tree 9 -->
1090
+ <_>
1091
+ <internalNodes>
1092
+ 0 -1 107 -546318240 -1628569602 -163577944 -537002306
1093
+ -545456389 -1325465645 -380446736 -1058473386</internalNodes>
1094
+ <leafValues>
1095
+ -0.5727006793022156 0.2995934784412384</leafValues></_></weakClassifiers></_></stages>
1096
+ <features>
1097
+ <_>
1098
+ <rect>
1099
+ 0 0 3 5</rect></_>
1100
+ <_>
1101
+ <rect>
1102
+ 0 0 4 2</rect></_>
1103
+ <_>
1104
+ <rect>
1105
+ 0 0 6 3</rect></_>
1106
+ <_>
1107
+ <rect>
1108
+ 0 1 2 3</rect></_>
1109
+ <_>
1110
+ <rect>
1111
+ 0 1 3 3</rect></_>
1112
+ <_>
1113
+ <rect>
1114
+ 0 1 3 7</rect></_>
1115
+ <_>
1116
+ <rect>
1117
+ 0 4 3 3</rect></_>
1118
+ <_>
1119
+ <rect>
1120
+ 0 11 3 4</rect></_>
1121
+ <_>
1122
+ <rect>
1123
+ 0 12 8 4</rect></_>
1124
+ <_>
1125
+ <rect>
1126
+ 0 14 4 3</rect></_>
1127
+ <_>
1128
+ <rect>
1129
+ 1 0 5 3</rect></_>
1130
+ <_>
1131
+ <rect>
1132
+ 1 1 2 2</rect></_>
1133
+ <_>
1134
+ <rect>
1135
+ 1 3 3 1</rect></_>
1136
+ <_>
1137
+ <rect>
1138
+ 1 7 4 4</rect></_>
1139
+ <_>
1140
+ <rect>
1141
+ 1 12 2 2</rect></_>
1142
+ <_>
1143
+ <rect>
1144
+ 1 13 4 1</rect></_>
1145
+ <_>
1146
+ <rect>
1147
+ 1 14 4 3</rect></_>
1148
+ <_>
1149
+ <rect>
1150
+ 1 17 3 2</rect></_>
1151
+ <_>
1152
+ <rect>
1153
+ 2 0 2 3</rect></_>
1154
+ <_>
1155
+ <rect>
1156
+ 2 1 2 2</rect></_>
1157
+ <_>
1158
+ <rect>
1159
+ 2 2 4 6</rect></_>
1160
+ <_>
1161
+ <rect>
1162
+ 2 3 4 4</rect></_>
1163
+ <_>
1164
+ <rect>
1165
+ 2 7 2 1</rect></_>
1166
+ <_>
1167
+ <rect>
1168
+ 2 11 2 3</rect></_>
1169
+ <_>
1170
+ <rect>
1171
+ 2 17 3 2</rect></_>
1172
+ <_>
1173
+ <rect>
1174
+ 3 0 2 2</rect></_>
1175
+ <_>
1176
+ <rect>
1177
+ 3 1 7 3</rect></_>
1178
+ <_>
1179
+ <rect>
1180
+ 3 7 2 1</rect></_>
1181
+ <_>
1182
+ <rect>
1183
+ 3 7 2 4</rect></_>
1184
+ <_>
1185
+ <rect>
1186
+ 3 18 2 2</rect></_>
1187
+ <_>
1188
+ <rect>
1189
+ 4 0 2 3</rect></_>
1190
+ <_>
1191
+ <rect>
1192
+ 4 3 2 1</rect></_>
1193
+ <_>
1194
+ <rect>
1195
+ 4 6 2 1</rect></_>
1196
+ <_>
1197
+ <rect>
1198
+ 4 6 2 5</rect></_>
1199
+ <_>
1200
+ <rect>
1201
+ 4 7 5 2</rect></_>
1202
+ <_>
1203
+ <rect>
1204
+ 4 8 4 3</rect></_>
1205
+ <_>
1206
+ <rect>
1207
+ 4 18 2 2</rect></_>
1208
+ <_>
1209
+ <rect>
1210
+ 5 0 2 2</rect></_>
1211
+ <_>
1212
+ <rect>
1213
+ 5 3 4 4</rect></_>
1214
+ <_>
1215
+ <rect>
1216
+ 5 6 2 5</rect></_>
1217
+ <_>
1218
+ <rect>
1219
+ 5 9 2 2</rect></_>
1220
+ <_>
1221
+ <rect>
1222
+ 5 10 2 2</rect></_>
1223
+ <_>
1224
+ <rect>
1225
+ 6 3 4 4</rect></_>
1226
+ <_>
1227
+ <rect>
1228
+ 6 4 4 3</rect></_>
1229
+ <_>
1230
+ <rect>
1231
+ 6 5 2 3</rect></_>
1232
+ <_>
1233
+ <rect>
1234
+ 6 5 2 5</rect></_>
1235
+ <_>
1236
+ <rect>
1237
+ 6 5 4 3</rect></_>
1238
+ <_>
1239
+ <rect>
1240
+ 6 6 4 2</rect></_>
1241
+ <_>
1242
+ <rect>
1243
+ 6 6 4 4</rect></_>
1244
+ <_>
1245
+ <rect>
1246
+ 6 18 1 2</rect></_>
1247
+ <_>
1248
+ <rect>
1249
+ 6 21 2 1</rect></_>
1250
+ <_>
1251
+ <rect>
1252
+ 7 0 3 7</rect></_>
1253
+ <_>
1254
+ <rect>
1255
+ 7 4 2 3</rect></_>
1256
+ <_>
1257
+ <rect>
1258
+ 7 9 5 1</rect></_>
1259
+ <_>
1260
+ <rect>
1261
+ 7 21 2 1</rect></_>
1262
+ <_>
1263
+ <rect>
1264
+ 8 0 1 4</rect></_>
1265
+ <_>
1266
+ <rect>
1267
+ 8 5 2 2</rect></_>
1268
+ <_>
1269
+ <rect>
1270
+ 8 5 3 2</rect></_>
1271
+ <_>
1272
+ <rect>
1273
+ 8 17 3 1</rect></_>
1274
+ <_>
1275
+ <rect>
1276
+ 8 18 1 2</rect></_>
1277
+ <_>
1278
+ <rect>
1279
+ 9 0 5 3</rect></_>
1280
+ <_>
1281
+ <rect>
1282
+ 9 2 2 6</rect></_>
1283
+ <_>
1284
+ <rect>
1285
+ 9 5 1 1</rect></_>
1286
+ <_>
1287
+ <rect>
1288
+ 9 11 1 1</rect></_>
1289
+ <_>
1290
+ <rect>
1291
+ 9 16 1 1</rect></_>
1292
+ <_>
1293
+ <rect>
1294
+ 9 16 2 1</rect></_>
1295
+ <_>
1296
+ <rect>
1297
+ 9 17 1 1</rect></_>
1298
+ <_>
1299
+ <rect>
1300
+ 9 18 1 1</rect></_>
1301
+ <_>
1302
+ <rect>
1303
+ 10 5 1 2</rect></_>
1304
+ <_>
1305
+ <rect>
1306
+ 10 5 3 3</rect></_>
1307
+ <_>
1308
+ <rect>
1309
+ 10 7 1 5</rect></_>
1310
+ <_>
1311
+ <rect>
1312
+ 10 8 1 1</rect></_>
1313
+ <_>
1314
+ <rect>
1315
+ 10 9 1 1</rect></_>
1316
+ <_>
1317
+ <rect>
1318
+ 10 10 1 1</rect></_>
1319
+ <_>
1320
+ <rect>
1321
+ 10 10 1 2</rect></_>
1322
+ <_>
1323
+ <rect>
1324
+ 10 14 3 3</rect></_>
1325
+ <_>
1326
+ <rect>
1327
+ 10 15 1 1</rect></_>
1328
+ <_>
1329
+ <rect>
1330
+ 10 15 2 1</rect></_>
1331
+ <_>
1332
+ <rect>
1333
+ 10 16 1 1</rect></_>
1334
+ <_>
1335
+ <rect>
1336
+ 10 16 2 1</rect></_>
1337
+ <_>
1338
+ <rect>
1339
+ 10 17 1 1</rect></_>
1340
+ <_>
1341
+ <rect>
1342
+ 10 21 1 1</rect></_>
1343
+ <_>
1344
+ <rect>
1345
+ 11 3 2 2</rect></_>
1346
+ <_>
1347
+ <rect>
1348
+ 11 5 1 2</rect></_>
1349
+ <_>
1350
+ <rect>
1351
+ 11 5 3 3</rect></_>
1352
+ <_>
1353
+ <rect>
1354
+ 11 5 4 6</rect></_>
1355
+ <_>
1356
+ <rect>
1357
+ 11 6 1 1</rect></_>
1358
+ <_>
1359
+ <rect>
1360
+ 11 7 2 2</rect></_>
1361
+ <_>
1362
+ <rect>
1363
+ 11 8 1 2</rect></_>
1364
+ <_>
1365
+ <rect>
1366
+ 11 10 1 1</rect></_>
1367
+ <_>
1368
+ <rect>
1369
+ 11 10 1 2</rect></_>
1370
+ <_>
1371
+ <rect>
1372
+ 11 15 1 1</rect></_>
1373
+ <_>
1374
+ <rect>
1375
+ 11 17 1 1</rect></_>
1376
+ <_>
1377
+ <rect>
1378
+ 11 18 1 1</rect></_>
1379
+ <_>
1380
+ <rect>
1381
+ 12 0 2 2</rect></_>
1382
+ <_>
1383
+ <rect>
1384
+ 12 1 2 5</rect></_>
1385
+ <_>
1386
+ <rect>
1387
+ 12 2 4 1</rect></_>
1388
+ <_>
1389
+ <rect>
1390
+ 12 3 1 3</rect></_>
1391
+ <_>
1392
+ <rect>
1393
+ 12 7 3 4</rect></_>
1394
+ <_>
1395
+ <rect>
1396
+ 12 10 3 2</rect></_>
1397
+ <_>
1398
+ <rect>
1399
+ 12 11 1 1</rect></_>
1400
+ <_>
1401
+ <rect>
1402
+ 12 12 3 2</rect></_>
1403
+ <_>
1404
+ <rect>
1405
+ 12 14 4 3</rect></_>
1406
+ <_>
1407
+ <rect>
1408
+ 12 17 1 1</rect></_>
1409
+ <_>
1410
+ <rect>
1411
+ 12 21 2 1</rect></_>
1412
+ <_>
1413
+ <rect>
1414
+ 13 6 2 5</rect></_>
1415
+ <_>
1416
+ <rect>
1417
+ 13 7 3 5</rect></_>
1418
+ <_>
1419
+ <rect>
1420
+ 13 11 3 2</rect></_>
1421
+ <_>
1422
+ <rect>
1423
+ 13 17 2 2</rect></_>
1424
+ <_>
1425
+ <rect>
1426
+ 13 17 3 2</rect></_>
1427
+ <_>
1428
+ <rect>
1429
+ 13 18 1 2</rect></_>
1430
+ <_>
1431
+ <rect>
1432
+ 13 18 2 2</rect></_>
1433
+ <_>
1434
+ <rect>
1435
+ 14 0 2 2</rect></_>
1436
+ <_>
1437
+ <rect>
1438
+ 14 1 1 3</rect></_>
1439
+ <_>
1440
+ <rect>
1441
+ 14 2 3 2</rect></_>
1442
+ <_>
1443
+ <rect>
1444
+ 14 7 2 1</rect></_>
1445
+ <_>
1446
+ <rect>
1447
+ 14 13 2 1</rect></_>
1448
+ <_>
1449
+ <rect>
1450
+ 14 13 3 3</rect></_>
1451
+ <_>
1452
+ <rect>
1453
+ 14 17 2 2</rect></_>
1454
+ <_>
1455
+ <rect>
1456
+ 15 0 2 2</rect></_>
1457
+ <_>
1458
+ <rect>
1459
+ 15 0 2 3</rect></_>
1460
+ <_>
1461
+ <rect>
1462
+ 15 4 3 2</rect></_>
1463
+ <_>
1464
+ <rect>
1465
+ 15 4 3 6</rect></_>
1466
+ <_>
1467
+ <rect>
1468
+ 15 6 3 2</rect></_>
1469
+ <_>
1470
+ <rect>
1471
+ 15 11 3 4</rect></_>
1472
+ <_>
1473
+ <rect>
1474
+ 15 13 3 2</rect></_>
1475
+ <_>
1476
+ <rect>
1477
+ 15 17 2 2</rect></_>
1478
+ <_>
1479
+ <rect>
1480
+ 15 17 3 2</rect></_>
1481
+ <_>
1482
+ <rect>
1483
+ 16 1 2 3</rect></_>
1484
+ <_>
1485
+ <rect>
1486
+ 16 3 2 4</rect></_>
1487
+ <_>
1488
+ <rect>
1489
+ 16 6 1 1</rect></_>
1490
+ <_>
1491
+ <rect>
1492
+ 16 16 2 2</rect></_>
1493
+ <_>
1494
+ <rect>
1495
+ 17 1 2 2</rect></_>
1496
+ <_>
1497
+ <rect>
1498
+ 17 1 2 5</rect></_>
1499
+ <_>
1500
+ <rect>
1501
+ 17 12 2 2</rect></_>
1502
+ <_>
1503
+ <rect>
1504
+ 18 0 2 2</rect></_></features></cascade>
1505
+ </opencv_storage>
app/Hackathon_setup/siamese_model.t7 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7672dad550778a08db2c47d850f64d0354383e191b838a254d6af64872b50236
3
+ size 161026623
app/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ __version__ = "0.0.1"
app/config.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ from typing import List
3
+
4
+ from pydantic import AnyHttpUrl, BaseSettings
5
+
6
+ class Settings(BaseSettings):
7
+ API_V1_STR: str = "/api/v1"
8
+
9
+ # Meta
10
+
11
+ # BACKEND_CORS_ORIGINS is a comma-separated list of origins
12
+ # e.g: http://localhost,http://localhost:4200,http://localhost:3000
13
+ BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = [
14
+ "http://localhost:3000", # type: ignore
15
+ "http://localhost:8000", # type: ignore
16
+ "https://localhost:3000", # type: ignore
17
+ "https://localhost:8000", # type: ignore
18
+ ]
19
+
20
+ PROJECT_NAME: str = "Recognition API"
21
+
22
+ class Config:
23
+ case_sensitive = True
24
+
25
+ settings = Settings()
app/main.py ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ from pathlib import Path
3
+ sys.path.append(str(Path(__file__).resolve().parent.parent))
4
+ #print(sys.path)
5
+ from typing import Any
6
+
7
+ from fastapi import FastAPI, Request, APIRouter, File, UploadFile
8
+ from fastapi.staticfiles import StaticFiles
9
+ from fastapi.templating import Jinja2Templates
10
+ from fastapi.middleware.cors import CORSMiddleware
11
+ from app.config import settings
12
+ from app import __version__
13
+ from app.Hackathon_setup import face_recognition, exp_recognition
14
+
15
+ import numpy as np
16
+ from PIL import Image
17
+
18
+
19
+ app = FastAPI(
20
+ title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json"
21
+ )
22
+
23
+ # To store files uploaded by users
24
+ app.mount("/static", StaticFiles(directory="app/static"), name="static")
25
+
26
+ # To access Templates directory
27
+ templates = Jinja2Templates(directory="app/templates")
28
+
29
+ simi_filename1 = None
30
+ simi_filename2 = None
31
+ face_rec_filename = None
32
+ expr_rec_filename = None
33
+
34
+
35
+ #################################### Home Page endpoints #################################################
36
+ @app.get("/")
37
+ async def root(request: Request):
38
+ return templates.TemplateResponse("index.html", {'request': request,})
39
+
40
+
41
+ #################################### Face Similarity endpoints #################################################
42
+ @app.get("/similarity/")
43
+ async def similarity_root(request: Request):
44
+ return templates.TemplateResponse("similarity.html", {'request': request,})
45
+
46
+
47
+ @app.post("/predict_similarity/")
48
+ async def create_upload_files(request: Request, file1: UploadFile = File(...), file2: UploadFile = File(...)):
49
+ global simi_filename1
50
+ global simi_filename2
51
+
52
+ if 'image' in file1.content_type:
53
+ contents = await file1.read()
54
+ simi_filename1 = 'app/static/' + file1.filename
55
+ with open(simi_filename1, 'wb') as f:
56
+ f.write(contents)
57
+
58
+ if 'image' in file2.content_type:
59
+ contents = await file2.read()
60
+ simi_filename2 = 'app/static/' + file2.filename
61
+ with open(simi_filename2, 'wb') as f:
62
+ f.write(contents)
63
+
64
+ img1 = Image.open(simi_filename1)
65
+ img1 = np.array(img1).reshape(img1.size[1], img1.size[0], 3).astype(np.uint8)
66
+
67
+ img2 = Image.open(simi_filename2)
68
+ img2 = np.array(img2).reshape(img2.size[1], img2.size[0], 3).astype(np.uint8)
69
+
70
+ result = face_recognition.get_similarity(img1, img2)
71
+ #print(result)
72
+
73
+ return templates.TemplateResponse("predict_similarity.html", {"request": request,
74
+ "result": np.round(result, 3),
75
+ "simi_filename1": '../static/'+file1.filename,
76
+ "simi_filename2": '../static/'+file2.filename,})
77
+
78
+
79
+ #################################### Face Recognition endpoints #################################################
80
+ @app.get("/face_recognition/")
81
+ async def face_recognition_root(request: Request):
82
+ return templates.TemplateResponse("face_recognition.html", {'request': request,})
83
+
84
+
85
+ @app.post("/predict_face_recognition/")
86
+ async def create_upload_files(request: Request, file3: UploadFile = File(...)):
87
+ global face_rec_filename
88
+
89
+ if 'image' in file3.content_type:
90
+ contents = await file3.read()
91
+ face_rec_filename = 'app/static/' + file3.filename
92
+ with open(face_rec_filename, 'wb') as f:
93
+ f.write(contents)
94
+
95
+ img1 = Image.open(face_rec_filename)
96
+ img1 = np.array(img1).reshape(img1.size[1], img1.size[0], 3).astype(np.uint8)
97
+
98
+ result = face_recognition.get_face_class(img1)
99
+ print(result)
100
+
101
+ return templates.TemplateResponse("predict_face_recognition.html", {"request": request,
102
+ "result": result,
103
+ "face_rec_filename": '../static/'+file3.filename,})
104
+
105
+
106
+ #################################### Expresion Recognition endpoints #################################################
107
+ @app.get("/expr_recognition/")
108
+ async def expr_recognition_root(request: Request):
109
+ return templates.TemplateResponse("expr_recognition.html", {'request': request,})
110
+
111
+
112
+ @app.post("/predict_expr_recognition/")
113
+ async def create_upload_files(request: Request, file4: UploadFile = File(...)):
114
+ global expr_rec_filename
115
+
116
+ if 'image' in file4.content_type:
117
+ contents = await file4.read()
118
+ expr_rec_filename = 'app/static/' + file4.filename
119
+ with open(expr_rec_filename, 'wb') as f:
120
+ f.write(contents)
121
+
122
+ img1 = Image.open(expr_rec_filename)
123
+ img1 = np.array(img1).reshape(img1.size[1], img1.size[0], 3).astype(np.uint8)
124
+
125
+ result = exp_recognition.get_expression(img1)
126
+ print(result)
127
+
128
+ return templates.TemplateResponse("predict_expr_recognition.html", {"request": request,
129
+ "result": result,
130
+ "expr_rec_filename": '../static/'+file4.filename,})
131
+
132
+
133
+
134
+ # Set all CORS enabled origins
135
+ if settings.BACKEND_CORS_ORIGINS:
136
+ app.add_middleware(
137
+ CORSMiddleware,
138
+ allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
139
+ allow_credentials=True,
140
+ allow_methods=["*"],
141
+ allow_headers=["*"],
142
+ )
143
+
144
+
145
+ # Start app
146
+ if __name__ == "__main__":
147
+ import uvicorn
148
+ uvicorn.run(app, host="0.0.0.0", port=8001)
app/static/Person1_1697805233.jpg ADDED
app/templates/expr_recognition.html ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Index</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Expression Recognition</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <ul>
15
+ <!li>
16
+ <br>
17
+ <form action="/predict_expr_recognition/" enctype="multipart/form-data" method="post">
18
+ <span style="font-weight:bold;font-family:sans-serif">Upload Image:</span> <br><br>
19
+ <input name="file4" type="file" onchange="readURL(this);" />
20
+ <br><br><br>
21
+ <button type="submit">Recognize Expression</button>
22
+ </form>
23
+ <!/li>
24
+ <br><br>
25
+ <form action="/" method="get">
26
+ <button type="submit">Home</button>
27
+ </form>
28
+ </ul>
29
+ </fieldset>
30
+ </div>
31
+ </body>
32
+ </html>
app/templates/face_recognition.html ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Index</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Face Recognition</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <ul>
15
+ <!li>
16
+ <br>
17
+ <form action="/predict_face_recognition/" enctype="multipart/form-data" method="post">
18
+ <span style="font-weight:bold;font-family:sans-serif">Upload Image:</span> <br><br>
19
+ <input name="file3" type="file" onchange="readURL(this);" />
20
+ <br><br><br>
21
+ <button type="submit">Recognize Face</button>
22
+ </form>
23
+ <!/li>
24
+ <br><br>
25
+ <form action="/" method="get">
26
+ <button type="submit">Home</button>
27
+ </form>
28
+ </ul>
29
+ </fieldset>
30
+ </div>
31
+ </body>
32
+ </html>
app/templates/index.html ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Index</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Recognition Application</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <ul>
15
+ <li><span style="font-weight:bold;font-family:sans-serif">Select a task:</span>
16
+ <br><br><br>
17
+ <form action="{{ url_for('similarity_root') }}"><button>Face Similarity</button></form>
18
+ <br><br>
19
+ <form action="{{ url_for('face_recognition_root') }}"><button>Face Recognition</button></form>
20
+ <br><br>
21
+ <form action="{{ url_for('expr_recognition_root') }}"><button>Expression Recognition</button></form>
22
+ <br>
23
+ </li>
24
+ <br>
25
+ </ul>
26
+ </fieldset>
27
+ </div>
28
+ </body>
29
+ </html>
app/templates/predict_expr_recognition.html ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Predict</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Expression Recognition</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <h2>
15
+ <center>
16
+ <span style="font-weight:bold;font-family:sans-serif">Prediction: </span>
17
+ <span style="font-weight:bold;color:blue"> {{result}}</span>
18
+ </center>
19
+ </h2>
20
+ <h3><center><span style="font-weight:bold;font-family:sans-serif">Input image:</span></Input></center></h3>
21
+ <p>
22
+ <center>
23
+ <img src="{{expr_rec_filename}}" alt={{expr_rec_filename1}} width='150' height='150'>
24
+ </center>
25
+ </p>
26
+ <br>
27
+ <form action="/expr_recognition/" method="get">
28
+ <center><button type="submit">Check Another Input</button></center>
29
+ </form>
30
+ <br>
31
+ <form action="/" method="get">
32
+ <center><button type="submit">Home</button></center>
33
+ </form>
34
+ </fieldset>
35
+ </div>
36
+ </body>
37
+ </html>
app/templates/predict_face_recognition.html ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Predict</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Face Recognition</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <h2>
15
+ <center>
16
+ <span style="font-weight:bold;font-family:sans-serif">Prediction: </span>
17
+ <span style="font-weight:bold;color:blue"> {{result}}</span>
18
+ </center>
19
+ </h2>
20
+ <h3><center><span style="font-weight:bold;font-family:sans-serif">Input image:</span></Input></center></h3>
21
+ <p>
22
+ <center>
23
+ <img src="{{face_rec_filename}}" alt={{face_rec_filename1}} width='150' height='150'>
24
+ </center>
25
+ </p>
26
+ <br>
27
+ <form action="/face_recognition/" method="get">
28
+ <center><button type="submit">Check Another Input</button></center>
29
+ </form>
30
+ <br>
31
+ <form action="/" method="get">
32
+ <center><button type="submit">Home</button></center>
33
+ </form>
34
+ </fieldset>
35
+ </div>
36
+ </body>
37
+ </html>
app/templates/predict_similarity.html ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Predict</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Face Similarity</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <h2>
15
+ <center>
16
+ <span style="font-weight:bold;font-family:sans-serif">Dissimilarity:</span>
17
+ <span style="font-weight:bold;color:blue"> {{result}}</span>
18
+ </center>
19
+ </h2>
20
+ <h3><center><span style="font-weight:bold;font-family:sans-serif">Input images:</span></Input></center></h3>
21
+ <p>
22
+ <center>
23
+ <img src="{{simi_filename1}}" alt={{simi_filename1}} width='150' height='150'>
24
+ <img src="{{simi_filename2}}" alt={{simi_filename2}} width='150' height='150'>
25
+ </center>
26
+ </p>
27
+ <br>
28
+ <form action="/similarity/" method="get">
29
+ <center><button type="submit">Check Another Input</button></center>
30
+ </form>
31
+ <br>
32
+ <form action="/" method="get">
33
+ <center><button type="submit">Home</button></center>
34
+ </form>
35
+ </fieldset>
36
+ </div>
37
+ </body>
38
+ </html>
app/templates/similarity.html ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Index</title>
5
+ </head>
6
+ <body>
7
+ <div>
8
+ <h1 style="background-color:LightGray;">
9
+ <center>Face Similarity</center>
10
+ </h1>
11
+ </div>
12
+ <div>
13
+ <fieldset>
14
+ <ul>
15
+ <!li>
16
+ <br>
17
+ <form action="/predict_similarity/" enctype="multipart/form-data" method="post">
18
+ <span style="font-weight:bold;font-family:sans-serif">Upload First Image:</span> <br><br>
19
+ <input name="file1" type="file" onchange="readURL(this);" />
20
+ <br><br><br>
21
+ <span style="font-weight:bold;font-family:sans-serif">Upload Second Image:</span> <br><br>
22
+ <input name="file2" type="file" onchange="readURL(this);" />
23
+ <br><br><br><br>
24
+ <button type="submit">Check Similarity</button>
25
+ </form>
26
+ <!/li>
27
+ <br><br>
28
+ <form action="/" method="get">
29
+ <button type="submit">Home</button>
30
+ </form>
31
+ </ul>
32
+ </fieldset>
33
+ </div>
34
+ </body>
35
+ </html>
requirements.txt ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ uvicorn==0.17.6
2
+ fastapi==0.99.1
3
+ pydantic==1.10.10
4
+ requests==2.23.0
5
+ jinja2==3.1.2
6
+ python-multipart==0.0.6
7
+
8
+ scikit-learn==1.2.2
9
+ joblib==1.3.2
10
+ Pillow==9.4.0
11
+ torch==2.1.0
12
+ torchvision==0.16.0
13
+ matplotlib==3.7.1
14
+ numpy
15
+ pandas
16
+ #opencv-python==4.8.0.76
17
+ opencv-python==4.5.5.64