#javascript #python #flask #fast-ai
#javascript #python #flask #быстрый ИИ
Вопрос:
Я пытаюсь отправить URL изображения
var photoData = $("#photo").attr("src");
// console.log(photoURL);
console.log(photoData);
var data = photoData;
$.post("/analyze", data)
.done((prediction) => {
console.log('success')
})
для этого маршрута с использованием Flask Python
@app.route('/analyze', methods=['POST'])
async def analyze(request):
predictionRaw = learn.predict(open_image(get_image_files(request)[0]))
prediction = str(predictionRaw)
return prediction
learn.predict()
используется библиотека Fast Ai. Для кода Python я фактически следую этому коду.
Но по какой-то причине это всегда выдает мне эту ошибку analyze() missing 1 required positional argument: 'request'
.
Почему это произошло и что я сделал не так? Я почти уверен, что правильно отправил аргумент запроса, используя JS Ajax.
Traceback (most recent call last):
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:UsersapanjAnaconda3libsite-packagesflask_socketio__init__.py", line 46, in __call__
start_response)
File "C:UsersapanjAnaconda3libsite-packagesengineiomiddleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:UsersapanjAnaconda3libsite-packagesflask_compat.py", line 39, in reraise
raise value
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:UsersapanjAnaconda3libsite-packagesflask_compat.py", line 39, in reraise
raise value
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
TypeError: analyze() missing 1 required positional argument: 'request'
Комментарии:
1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.
2. @furas Я только что отредактировал свой вопрос с помощью обратной трассировки.
Ответ №1:
Вы не передаете request
URL-адрес. Он поступает в запрос автоматически. Попробуйте:
from flask import request
@app.route('/analyze', methods=['POST'])
def analyze():
print(request.get_data()) # to see what you're sending
predictionRaw = learn.predict(open_image(get_image_files(request.data)))
prediction = str(predictionRaw)
return prediction
Комментарии:
1. Я полагаю, это работает? На выходном терминале больше нет ошибки трассировки, но в консоли браузера я получаю
POST http://url/analyze 500 (INTERNAL SERVER ERROR)
ошибку.