将图像路径传递给 Flask 应用程序时出错
Error passing image path to Flask application
我有一个 Flask 应用程序,它应该接收两个图像并输出一个 ,但是当我 运行 这个应用程序时我得到这些错误,代码在没有 Flask 的情况下工作完美
错误:
[ WARN:0@11.916] global /io/opencv/modules/imgcodecs/src/loadsave.cpp (239) findDecoder imread_('/home/criuser/Téléchargements/20210728_122019.jpg'): can't open/read file: check file path/integrity
[2022-02-15 22:17:15,439] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/home/criuser/PycharmProjects/FINAL_AI/venv/final.py", line 19, in API
result = change_bg.change_bg_img(f_image_path=original,
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/pixellib/tune_bg/__init__.py", line 236, in change_bg_img
seg_image = self.segmentAsPascalvoc(f_image_path)
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/pixellib/tune_bg/__init__.py", line 53, in segmentAsPascalvoc
h, w, n = image.shape
AttributeError: 'NoneType' object has no attribute 'shape'
127.0.0.1 - - [15/Feb/2022 22:17:15] "GET /?original=/home/criuser/Téléchargements/20210728_122019.jpg&background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg HTTP/1.1" 500 -
代码:
curl
"http://127.0.0.1:5000?original=/home/criuser/Téléchargements/20210728_122019.jpg&background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg"
@app.route('/',methods=['GET'])
def API():
if request.method == 'GET':
original = request.args.get('original')
background = request.args.get('background')
change_bg = alter_bg(model_type="pb")
change_bg.load_pascalvoc_model("/home/criuser/Téléchargements/xception_pascalvoc.pb")
result = change_bg.change_bg_img(f_image_path=original,
b_image_path=background,
output_image_name="/home/criuser/Téléchargements/new.jpg")
img_base64 = base64.b64encode(result.read())
return jsonify(img_base64.decode())
问题是 curl
,而不是 flask
。
似乎 curl
将其作为 latin1
(iso-8859-1
) 而不是 utf-8
发送,因此它将 é
转换为 é
- 并且稍后 flask
无法打开 Téléchargements
(而不是 Téléchargements
)
代码 'é'.encode('latin1').decode()
给出 é
- 所以它可以确认它使用 latin1
.
这在 curl
中正常工作:
curl -GET 'http://127.0.0.1:5000' --data-urlencode 'original=/home/criuser/Téléchargements/20210728_122019.jpg' --data-urlencode 'background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg'
原版url
http://127.0.0.1:5000?original=/home/criuser/Téléchargements/20210728_122019.jpg&background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg
适用于(对我而言):
- 网络浏览器(Firefox,Chrome)
- 控制台命令
wget
- 控制台命令
http
(python模块httpie)
- python模块
requests
- 测试网页的工具(API)postman, insomnia
但是标准模块 urllib.request
对本机字符有问题(它使用 ascii
编码)
我有一个 Flask 应用程序,它应该接收两个图像并输出一个 ,但是当我 运行 这个应用程序时我得到这些错误,代码在没有 Flask 的情况下工作完美
错误:
[ WARN:0@11.916] global /io/opencv/modules/imgcodecs/src/loadsave.cpp (239) findDecoder imread_('/home/criuser/Téléchargements/20210728_122019.jpg'): can't open/read file: check file path/integrity
[2022-02-15 22:17:15,439] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/home/criuser/PycharmProjects/FINAL_AI/venv/final.py", line 19, in API
result = change_bg.change_bg_img(f_image_path=original,
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/pixellib/tune_bg/__init__.py", line 236, in change_bg_img
seg_image = self.segmentAsPascalvoc(f_image_path)
File "/home/criuser/PycharmProjects/FINAL_AI/venv/lib/python3.8/site-packages/pixellib/tune_bg/__init__.py", line 53, in segmentAsPascalvoc
h, w, n = image.shape
AttributeError: 'NoneType' object has no attribute 'shape'
127.0.0.1 - - [15/Feb/2022 22:17:15] "GET /?original=/home/criuser/Téléchargements/20210728_122019.jpg&background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg HTTP/1.1" 500 -
代码:
curl "http://127.0.0.1:5000?original=/home/criuser/Téléchargements/20210728_122019.jpg&background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg"
@app.route('/',methods=['GET'])
def API():
if request.method == 'GET':
original = request.args.get('original')
background = request.args.get('background')
change_bg = alter_bg(model_type="pb")
change_bg.load_pascalvoc_model("/home/criuser/Téléchargements/xception_pascalvoc.pb")
result = change_bg.change_bg_img(f_image_path=original,
b_image_path=background,
output_image_name="/home/criuser/Téléchargements/new.jpg")
img_base64 = base64.b64encode(result.read())
return jsonify(img_base64.decode())
问题是 curl
,而不是 flask
。
似乎 curl
将其作为 latin1
(iso-8859-1
) 而不是 utf-8
发送,因此它将 é
转换为 é
- 并且稍后 flask
无法打开 Téléchargements
(而不是 Téléchargements
)
代码 'é'.encode('latin1').decode()
给出 é
- 所以它可以确认它使用 latin1
.
这在 curl
中正常工作:
curl -GET 'http://127.0.0.1:5000' --data-urlencode 'original=/home/criuser/Téléchargements/20210728_122019.jpg' --data-urlencode 'background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg'
原版url
http://127.0.0.1:5000?original=/home/criuser/Téléchargements/20210728_122019.jpg&background=/home/criuser/Téléchargements/Tableau_Dashboard.jpg
适用于(对我而言):
- 网络浏览器(Firefox,Chrome)
- 控制台命令
wget
- 控制台命令
http
(python模块httpie) - python模块
requests
- 测试网页的工具(API)postman, insomnia
但是标准模块 urllib.request
对本机字符有问题(它使用 ascii
编码)