darknet(yolo)をサーバ化したpythonのソースです。
darknetについては下記を見てください
本サーバでは2つのAPIを実装しています。
-
検出結果取得API URI: '/detect' パラメータは"file"と"thresh"(閾値)です。 閾値は任意で、デフォルトはdarknet本家と同じ0.25にしてます。 低く設定するとその分、より多くの検出結果が返ってきますが、 誤認識も多くなります。
-
検出結果の画像取得API URI: '/get_predict_image' パラメータは検出結果取得APIと同様です
-
Python: 3.5.x
3.5.2でのみ動作確認しています
-
darknet revision
9a4b19c4158b064a164e34a83ec8a16401580850
上記のコミットでのみ動作確認しています。
-
darknetを本家のサイトに従いインストールする
-
本レポジトリをcloneする
$ git clone https://github.com/komorin0521/darknet_server
-
本レポジトリのファイルをdarknetと同様のフォルダに移動させる
$ cp -r darknet_server/* darknet/python
-
pipを用いて必要なパッケージをインストールする
$ (sudo) pip install -r requirements.txt
-
サーバを起動する
$ PYTHONPATH=${darknet_path}/python python python/darknet_server.py -cf ./cfg/yolov3.cfg -df ./cfg/coco.data -wf ./yolov3.weights -ud ./upload -pf false
You can show the detail of arguments using option of "-h".
-
別ターミナルを開いて結果を確認する
-
検出結果取得API
$ curl -XPOST -F file=@./data/person.jpg http://localhost:8080/detect
正しく動作していた場合、下記のような結果が返ってきます。 "-pf"オプションがtrueかつ'/var/www/html/images'に対してpythonプロセスの実行ユーザに書き込み権限があれば 画像パスも返します。
{ 'status' : 200, 'result' : [ { 'obj_name' : 'dog', 'score' : 0.86223..., 'bounding_box' : { 'height' : 86.09..., 'width' : 137.617..., 'x_min': '61.686...', 'y_min': '264.982...' } }, { ... } ], 'img_src' : 'http://localhost/images/yyyymmdd_pred.jpg' }
異なる閾値で結果を取得する場合は下記のようにリクエストしてください
curl -F file=@./data/person.jpg -F thresh=0.850 http://localhost:8080/detect
-
検出画像取得API
$ curl -XPOST -F file=@/home/omori/darknet/data/person.jpg http://localhost:8080/get_predict_image > predictions.jpg
異なる閾値で結果を取得する場合は下記のようにリクエストしてください
curl -F file=@./data/person.jpg -F thresh=0.850 http://localhost:8080/get_predict_image > predictions.jpg
-
引数の詳細等については下記のコマンドを実行してください
$ python darknet_server.py -h
ご質問等があればpullリクエストやメールください
email: [email protected]