浏览代码

update fr

kevin 2 年之前
父节点
当前提交
cb1441a4b9
共有 6 个文件被更改,包括 67 次插入22 次删除
  1. 2 0
      .dockerignore
  2. 14 12
      Dockerfile
  3. 7 0
      build_docker.sh
  4. 32 10
      fr_flask.py
  5. 7 0
      fr_flask_0.py
  6. 5 0
      run_docker.sh

+ 2 - 0
.dockerignore

@@ -2,6 +2,8 @@ venv
 .*
 Dockerfile
 configure.sh
+build_docker.sh
+run_docker.sh
 face_align.py
 hello_flask.py
 main.py

+ 14 - 12
Dockerfile

@@ -1,7 +1,11 @@
-FROM python:3.11.3-slim
+FROM python:3.10-bullseye
 
-RUN apt-get -y update
-RUN apt-get install --no-install-recommends -y --fix-missing \
+WORKDIR /usr/src/app
+
+COPY . .
+
+RUN apt-get -y update && \
+    apt-get -y upgrade && apt-get install --no-install-recommends -y --fix-missing \
     build-essential \
     cmake \
     gfortran \
@@ -19,19 +23,17 @@ RUN apt-get install --no-install-recommends -y --fix-missing \
     libswscale-dev \
     pkg-config \
     python3-dev \
-    python3-numpy \
     software-properties-common \
     zip \
     && apt-get clean && rm -rf /tmp/* /var/tmp/*
 
-WORKDIR /usr/src/app
-
-COPY . .
-
-RUN pip install --no-cache-dir -r requirements.txt
-
-RUN chmod +x *.sh
-RUN python face_recognition_svm.py
+RUN pip install numpy && \
+    mkdir -p dlib && \
+    git clone -b 'v19.9' --single-branch https://github.com/davisking/dlib.git dlib/ && \
+    cd dlib && python setup.py install --yes USE_AVX_INSTRUCTIONS && \
+    cd .. && pip install --no-cache-dir -r requirements.txt && \
+    chmod +x *.sh && \
+    python face_recognition_svm.py
 
 EXPOSE 8349
 

+ 7 - 0
build_docker.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+if [ $1 == "--no-cache" ]; then
+  docker build --no-cache -t kevhnmay94/face_recognition .
+else
+  docker build -t kevhnmay94/face_recognition .
+fi

+ 32 - 10
fr_flask.py

@@ -68,9 +68,10 @@ app.config["PROFILE_FOLDER"] = PROFILE_FOLDER
 db_user = "facer"
 db_pass = "9Y6Bqg3JwQxXa"
 
-db = mysql.connector.connect(user=db_user, password=db_pass, unix_socket="/opt/lampp/var/mysql/mysql.sock",
-                             database='face_recognition')
-
+# Pick one
+db_host, db_port = "", ""
+db_unix_socket = "/opt/lampp/var/mysql/mysql.sock"
+# Pick one
 
 def scan_known_people(known_people_folder):
     known_face_encodings = []
@@ -96,8 +97,15 @@ def image_files_in_folder(folder):
 
 
 def load_db(data_id):
-    db_con = mysql.connector.connect(user=db_user, password=db_pass, unix_socket="/opt/lampp/var/mysql/mysql.sock",
-                                     database='face_recognition')
+    db_con = None
+    if db_unix_socket:
+        db_con = mysql.connector.connect(user=db_user, password=db_pass, unix_socket=db_unix_socket,
+                                         database='face_recognition')
+    elif db_host and db_port:
+        db_con = mysql.connector.connect(user=db_user, password=db_pass, host=db_host, port=db_port,
+                                         database='face_recognition')
+    else:
+        return None
     db_cursor = db_con.cursor()
     db_result = {"name": "Unknown", "address": "", "nik": ""}
     try:
@@ -114,8 +122,15 @@ def load_db(data_id):
 
 
 def save_db(nik, name, address):
-    db_con = mysql.connector.connect(user=db_user, password=db_pass, unix_socket="/opt/lampp/var/mysql/mysql.sock",
+    db_con = None
+    if db_unix_socket:
+        db_con = mysql.connector.connect(user=db_user, password=db_pass, unix_socket=db_unix_socket,
                                      database='face_recognition')
+    elif db_host and db_port:
+        db_con = mysql.connector.connect(user=db_user, password=db_pass, host=db_host, port=db_port,
+                                         database='face_recognition')
+    else:
+        return None
     data_id = None
     db_cursor = db_con.cursor()
     try:
@@ -326,9 +341,16 @@ try:
     print('model loaded')
     known_faces = scan_known_people(known_people)
     print('known faces scanned')
-    db = mysql.connector.connect(user=db_user, password=db_pass, unix_socket="/opt/lampp/var/mysql/mysql.sock",
-                                 database='face_recognition')
-    cursor = db.cursor()
+    db_con = None
+    if db_unix_socket:
+        db_con = mysql.connector.connect(user=db_user, password=db_pass, unix_socket=db_unix_socket,
+                                         database='face_recognition')
+    elif db_host and db_port:
+        db_con = mysql.connector.connect(user=db_user, password=db_pass, host=db_host, port=db_port,
+                                         database='face_recognition')
+    else:
+        exit(1)
+    cursor = db_con.cursor()
     result = {"name": "Unknown", "address": "", "nik": ""}
     try:
         query = "SELECT `ID` FROM `face_recognition` ORDER BY `ID`"
@@ -337,7 +359,7 @@ try:
             ids.append(data_id[0])
     finally:
         cursor.close()
-        db.close()
+        db_con.close()
     print("ids: ", ids)
 
 except FileNotFoundError as e:

+ 7 - 0
fr_flask_0.py

@@ -97,6 +97,11 @@ def save_db(nik, name, address):
     pass
 
 
+@app.route('/', methods=['GET', 'POST'])
+def test():
+    return jsonify({"status": "0"})
+
+
 @app.route('/upload', methods=['POST'])
 def upload():
     profile = request.files["profile"]
@@ -104,6 +109,7 @@ def upload():
     name = request.form["name"]
     address = request.form["address"]
 
+
 @app.route('/train', methods=['GET', 'POST'])
 def train():
     try:
@@ -112,6 +118,7 @@ def train():
     except Exception as exc:
         return jsonify({"status": "1", "message": f"Error training model: {exc}"})
 
+
 @app.route('/reload', methods=['GET', 'POST'])
 def face_reload():
     pid = None

+ 5 - 0
run_docker.sh

@@ -0,0 +1,5 @@
+#!/bin/bash
+
+EXT_PORT=8349
+TAG=latest
+docker run -it --rm -p "$EXT_PORT:8349" "kevhnmay94/face_recognition:$TAG"