16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

darknet yolo v3をpython3(.5.2)で試す

Last updated at Posted at 2018-06-17

やりたいこと

darknet yoloにpython IFがありますが、
公開されているpython/darknet.pyはデフォルトではpython2でしか動作しなかったので、
python3(.5.2)で動作するようにする

実行環境

  • Ubuntu 16.04.4
  • python 3.5.2

python3(.5.2)で実行した場合のエラー

ひとまず、必要最低限の下記3点を変更し実行

  1. libdarknet.soのパス
  2. config, weightファイルのパス
  3. print関数(print r -> print(r))

が、あえなくエラー...

Traceback (most recent call last):
  File "python/darknet_org.py", line 151, in <module>
    net = load_net("cfg/yolov3.cfg", "yolov3.weights", 0)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

修正のための調査

どうやらload_networkのタイプが違うと言われているので調査

...
 85 load_net = lib.load_network
 86 load_net.argtypes = [c_char_p, c_char_p, c_int]
 87 load_net.restype = c_void_p
...
151     net = load_net("cfg/yolov3.cfg", "yolov3.weights", 0)
...

c_char_pに対してstr型の"cfg/yolov3.cfg""yolov3.weights"をインプットしているところが怪しい
で、python3のリファレンス16.16. ctypes — Pythonのための外部関数ライブラリ¶(原文)で確認してみると...
16.16.1.4. 基本データ型にc_char_pはバイト列 or Noneと記載されている
ということは、"cfg/yolov3.cfg" -> b"cfg/yolov3.cfg"というようにバイト文字で引数指定すればよいのでは!?

修正 & 実験

c_char_pで指定されている部分の引数をすべてb"..."にして、実行してみる

...
151     net = load_net(b"cfg/yolov3.cfg", b"yolov3.weights", 0)
152     meta = load_meta(b"cfg/coco.data")
153     r = detect(net, meta, b"data/dog.jpg")
...
$ cd ~/work/darknet
$ python3 python/darknet.py
...
Loading weights from yolov3.weights...Done!
[(b'bicycle', 0.9941979646682739, (363.7811279296875, 278.96038818359375, 397.52166748046875, 331.17120361328125)), (b'dog', 0.9904678463935852, (221.56198120117188, 380.4324645996094, 186.3259735107422, 312.14471435546875)), (b'truck', 0.9110047221183777, (581.7490234375, 127.70638275146484, 215.17813110351562, 86.2370376586914))]

おお、動いた!めでたし、めでたし
結果もbytes型で返ってくるんや。

参考

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?