Отправка и получение изображений в приложение Flask - PullRequest
0 голосов
/ 13 июля 2020

Я создал контейнер Docker с запущенным внутри Flask приложением, которое принимает изображение JPG в качестве входных данных и должно обрабатывать изображение в качестве выходных. Ниже приведены коды на стороне сервера и на стороне клиента:

Код на стороне сервера


from flask import Flask, render_template, request, send_file,jsonify
import cv2
import numpy as np
import base64

app = Flask(__name__)

@app.route('/add_face', methods=['GET', 'POST'])
def add_face():
    if request.method == 'POST':
        #  read encoded image
        imageString = base64.b64decode(request.form['img'])

        #  convert binary data to numpy array
        nparr = np.fromstring(imageString, np.uint8)

        #  let opencv decode image to correct format
        image2 = cv2.imdecode(nparr, cv2.IMREAD_ANYCOLOR);

    return jsonify({'msg': 'success', 'size': [image2.width, image2.height]})

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=False, port=5000)

Код на стороне клиента

import requests
import base64
import matplotlib.pyplot as plt

URL = "http://localhost:5000/add_face"

#  first, encode our image with base64
with open("Image2.jpg", "rb") as imageFile:
    img = base64.b64encode(imageFile.read())

response = requests.post(URL, data={"name":"Trump", "img":str(img)})
print(response.content)

Однако это приводит к следующей ошибке:

b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>500 Internal Server Error</title>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>\n'

Журналы Docker приведены ниже:

main.py:17: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
  nparr = np.fromstring(imageString, np.uint8)
[2020-07-13 13:26:31,483] ERROR in app: Exception on /add_face [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "main.py", line 24, in add_face
    return jsonify({'msg': 'success', 'size': [image2.width, image2.height]})
AttributeError: 'NoneType' object has no attribute 'width'
172.17.0.1 - - [13/Jul/2020 13:26:31] "POST /add_face HTTP/1.1" 500 -

Есть ли какие-либо проблемы при отправке или получении этого изображения? Кроме того, могу ли я использовать что-то похожее на приведенный ниже код, чтобы вернуть обработанное изображение обратно в качестве ответа:

return send_file(image2,
        attachment_filename='image.jpg',
        mimetype='image/jpg')

Любая помощь будет принята с благодарностью. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...