Я хотел разработать API, который будет передавать поток с камеры на модель ML для обнаружения лиц и рисовать ограничивающие рамки вокруг идентифицированных лиц, и один и тот же API должен быть доступен для более чем одного запроса API. Ниже приведен код, который я написал и работает совершенно нормально. Однако, когда я пытаюсь вызвать другой экземпляр API, пока первый еще не запущен, на второй запрос нет ответа. Я знаю, что сервер занят обработкой первого запроса, так как это потоковая передача с камеры на сервер в режиме реального времени. Не могли бы вы, пожалуйста, мне, как я могу сделать это для нескольких камер
import os
import sys
import cv2
import argparse
import json
import time
import numpy as np
from flask import Flask, redirect, url_for, request, Response, jsonify, redirect, render_template
from werkzeug.utils import secure_filename
from gevent.pywsgi import WSGIServer
from PIL import Image
from io import BytesIO
from camera import VideoCamera
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
app = Flask(__name__)
def gen(camera):
while True:
frame = camera.get_frame()
frame = jpeg.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/recognize', methods=['GET'])
def recognize():
if request.method == 'GET':
camera_id = int(request.values.get('camid'))
return Response(gen(VideoCamera(camera_id)),mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
http_server = WSGIServer(('0.0.0.0',5000), app)
http_server.serve_forever()
Ниже приведен файл camera.py
import cv2
class VideoCamera(object):
def __init__(self,camid):
self.camid = camid
self.video = cv2.VideoCapture(self.camid)
def __del__(self):
self.video.release()
def get_frame(self):
success, image = self.video.read()
return image