Skip to content

Commit 4d33eb0

Browse files
committed
Add webservice example
1 parent 8f8c8b1 commit 4d33eb0

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

examples/web_service_example.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# This is a _very simple_ example of a web service that recognizes faces in uploaded images.
2+
# Upload an image file and it will check if the image contains a picture of Barack Obama.
3+
# The result is returned as json. For example:
4+
#
5+
# $ curl -F "file=@obama2.jpg" http://127.0.0.1:5001
6+
#
7+
# Returns:
8+
#
9+
# {
10+
# "face_found_in_image": true,
11+
# "is_picture_of_obama": true
12+
# }
13+
#
14+
# This example is based on the Flask file upload example: http://flask.pocoo.org/docs/0.12/patterns/fileuploads/
15+
16+
# NOTE: This example requires flask to be installed! You can install it with pip:
17+
# $ pip3 install flask
18+
19+
import face_recognition
20+
from flask import Flask, jsonify, request, redirect
21+
22+
# You can change this to any folder on your system
23+
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
24+
25+
app = Flask(__name__)
26+
27+
28+
def allowed_file(filename):
29+
return '.' in filename and \
30+
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
31+
32+
33+
@app.route('/', methods=['GET', 'POST'])
34+
def upload_image():
35+
# Check if a valid image file was uploaded
36+
if request.method == 'POST':
37+
if 'file' not in request.files:
38+
return redirect(request.url)
39+
40+
file = request.files['file']
41+
42+
if file.filename == '':
43+
return redirect(request.url)
44+
45+
if file and allowed_file(file.filename):
46+
# The image file seems valid! Detect faces and return the result.
47+
return detect_faces_in_image(file)
48+
49+
# If no valid image file was uploaded, show the file upload form:
50+
return '''
51+
<!doctype html>
52+
<title>Is this a picture of Obama?</title>
53+
<h1>Upload a picture and see if it's a picture of Obama!</h1>
54+
<form method="POST" enctype="multipart/form-data">
55+
<input type="file" name="file">
56+
<input type="submit" value="Upload">
57+
</form>
58+
'''
59+
60+
61+
def detect_faces_in_image(file_stream):
62+
# Pre-calculated face encoding of Obama generated with face_recognition.face_encodings(img)
63+
known_face_encoding = [-0.09634063, 0.12095481, -0.00436332, -0.07643753, 0.0080383,
64+
0.01902981, -0.07184699, -0.09383309, 0.18518871, -0.09588896,
65+
0.23951106, 0.0986533 , -0.22114635, -0.1363683 , 0.04405268,
66+
0.11574756, -0.19899382, -0.09597053, -0.11969153, -0.12277931,
67+
0.03416885, -0.00267565, 0.09203379, 0.04713435, -0.12731361,
68+
-0.35371891, -0.0503444 , -0.17841317, -0.00310897, -0.09844551,
69+
-0.06910533, -0.00503746, -0.18466514, -0.09851682, 0.02903969,
70+
-0.02174894, 0.02261871, 0.0032102 , 0.20312519, 0.02999607,
71+
-0.11646006, 0.09432904, 0.02774341, 0.22102901, 0.26725179,
72+
0.06896867, -0.00490024, -0.09441824, 0.11115381, -0.22592428,
73+
0.06230862, 0.16559327, 0.06232892, 0.03458837, 0.09459756,
74+
-0.18777156, 0.00654241, 0.08582542, -0.13578284, 0.0150229 ,
75+
0.00670836, -0.08195844, -0.04346499, 0.03347827, 0.20310158,
76+
0.09987706, -0.12370517, -0.06683611, 0.12704916, -0.02160804,
77+
0.00984683, 0.00766284, -0.18980607, -0.19641446, -0.22800779,
78+
0.09010898, 0.39178532, 0.18818057, -0.20875394, 0.03097027,
79+
-0.21300618, 0.02532415, 0.07938635, 0.01000703, -0.07719778,
80+
-0.12651891, -0.04318593, 0.06219772, 0.09163868, 0.05039065,
81+
-0.04922386, 0.21839413, -0.02394437, 0.06173781, 0.0292527 ,
82+
0.06160797, -0.15553983, -0.02440624, -0.17509389, -0.0630486 ,
83+
0.01428208, -0.03637431, 0.03971229, 0.13983178, -0.23006812,
84+
0.04999552, 0.0108454 , -0.03970895, 0.02501768, 0.08157793,
85+
-0.03224047, -0.04502571, 0.0556995 , -0.24374914, 0.25514284,
86+
0.24795187, 0.04060191, 0.17597422, 0.07966681, 0.01920104,
87+
-0.01194376, -0.02300822, -0.17204897, -0.0596558 , 0.05307484,
88+
0.07417042, 0.07126575, 0.00209804]
89+
90+
# Load the uploaded image file
91+
img = face_recognition.load_image_file(file_stream)
92+
# Get face encodings for any faces in the uploaded image
93+
unknown_face_encodings = face_recognition.face_encodings(img)
94+
95+
face_found = False
96+
is_obama = False
97+
98+
if len(unknown_face_encodings) > 0:
99+
face_found = True
100+
# See if the first face in the uploaded image matches the known face of Obama
101+
match_results = face_recognition.compare_faces([known_face_encoding], unknown_face_encodings[0])
102+
if match_results[0]:
103+
is_obama = True
104+
105+
# Return the result as json
106+
result = {
107+
"face_found_in_image": face_found,
108+
"is_picture_of_obama": is_obama
109+
}
110+
return jsonify(result)
111+
112+
if __name__ == "__main__":
113+
app.run(host='0.0.0.0', port=5001, debug=True)

0 commit comments

Comments
 (0)