teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

2021/12/07 15:20

投稿

adgjmptw-11
adgjmptw-11

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 前提・実現したいこと
2
- jupyterでdarknetのyolov3を実装し、webカメラでとった2枚のステレオ画像を読み込ませて、物体検知を行い、その検知できた中の人物のみのx座標を、取得して計算を行いたいと考えています。現在は、darknet.pyの内容を書き換えて、ターミナルからpython ./python/darknet.pyで動かして2つの画像共に物体検知、中心座標ともに検出結果が出るまでには行けたのですが、そこからx座標のみを取得して計算をすることがうまく出来ずにいます。完全なプログラミング初心者のため何をすれば良いかわかりません。そのため、こちらのサイトに質問させていただきました。以下のコードで何かおかしな点があればご指摘いただきたく存じます。
2
+ jupyterでdarknetのyolov3を実装し、webカメラでとった2枚のステレオ画像を読み込ませて、物体検知を行い、その検知できた中の人物のみのx座標を、取得して計算を行いたいと考えています。現在は、darknet.pyの内容を書き換えて、ターミナルからpython ./python/darknet.pyで動かして2つの画像共に物体検知、中心座標ともに検出結果が出るまでには行けたのですが、そこからx座標のみを取得して計算をすることがうまく出来ずにいます。プログラミング初心者のため何をすれば良いかわかりません。そのため、こちらのサイトに質問させていただきました。以下のコードで何かおかしな点があればご指摘いただきたく存じます。
3
3
  ```
4
4
  エラーメッセージ
5
5
 

2

2021/12/07 15:20

投稿

adgjmptw-11
adgjmptw-11

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,224 @@
1
1
  ### 前提・実現したいこと
2
2
  jupyterでdarknetのyolov3を実装し、webカメラでとった2枚のステレオ画像を読み込ませて、物体検知を行い、その検知できた中の人物のみのx座標を、取得して計算を行いたいと考えています。現在は、darknet.pyの内容を書き換えて、ターミナルからpython ./python/darknet.pyで動かして2つの画像共に物体検知、中心座標ともに検出結果が出るまでには行けたのですが、そこからx座標のみを取得して計算をすることがうまく出来ずにいます。完全なプログラミング初心者のため何をすれば良いかわかりません。そのため、こちらのサイトに質問させていただきました。以下のコードで何かおかしな点があればご指摘いただきたく存じます。
3
+ ```
4
+ エラーメッセージ
3
5
 
6
+ class_name= person
7
+ confidence= 0.9979870915412903
8
+ box1= (757.0997924804688, 574.14208984375, 382.11517333984375, 989.4730224609375)
9
+ class_name= chair
4
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
10
+ confidence= 0.939139187335968
11
+ box1= (456.80657958984375, 973.4913330078125, 297.5714111328125, 218.9896697998047)
12
+ class_name= diningtable
13
+ confidence= 0.867287278175354
14
+ box1= (150.55377197265625, 963.4379272460938, 279.58843994140625, 256.3335876464844)
15
+ class_name= person
16
+ confidence= 0.9986228346824646
17
+ box2= (789.9702758789062, 566.0933227539062, 352.4512939453125, 985.2094116210938)
18
+ class_name= chair
19
+ confidence= 0.9849683046340942
20
+ box2= (459.69384765625, 976.21435546875, 317.9201965332031, 218.52052307128906)
21
+ class_name= tvmonitor
22
+ confidence= 0.8856194019317627
23
+ box2= (145.66439819335938, 574.79736328125, 228.37103271484375, 259.6019592285156)
24
+ class_name= diningtable
25
+ confidence= 0.8115013837814331
26
+ box2= (172.94419860839844, 939.2078857421875, 342.9265441894531, 264.38812255859375)
27
+ Traceback (most recent call last):
28
+ File "./python/darknet.py", line 181, in <module>
29
+ D = x1 - x2
30
+ NameError: name 'x1' is not defined
5
31
 
6
- ### 発生している問題・エラーメッセージ
7
32
 
8
- ```
9
- エラーメッセージ
10
- ```
11
-
12
33
  ### 該当のソースコード
13
34
 
