|
@@ -0,0 +1,84 @@
|
|
|
+import os
|
|
|
+import tempfile
|
|
|
+
|
|
|
+import face_recognition
|
|
|
+
|
|
|
+from flask import Flask, request, jsonify
|
|
|
+def create_app():
|
|
|
+ app = Flask(__name__)
|
|
|
+
|
|
|
+ def init_app():
|
|
|
+ known_faces_dir = "./known_faces"
|
|
|
+ print(known_faces_dir)
|
|
|
+ load_known_faces(known_faces_dir)
|
|
|
+
|
|
|
+ init_app()
|
|
|
+
|
|
|
+ @app.route('/')
|
|
|
+ def hello_world(): # put application's code here
|
|
|
+ return 'Hello World!'
|
|
|
+
|
|
|
+ @app.route('/recognize', methods=['POST'])
|
|
|
+ def recognize():
|
|
|
+ if 'file' not in request.files:
|
|
|
+ return jsonify({'error': 'No file part'}), 400
|
|
|
+ file = request.files['file']
|
|
|
+ if file.filename == '':
|
|
|
+ return jsonify({'error': 'No selected file'}), 400
|
|
|
+ if file:
|
|
|
+ # 创建一个临时文件保存上传的文件
|
|
|
+ temp_file = tempfile.NamedTemporaryFile(delete=False)
|
|
|
+ file.save(temp_file.name)
|
|
|
+ results = find_faces_in_image(temp_file.name)
|
|
|
+ os.remove(temp_file.name) # 删除临时文件
|
|
|
+ return jsonify(results)
|
|
|
+ return app
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 全局变量存储已知人脸编码和名称
|
|
|
+known_face_encodings = []
|
|
|
+known_face_names = []
|
|
|
+
|
|
|
+
|
|
|
+def load_known_faces(known_faces_dir):
|
|
|
+ global known_face_encodings, known_face_names
|
|
|
+ known_face_encodings = []
|
|
|
+ known_face_names = []
|
|
|
+
|
|
|
+ for filename in os.listdir(known_faces_dir):
|
|
|
+ if filename.endswith(".jpg") or filename.endswith(".png"):
|
|
|
+ image_path = os.path.join(known_faces_dir, filename)
|
|
|
+ image = face_recognition.load_image_file(image_path)
|
|
|
+ face_encoding = face_recognition.face_encodings(image)[0]
|
|
|
+ known_face_encodings.append(face_encoding)
|
|
|
+ known_face_names.append(os.path.splitext(filename)[0])
|
|
|
+
|
|
|
+
|
|
|
+def find_faces_in_image(image_path):
|
|
|
+ image = face_recognition.load_image_file(image_path)
|
|
|
+ face_locations = face_recognition.face_locations(image)
|
|
|
+ face_encodings = face_recognition.face_encodings(image, face_locations)
|
|
|
+
|
|
|
+ found_faces = []
|
|
|
+ for face_encoding in face_encodings:
|
|
|
+ matches = face_recognition.compare_faces(known_face_encodings, face_encoding, tolerance=0.35)
|
|
|
+
|
|
|
+ if True in matches:
|
|
|
+ first_match_index = matches.index(True)
|
|
|
+ name = known_face_names[first_match_index]
|
|
|
+ found_faces.append(name)
|
|
|
+
|
|
|
+ if found_faces:
|
|
|
+ return True
|
|
|
+ else:
|
|
|
+ return False
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ app = create_app()
|
|
|
+ app.run()
|