我试图在我的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一样的东西。