我有一个问题,当Flask api(获取)上存在一个get请求时,我创建了一个脚本来使用cv2保存照片,图像被发送到ftp服务器,并以json的名称发送文件。
问题是第一个请求工作正常,但是当发送第二个请求的应用程序始终保持加载状态,不发送错误并且框架确实打开时,我认为保存其他实例的cv2或进程destroywindow尚未完成。
这是我的代码和过程的注释。
from flask import Flask, jsonify
import numpy as np
import ftplib as ftp
from cv2 import cv2
import datetime
import os
app = Flask(__name__)
@app.route('/image')
def get_images():
user = "user"
password = "pass"
server = ftp.FTP()
server.connect('1.1.1.1', 21)
try:
print("Logging in...")
server.login(user, password)
except:
return jsonify({ "error": "error: not acces ftp " }), 500
try:
cam = cv2.VideoCapture(0)
if not cam.isOpened():
raise NameError('Just a Dummy Exception, write your own')
except cv2.error as e:
print("cv2.error:", e)
except Exception as e:
print("Exception:", e)
else:
print(cam.isOpened())
try:
cv2.namedWindow("test")
except cv2.error as e:
print("cv2.error:", e)
except Exception as e:
print("Exception:", e)
else:
print("no problem reported")
while(cam.isOpened()):
retval, frame = cam.read()
if retval != True:
raise ValueError("Can't read frame")
break
print("cam read")
cv2.imshow("test", frame)
print("show image")
now=datetime.datetime.now().strftime("%Y%m%d%H%M%S")
img_name = "opencv_frame_{}.png".format(now)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
with open(img_name, 'rb') as f:
try:
server.storbinary('STOR '+img_name, f)
print("save image on FTP Server")
print("Delete Local image")
os.remove(img_name)
break
except ftp.all_errors as e:
return json.dumps({ "error": "Error writing ftp server:"+e}), 500
break
print("show image")
cam.release()
cv2.destroyWindow("test")
server.quit()
server.close()
data=[{'image':img_name}]
return jsonify(data)
app.run(debug=True,host='0.0.0.0', port=5000)