2018年8月31日金曜日

OpenCVでYOLOv3のサンプルが動かなかったのでPRした

今回、OpenCVに初めてIssueとPull requestを発行して、Margeされたのでその経緯を書きたいと思う。
また、同じエラーの人のために(3.4.2、3.4.3で出ると思います)。




発端

OpenCV 3.4.2でYOLOv3がサポートされたので、動作確認しようと思ったのが発端。



しかし、サンプルを動かしたのだが、エラーとなってしまった。。。

サンプルはPython(samples/dnn/object_detection.py)。
自分の環境は以下。

  • OpenCV => 3.4.2
  • OS => Fedora 28
  • Compiler => GCC 8.1
  • Python3 => 3.6.6

実行したときのコマンド
$ python3 object_detection.py --input=./test.jpg --model=./yolov3.weights --config=./yolov3.cfg --classes=./object_detection_classes_coco.txt --scale=0.00392 --width=416 --height=416

発生したエラー
Traceback (most recent call last):
File "object_detection.py", line 196, in 
postprocess(frame, outs)
File "object_detection.py", line 162, in postprocess
drawPred(classIds[i], confidences[i], left, top, left + width, top + height)
File "object_detection.py", line 73, in drawPred
cv.rectangle(frame, (left, top), (right, bottom), (0, 255, 0))
TypeError: integer argument expected, got float


調べてみた

ググってみても、同じようにコケている人もおらず、C++では動いていそう。

怒られている理由は「cv.rectangleの引数には整数を指定しろ!」。
確かに座標(left, top, right, bottom)は整数である必要がある。
おそらく座標のパラメータが整数でない型なんだなーと思っていた。
実際はleftとtopが浮動小数点だった。
はい。。。Pythonさん、すいません。。。


最初は環境??とか思っていたが、原因はサンプルの以下の2行が原因だとわかった。
https://github.com/opencv/opencv/blob/3.4.2/samples/dnn/object_detection.py#L145-L146
left = center_x - width / 2
top = center_y - height / 2

Python3の場合、整数除算の結果は浮動小数点である。
(Python2は整数除算の結果は整数なので、Python2で実行すると問題ない)

なので、整数型に変換してあげると動いた!
left = int(center_x - width / 2)
top = int(center_y - height / 2)


IssueとPull Requestを出してみる

今までお世話になったOpenCVなので、勇気をだして初めてのIssueとPull Requestを送ってみることにした。

Pull Requestを出すにあたって公式も含めて以下を参考にした(ありがとうございます)。


Issue、Pull Requestとも反応が早いことにびっくり!
簡単だったこともあと思うが、1日もせず、マージされクローズしてしまった。

初めて出してみた感想は
  • 英語、やっぱりだめ、、、もっと勉強しないと
    (Google翻訳すごい)
  • 焦ってはだめ
    (Enterキーを間違って押してIssueのタイトルが変になってしまった)
  • 反応早い!ソッコーで反応くる
  • しかも、解決方法を複数提案
    あ、、、そういう方法もあるねと勉強になる!
  • good first issueなんてラベルがつくとテンション上がる!
  • マージされたらテンションMax!!
  • あれ?Issue誰クローズするの?僕??と思っていたら、クローズされた
    (これなにがただしいんだろう?)
  • はじめの一歩はとても戸惑うが、機会があれば次もチャレンジ!

次のリリース(3.4.4)が楽しみ!

0 件のコメント:

コメントを投稿