回答編集履歴
1
回答を追加。
test
CHANGED
@@ -11,3 +11,82 @@
|
|
11
11
|
|
12
12
|
解決しない場合は、これ以上エスパーするのは無理そうなので、現象が再現する最小のコードの提供をお願いします。
|
13
13
|
|
14
|
+
# 2022/11/18 18:51追記
|
15
|
+
|
16
|
+
修正ありがとうございます。
|
17
|
+
掲載いただいたコードを実行してみましたが、実行できませんでした。
|
18
|
+
実行できることを確認して投稿していますか?
|
19
|
+
|
20
|
+
複数ファイルに跨がったプログラムを掲載する場合は、フォルダ/ファイル構造も記載いただかないと、どのように配置するのかが分かりません。
|
21
|
+
また、エラーメッセージは省略すること無く全文をテキストで掲載ください。
|
22
|
+
|
23
|
+
|
24
|
+
コードは実行できないので、適当に改造して実行してみました。
|
25
|
+
|
26
|
+
以下のコードで確認できると思います。
|
27
|
+
```python
|
28
|
+
from flask import Flask, request
|
29
|
+
|
30
|
+
app = Flask(__name__)
|
31
|
+
|
32
|
+
if __name__ == '__main__':
|
33
|
+
app.run()
|
34
|
+
|
35
|
+
|
36
|
+
@app.post("/detect")
|
37
|
+
def detectio(): # これは同じ名前の関数が2個になってしまっていたので、1文字削りました。誤字ではないです。
|
38
|
+
ret = detection()
|
39
|
+
return ret
|
40
|
+
|
41
|
+
|
42
|
+
def load_image():
|
43
|
+
print('----')
|
44
|
+
filename = request.json["filename"]
|
45
|
+
print(filename)
|
46
|
+
|
47
|
+
|
48
|
+
def detection():
|
49
|
+
print("test")
|
50
|
+
load_image()
|
51
|
+
|
52
|
+
|
53
|
+
```
|
54
|
+
|
55
|
+
curlが投げられる環境を作るのが面倒だったので、以下のHTTPリクエストを送信しました。
|
56
|
+
```
|
57
|
+
POST http://localhost:5000/detect
|
58
|
+
Accept: application/json
|
59
|
+
|
60
|
+
{"filename": "xxx.jpg"}
|
61
|
+
|
62
|
+
```
|
63
|
+
|
64
|
+
POSTでやる意味ないですが、念のため。
|
65
|
+
|
66
|
+
これを実行した結果は以下です。
|
67
|
+
```text
|
68
|
+
test
|
69
|
+
----
|
70
|
+
127.0.0.1 - - [18/Nov/2022 19:08:21] "POST /detect HTTP/1.1" 400 -
|
71
|
+
```
|
72
|
+
|
73
|
+
`reequest.json`は内部的に`get_json`を呼んでいるそうです。
|
74
|
+
|
75
|
+
[get_json](https://flask.palletsprojects.com/en/2.2.x/api/#flask.Request.get_json)
|
76
|
+
|
77
|
+
MIMEタイプがapplication/jsonでない、もしくはjsonの解析に失敗した場合、400を返すと書いてあるので、値が取れていないんじゃないかと思います。
|
78
|
+
PyCharmなどを使って、ブレークを設定し、requestに何が入っているのか確認してみるのが近道だと思います。
|
79
|
+
(私のやり方の場合は、request.dataにはデータが入っていました。)
|
80
|
+
|
81
|
+
また、Flaskで@appや@blueprintでデコレートされている関数は、有効な応答を返す必要があります。
|
82
|
+
具体的には、detectのreturnを`return None`とかにして上げるとエラーが出て分かると思います。
|
83
|
+
```text
|
84
|
+
TypeError: The view function did not return a valid response. The return type must be a string, dict, list, tuple with headers or status, Response instance, or WSGI callable, but it was a bool.
|
85
|
+
```
|
86
|
+
エラーは上記の通りです。
|
87
|
+
returnには、stringか、dictか、listか、ヘッダかステータスを含むtupleか、Responseである必要があります。
|
88
|
+
`detection()`で何か返すか、`@app.post("/detect")`のreturnに`return 'OK'`とか返すか、とりあえず何か返してください。
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|