在Flask SocketIO中,RAM使用量不断增加

在Flask SocketIO中,RAM使用量不断增加,flask,websocket,memory-leaks,socket.io,flask-socketio,Flask,Websocket,Memory Leaks,Socket.io,Flask Socketio,我正在开发一个web应用程序,在这个应用程序中,我需要捕获视频提要,我正在使用JavaScript,并通过SocketIO将视频逐帧发送到flask后端。在获得框架时,我正在对图像进行深入学习模型的简单推断。 问题是,在接收到javascript客户端发出的消息后,服务器的RAM使用率迅速增加 以下是我的flask后端的代码: @socketio.on('input image', namespace='/test') def test_message(input): #socketio.wa

我正在开发一个web应用程序,在这个应用程序中,我需要捕获视频提要,我正在使用JavaScript,并通过SocketIO将视频逐帧发送到flask后端。在获得框架时,我正在对图像进行深入学习模型的简单推断。 问题是,在接收到javascript客户端发出的消息后,服务器的RAM使用率迅速增加

以下是我的flask后端的代码:

@socketio.on('input image', namespace='/test')
 def test_message(input):
#socketio.wait(seconds=2)
# name_emotion = []
today = date.today()
# print("Here")
input = input.split(",")[1]
# camera.enqueue_input(input)
image_data = input
# time.sleep(10)
global name_emotion
model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(48,48,1)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(7, activation='softmax'))

model.load_weights('model.h5')
img = imread(io.BytesIO(base64.b64decode(image_data)))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = facecasc.detectMultiScale(gray,scaleFactor=1.3, minNeighbors=5)
for (x, y, w, h) in faces:
    # print('Infaces')
    cv2.rectangle(gray, (x, y-50), (x+w, y+h+10), (255, 0, 0), 2)
    roi_gray = gray[y:y + h, x:x + w]
    cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray, (48, 48)), -1), 0)
    prediction = model.predict(cropped_img)
以下是我的Javascript客户端的代码:

$(document).ready(function(){
let namespace = "/test";
let video = document.querySelector("#videoElement");
 let canvas = document.querySelector("#canvasElement");
// let canvas = document.querySelector("#videoElement");
let ctx = canvas.getContext('2d');
photo = document.getElementById('photo');
var localMediaStream = null;

var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + 
namespace);

function sendSnapshot() {
 if (!localMediaStream) {
  return;
 }

ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight, 0, 0, 300, 150);

let dataURL = canvas.toDataURL('image/jpeg');
socket.emit('input image', dataURL);
// socket.wait(seconds=2)

//socket.emit('output image')

//var img = new Image();
//socket.on('out-image-event',function(data){


//img.src = dataURL//data.image_data
//photo.setAttribute('src', data.image_data);

//});


}

//socket.on('connect', function() {
//console.log('Connected!');
//});

var constraints = {
  video: {
  width: { min: 640 },
  height: { min: 480 }
}
};
navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
video.srcObject = stream;
localMediaStream = stream;

  setInterval(function () {
  sendSnapshot();
  }, 50);
 }).catch(function(error) {
console.log(error);
 });
 });

有谁能帮我找出问题所在吗?

您正在做的事情需要大量使用RAM,那么为什么您认为这不是预期的呢?您每秒发送20张图像。服务器能跟上这个速度吗?是的,我理解,但是在处理每条消息之后,flask不应该释放内存吗?flask没有使用内存。您使用的其他库是。