35
+ from ctypes import *
36
+ import math
14
- ```ここに言語名を入力
37
+ import random
38
+ import numpy as np
39
+
40
+ def sample(probs):
41
+ s = sum(probs)
42
+ probs = [a/s for a in probs]
43
+ r = random.uniform(0, 1)
44
+ for i in range(len(probs)):
45
+ r = r - probs[i]
46
+ if r <= 0:
15
- ソースコード
47
+ return i
48
+ return len(probs)-1
49
+
50
+ def c_array(ctype, values):
51
+ arr = (ctype*len(values))()
52
+ arr[:] = values
53
+ return arr
54
+
55
+ class BOX(Structure):
56
+ _fields_ = [("x", c_float),
57
+ ("y", c_float),
58
+ ("w", c_float),
59
+ ("h", c_float)]
60
+
61
+ class DETECTION(Structure):
62
+ _fields_ = [("bbox", BOX),
63
+ ("classes", c_int),
64
+ ("prob", POINTER(c_float)),
65
+ ("mask", POINTER(c_float)),
66
+ ("objectness", c_float),
67
+ ("sort_class", c_int)]
68
+
69
+
70
+ class IMAGE(Structure):
71
+ _fields_ = [("w", c_int),
72
+ ("h", c_int),
73
+ ("c", c_int),
74
+ ("data", POINTER(c_float))]
75
+
76
+ class METADATA(Structure):
77
+ _fields_ = [("classes", c_int),
78
+ ("names", POINTER(c_char_p))]
79
+
80
+
81
+
82
+ #lib = CDLL("/home/pjreddie/documents/darknet/libdarknet.so", RTLD_GLOBAL)
83
+ lib = CDLL("libdarknet.so", RTLD_GLOBAL)
84
+ lib.network_width.argtypes = [c_void_p]
85
+ lib.network_width.restype = c_int
86
+ lib.network_height.argtypes = [c_void_p]
87
+ lib.network_height.restype = c_int
88
+
89
+ predict = lib.network_predict
90
+ predict.argtypes = [c_void_p, POINTER(c_float)]
91
+ predict.restype = POINTER(c_float)
92
+
93
+ set_gpu = lib.cuda_set_device
94
+ set_gpu.argtypes = [c_int]
95
+
96
+ make_image = lib.make_image
97
+ make_image.argtypes = [c_int, c_int, c_int]
98
+ make_image.restype = IMAGE
99
+
100
+ get_network_boxes = lib.get_network_boxes
101
+ get_network_boxes.argtypes = [c_void_p, c_int, c_int, c_float, c_float, POINTER(c_int), c_int, POINTER(c_int)]
102
+ get_network_boxes.restype = POINTER(DETECTION)
103
+
104
+ make_network_boxes = lib.make_network_boxes
105
+ make_network_boxes.argtypes = [c_void_p]
106
+ make_network_boxes.restype = POINTER(DETECTION)
107
+
108
+ free_detections = lib.free_detections
109
+ free_detections.argtypes = [POINTER(DETECTION), c_int]
110
+
111
+ free_ptrs = lib.free_ptrs
112
+ free_ptrs.argtypes = [POINTER(c_void_p), c_int]
113
+
114
+ network_predict = lib.network_predict
115
+ network_predict.argtypes = [c_void_p, POINTER(c_float)]
116
+
117
+ reset_rnn = lib.reset_rnn
118
+ reset_rnn.argtypes = [c_void_p]
119
+
120
+ load_net = lib.load_network
121
+ load_net.argtypes = [c_char_p, c_char_p, c_int]
122
+ load_net.restype = c_void_p
123
+
124
+ do_nms_obj = lib.do_nms_obj
125
+ do_nms_obj.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
126
+
127
+ do_nms_sort = lib.do_nms_sort
128
+ do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
129
+
130
+ free_image = lib.free_image
131
+ free_image.argtypes = [IMAGE]
132
+
133
+ letterbox_image = lib.letterbox_image
134
+ letterbox_image.argtypes = [IMAGE, c_int, c_int]
135
+ letterbox_image.restype = IMAGE
136
+
137
+ load_meta = lib.get_metadata
138
+ lib.get_metadata.argtypes = [c_char_p]
139
+ lib.get_metadata.restype = METADATA
140
+
141
+ load_image = lib.load_image_color
142
+ load_image.argtypes = [c_char_p, c_int, c_int]
143
+ load_image.restype = IMAGE
144
+
145
+ rgbgr_image = lib.rgbgr_image
146
+ rgbgr_image.argtypes = [IMAGE]
147
+
148
+ predict_image = lib.network_predict_image
149
+ predict_image.argtypes = [c_void_p, IMAGE]
150
+ predict_image.restype = POINTER(c_float)
151
+
152
+ def classify(net, meta, im):
153
+ out = predict_image(net, im)
154
+ res = []
155
+ for i in range(meta.classes):
156
+ res.append((meta.names[i], out[i]))
157
+ res = sorted(res, key=lambda x: -x[1])
158
+ return res
159
+
160
+ def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45):
161
+ im = load_image(image, 0, 0)
162
+ num = c_int(0)
163
+ pnum = pointer(num)
164
+ predict_image(net, im)
165
+ dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0, pnum)
166
+ num = pnum[0]
167
+ if (nms): do_nms_obj(dets, num, meta.classes, nms);
168
+
169
+ res = []
170
+ for j in range(num):
171
+ for i in range(meta.classes):
172
+ if dets[j].prob[i] > 0:
173
+ b = dets[j].bbox
174
+ res.append((meta.names[i], dets[j].prob[i], (b.x, b.y, b.w, b.h)))
175
+ res = sorted(res, key=lambda x: -x[1])
176
+ free_image(im)
177
+ free_detections(dets, num)
178
+ return res
179
+
180
+ if __name__ == "__main__":
181
+ net = load_net("cfg/yolov3.cfg".encode('ascii'),"yolov3.weights".encode('ascii'), 0)
182
+ meta = load_meta("cfg/coco.data".encode('ascii'))
183
+ r1 = detect(net, meta, "path1.jpg".encode('ascii'))
184
+ r2 = detect(net, meta, "path2.jpg".encode('ascii'))
185
+ kekka1 = np.empty((10,3))
186
+ kekka2 = np.empty((10,3))
187
+ for kekka1 in r1:
188
+ print('class_name=', kekka1[0].decode('ascii'))
189
+ print('confidence=', kekka1[1])
190
+ print('box1=', kekka1[2])
191
+
192
+ if kekka1[0].decode('ascii') == "person":
193
+ kekka1[2] = bbox1(0, 1, 2, 3)
194
+ x1 = bbox1(0)
195
+ y1 = bbox1(0)
196
+
197
+ for kekka2 in r2:
198
+ print('class_name=', kekka2[0].decode('ascii'))
199
+ print('confidence=', kekka2[1])
200
+ print('box2=', kekka2[2])
201
+
202
+ if kekka1[0].decode('ascii') == "person":
203
+ kekka1[2] = bbox1(0, 1, 2, 3)
204
+ x1 = bbox1(0)
205
+ y1 = bbox1(0)
206
+
207
+ if kekka2[0].decode('ascii') == "person":
208
+ kekka2[2] = bbox2(0, 1, 2, 3)
209
+ x2 = bbox2(0)
210
+ y2 = bbox2(0)
211
+
212
+ F = 123.7
213
+ T = 0.16
214
+
215
+ D = x1 - x2
216
+ z = F*T/D
217
+
218
+ print(z)
219
+
220
+ pythonで実装しています。
221
+
16
222
  ```
17
223
 
18
224
  ### 試したこと

1

2021/12/07 13:47

投稿

adgjmptw-11
adgjmptw-11

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,6 @@
1
1
  ### 前提・実現したいこと
2
+ jupyterでdarknetのyolov3を実装し、webカメラでとった2枚のステレオ画像を読み込ませて、物体検知を行い、その検知できた中の人物のみのx座標を、取得して計算を行いたいと考えています。現在は、darknet.pyの内容を書き換えて、ターミナルからpython ./python/darknet.pyで動かして2つの画像共に物体検知、中心座標ともに検出結果が出るまでには行けたのですが、そこからx座標のみを取得して計算をすることがうまく出来ずにいます。完全なプログラミング初心者のため何をすれば良いかわかりません。そのため、こちらのサイトに質問させていただきました。以下のコードで何かおかしな点があればご指摘いただきたく存じます。
2
3
 
3
- ここに質問の内容を詳しく書いてください。
4
- (例)PHP(CakePHP)で●●なシステムを作っています。
5
4
  ■■な機能を実装中に以下のエラーメッセージが発生しました。
6
5
 
7
6
  ### 発生している問題・エラーメッセージ