学習済みのdarknetの重みはOpencv(Python,C++)のdnnモジュールでも直接読み込むことができ、次のプログラムで示す配列box[](最後から3行目あたり)で取得することができます。
ぜひお試しください。
以下のプログラムは、次の環境で動作確認をしています。
Python3.8
OpenCV4
CPU:Intel Core i5 10210u
OS:Ubuntu 20.04 LTS
対象画像:./abc.png
クラス名:./darknet_cfg/coco.names
cfgファイル:./darknet_cfg/yolov4-tiny.cfg
weightsファイル:./darknet_cfg/yolov4-tiny.weights
この記事を参考にしました
・https://opencv-tutorial.readthedocs.io/en/latest/yolo/yolo.html
・https://gist.github.com/YashasSamaga/e2b19a6807a13046e399f4bc3cca3a49#file-yolov4-py
サンプルプログラムを示します。この場合、yolov4の実装ではありますが、v2でもv3でも動きます。パスは適宜変更してください。
Python
1 # reference src : https://gist.github.com/YashasSamaga/e2b19a6807a13046e399f4bc3cca3a49#file-yolov4-py
2
3 import cv2
4 import time
5
6 CONFIDENCE_THRESHOLD = 0.3
7 NMS_THRESHOLD = 0.4
8 COLORS = [ ( 0 , 255 , 255 ) , ( 255 , 255 , 0 ) , ( 0 , 255 , 0 ) , ( 255 , 0 , 0 ) ]
9
10 class_names = [ ]
11 with open ( "./darknet_cfg/coco.names" , "r" ) as f :
12 class_names = [ cname . strip ( ) for cname in f . readlines ( ) ]
13
14 img = cv2 . imread ( "./abc.png" )
15
16 net = cv2 . dnn . readNet ( "./darknet_cfg/yolov4-tiny.weights" , "./darknet_cfg/yolov4-tiny.cfg" )
17
18 net . setPreferableBackend ( cv2 . dnn . DNN_TARGET_CPU )
19 net . setPreferableTarget ( cv2 . dnn . DNN_TARGET_CPU )
20 model = cv2 . dnn_DetectionModel ( net )
21 model . setInputParams ( size = ( 416 , 416 ) , scale = 1 / 255 , swapRB = True )
22
23 classes , scores , boxes = model . detect ( img , CONFIDENCE_THRESHOLD , NMS_THRESHOLD )
24 start_drawing = time . time ( )
25
26 for ( classid , score , box ) in zip ( classes , scores , boxes ) :
27 color = COLORS [ int ( classid ) % len ( COLORS ) ]
28 label = "%s : %f" % ( class_names [ classid [ 0 ] ] , score )
29 cv2 . rectangle ( img , box , color , 2 )
30 cv2 . putText ( img , label , ( box [ 0 ] , box [ 1 ] - 10 ) , cv2 . FONT_HERSHEY_SIMPLEX , 0.5 , color , 2 )
31 # print box
32 print ( "box[0]=" + str ( box [ 0 ] ) + " box[1]=" + str ( box [ 1 ] ) + " box[2]=" + str ( box [ 2 ] ) + " box[3]=" + str ( box [ 3 ] ) )
33 cv2 . imshow ( "detections" , img )
34 cv2 . waitKey ( 0 )
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/12 07:36 編集
2021/07/13 07:22
2021/07/13 12:28 編集
2021/07/14 04:57