Поток потокового видео с структурой данных, связанной с каждым фреймом

81
10

Очень новичок в веб-разработке и создании веб-приложения для распознавания лиц с помощью Flask и, надеюсь, реагируют как на передний план. Я использовал учебник для настройки потоковой видеопотоки и интегрированный openCV, который работает хорошо, но я хочу передать некоторые данные в свой интерфейс и каждый кадр, и я изо всех сил пытаюсь понять, как это сделать.

from flask import Flask, render_template, Response
from camera import VideoCamera
import cv2
import face_recognition
import os
import glob
os.chdir('C:/Users/fk143vt/Desktop/Flask')
app = Flask(__name__)

known_face_encodings = []
known_face_names = []
for file in glob.glob("images/*"):
identity = os.path.splitext(os.path.basename(file))[0]
im = cv2.imread(file, 1)
known_face_encodings.append(face_recognition.face_encodings(im)[0])
known_face_names.append(identity)

#os.chdir('C:/Users/yx559hx/Desktop/Face Recog Demo/Flask')

@app.route('/')
def index():
return render_template('hello.html')

def gen(camera):
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:
frame_jpg, frame = camera.get_frame()
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
rgb_small_frame = small_frame[:, :, ::-1]
if process_this_frame:
face_locations = face_recognition.face_locations(rgb_small_frame)
face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

face_names = []
for face_encoding in face_encodings:
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Unknown"

if True in matches:
first_match_index = matches.index(True)
name = known_face_names[first_match_index]
face_names.append(name)
process_this_frame = not process_this_frame

names_locations = zip(face_locations, face_names)

for (top, right, bottom, left), name in names_locations:
top *= 4
right *= 4
bottom *= 4
left *= 4
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 255, 0), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (0, 0, 0), 1)

ret, frame_jpg = cv2.imencode('.jpg', frame)
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame_jpg.tobytes() + b'\r\n\r\n')

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

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

И файл моей камеры:

import cv2

class VideoCamera(object):
def __init__(self):
self.video = cv2.VideoCapture(0)
def __del__(self):
self.video.release()

def get_frame(self):
success, image = self.video.read()
# We are using Motion JPEG, but OpenCV defaults to capture raw images,
# so we must encode it into JPEG in order to correctly display the
# video stream.
ret, jpeg = cv2.imencode('.jpg', image)
return jpeg.tobytes(), image
#return image

Моя проблема в том, что мне нужно передать имя, которое программное обеспечение распознавания лиц идентифицирует вместе с видео, чтобы имя можно было зафиксировать в браузере. Я не понимаю, как я могу структурировать свой объект ответа, чтобы передать как изображение, так и парную строку в переднюю часть, учитывая, что генератор используется для потоковой передачи видео.

Любые советы были бы чрезвычайно оценены!

спросил(а) 2018-06-13T19:35:00+03:00 2 года, 3 месяца назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема