Browse Source

增加web

xueyiming 6 months ago
parent
commit
37d361cbb2
2 changed files with 84 additions and 0 deletions
  1. 84 0
      app.py
  2. BIN
      known_faces/001.jpg

+ 84 - 0
app.py

@@ -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()

BIN
known_faces/001.jpg