Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have 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オプションで指定可能で、値を小さくするとより多くの物体検出結果が返ってきますが、その分ご認識も多くなるので、ご注意ください。

参考

komorin0521
1989年(平成)生まれの 好きな言語: Python フォローされてない方からのコメントも大歓迎です! なお、投稿した記事は個人としてのものであり、所属する団体とは関係ございません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away