如何使用Flask和OpenCV创建人脸识别Web应用程序?

时间:2019-04-13 14:50:15

标签: python opencv flask raspberry-pi3

我试图在我的Raspberry Pi 3 Model B +上为使用Flask和OpenCV的学校项目创建人脸识别Web应用程序,但是在Flask中进行识别时遇到了麻烦。我该如何编写代码?

我关注了the tutorial。一切都很好,但我不知道如何将其转移到Flask。我已经编写了代码以在Web服务器上显示视频流,并在脸部周围绘制一个矩形,但是我不完全了解下一步该怎么做。

main.py

import cv2
import time
from video import Camera

from flask import Flask, render_template, Response

app = Flask(__name__)

@app.route('/')
def index():
#Template in the 'templates' folder
    return render_template('index.html')

def gen_frame():
    while True:
        frame = Camera()
        yield (b'--frame\r\n'
        b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
        time.sleep(0.05)

@app.route('/video_feed')
def video_feed():
    return Response(gen_frame(),
    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=False)

video.py

import cv2
from face_rec import Recognizer
face_cascade = cv2.CascadeClassifier('/home/pi/opencv/data/haarcascades/haarcascade_frontalface_default.xml')

cam = cv2.VideoCapture(0)

minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)

def Camera():
    while True:
        ret, img = cam.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        faces = face_cascade.detectMultiScale(
            gray,
            scaleFactor = 1.3,
            minNeighbors = 3,
            minSize = (int(minW), int(minH)),
        )

        for(x,y,w,h) in faces:
            cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

    return cv2.imencode('.jpeg', img)[1].tobytes()

我希望能够看到与带有名称标签的Raspberry Pi一样的东西。

0 个答案:

没有答案