Python
画像処理
OpenCV
DeepLearning
人工知能

pythonでdarknet(yolov2)の検出結果を画像に埋め込む

More than 1 year has passed since last update.

やりたいこと

以前の記事リアルタイム物体検出システムdarknetをpythonでサーバ化でご紹介したdarknetをpythonでいじってみよう第二段です。

  • 前回

    • 画像をPOSTすると、「オブジェクト名、スコア」が返ってくるAPIを作成
  • 今回

    • 前回作成したAPIのレスポンスに位置情報を返すよう修正する
    • 検出結果が埋め込まれた画像を返すAPIを追加する

なお、darknetやpythonのバージョンは前回の記事と同様のため、省略します。

動作方法

ソースはgithubに置いております。

起動については、前回記事リアルタイム物体検出システムdarknetをpythonでサーバ化 を参考にしてください!

確認方法

検出結果のJSON取得

curlで以下のように画像ファイルをアップロードしてください

$ curl -XPOST -F file=@./data/person.jpg http://localhost:8080/detect`

jsonで下記のように結果が返ってこればOKです!

{
  "result": [
    {
      "bounding_box": {
        "height": 86.09929656982422,
        "width": 137.61703491210938,
        "x_min": 61.68614196777344,
        "y_min": 264.98239517211914
      },
      "obj_name": "dog",
      "score": 0.8622361421585083
    },
    {
      "bounding_box": {
        "height": 285.868408203125,
        "width": 84.6079330444336,
        "x_min": 187.8837776184082,
        "y_min": 96.93341064453125
      },
      "obj_name": "person",
      "score": 0.8603283762931824
    },
    {
      "bounding_box": {
        "height": 220.17135620117188,
        "width": 191.89932250976562,
        "x_min": 399.44847106933594,
        "y_min": 131.2899169921875
      },
      "obj_name": "horse",
      "score": 0.8156660199165344
    }
  ],
  "status": "200"
}

検出結果の画像取得

こちらもcurlにて確認できます。

$ curl -XPOST -F file=@/home/omori/darknet/data/person.jpg http://localhost:8080/get_predict_image > predictions.jpg

少し時間がかかりますが、成功すると該当フォルダにpredictions.jpgが出力されているはずです。
(チュートリアルをやっている場合は、同じ画像名で出力されるので、predictions.jpgの名前を変更してcurlをするか、あるいは、ls -allで更新時刻を確認してみてください)

この画像が下記のように表示されれば成功です
$ eog predictions.jpg

predictions.jpg

線の太さとか色とか文字の大きさとかフォントとかもろもろはもっとかっこよくできるので、
お好みでスクリプト編集してください(笑)

その他

はじめyoloの結果が、(x_min, y_min, x_max, y_max)とかかと思って書き込んでみたら、下記のようになってしまった(笑)

person_ver1.jpg

これを見て、x,yの中心と幅および高さが出てることに気づけたので、よかった、よかった。

2017/11/01 APIの仕様修正

yolo本家では、確信度はdetectionを行う際に指定していたので、
APIでも指定できるように変更しました。
なお、デフォルト値は、(本家と同様なはずの)0.25にしてます。

$ curl -XPOST -F thresh=0.1 -F file=@/home/omori/darknet/data/person.jpg http://localhost:8080/get_predict_image > predictions.jpg

と、-Fオプションで指定可能で、値を小さくするとより多くの物体検出結果が返ってきますが、その分ご認識も多くなるので、ご注意ください。

参考