У меня проблема, я создаю скрипт для сохранения фотографии с помощью cv2, когда существует запрос get на Flask api (get), изображение отправляется на ftp-сервер и отправляет имя файла в json.
Проблема в том, что первый запрос работает нормально, но при отправке второго запроса приложение все время загружается, не отправляет ошибку и фрейм открывается, я думаю, что cv2 сохраняет другой экземпляр или процесс destroywindow не завершен. ![enter image description here](https://i.stack.imgur.com/cUpCY.png)
Это мой код и процесс прокомментирован.
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)