質問編集履歴

3

2021/12/07 15:20

投稿

adgjmptw-11
adgjmptw-11

スコア0

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

2

2021/12/07 15:20

投稿

adgjmptw-11
adgjmptw-11

スコア0

test CHANGED
File without changes
test CHANGED
@@ -2,36 +2,448 @@
2
2
 
3
3
  jupyterでdarknetのyolov3を実装し、webカメラでとった2枚のステレオ画像を読み込ませて、物体検知を行い、その検知できた中の人物のみのx座標を、取得して計算を行いたいと考えています。現在は、darknet.pyの内容を書き換えて、ターミナルからpython ./python/darknet.pyで動かして2つの画像共に物体検知、中心座標ともに検出結果が出るまでには行けたのですが、そこからx座標のみを取得して計算をすることがうまく出来ずにいます。完全なプログラミング初心者のため何をすれば良いかわかりません。そのため、こちらのサイトに質問させていただきました。以下のコードで何かおかしな点があればご指摘いただきたく存じます。
4
4
 
5
-
6
-
7
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
8
-
9
-
10
-
11
- ### 発生している問題・エラーメッセージ
12
-
13
-
14
-
15
5
  ```
16
6
 
17
7
  エラーメッセージ
18
8
 
9
+
10
+
11
+ class_name= person
12
+
13
+ confidence= 0.9979870915412903
14
+
15
+ box1= (757.0997924804688, 574.14208984375, 382.11517333984375, 989.4730224609375)
16
+
17
+ class_name= chair
18
+
19
+ confidence= 0.939139187335968
20
+
21
+ box1= (456.80657958984375, 973.4913330078125, 297.5714111328125, 218.9896697998047)
22
+
23
+ class_name= diningtable
24
+
25
+ confidence= 0.867287278175354
26
+
27
+ box1= (150.55377197265625, 963.4379272460938, 279.58843994140625, 256.3335876464844)
28
+
29
+ class_name= person
30
+
31
+ confidence= 0.9986228346824646
32
+
33
+ box2= (789.9702758789062, 566.0933227539062, 352.4512939453125, 985.2094116210938)
34
+
35
+ class_name= chair
36
+
37
+ confidence= 0.9849683046340942
38
+
39
+ box2= (459.69384765625, 976.21435546875, 317.9201965332031, 218.52052307128906)
40
+
41
+ class_name= tvmonitor
42
+
43
+ confidence= 0.8856194019317627
44
+
45
+ box2= (145.66439819335938, 574.79736328125, 228.37103271484375, 259.6019592285156)
46
+
47
+ class_name= diningtable
48
+
49
+ confidence= 0.8115013837814331
50
+
51
+ box2= (172.94419860839844, 939.2078857421875, 342.9265441894531, 264.38812255859375)
52
+
53
+ Traceback (most recent call last):
54
+
55
+ File "./python/darknet.py", line 181, in <module>
56
+
57
+ D = x1 - x2
58
+
59
+ NameError: name 'x1' is not defined
60
+
61
+
62
+
63
+
64
+
65
+ ### 該当のソースコード
66
+
67
+
68
+
69
+ from ctypes import *
70
+
71
+ import math
72
+
73
+ import random
74
+
75
+ import numpy as np
76
+
77
+
78
+
79
+ def sample(probs):
80
+
81
+ s = sum(probs)
82
+
83
+ probs = [a/s for a in probs]
84
+
85
+ r = random.uniform(0, 1)
86
+
87
+ for i in range(len(probs)):
88
+
89
+ r = r - probs[i]
90
+
91
+ if r <= 0:
92
+
93
+ return i
94
+
95
+ return len(probs)-1
96
+
97
+
98
+
99
+ def c_array(ctype, values):
100
+
101
+ arr = (ctype*len(values))()
102
+
103
+ arr[:] = values
104
+
105
+ return arr
106
+
107
+
108
+
109
+ class BOX(Structure):
110
+
111
+ _fields_ = [("x", c_float),
112
+
113
+ ("y", c_float),
114
+
115
+ ("w", c_float),
116
+
117
+ ("h", c_float)]
118
+
119
+
120
+
121
+ class DETECTION(Structure):
122
+
123
+ _fields_ = [("bbox", BOX),
124
+
125
+ ("classes", c_int),
126
+
127
+ ("prob", POINTER(c_float)),
128
+
129
+ ("mask", POINTER(c_float)),
130
+
131
+ ("objectness", c_float),
132
+
133
+ ("sort_class", c_int)]
134
+
135
+
136
+
137
+
138
+
139
+ class IMAGE(Structure):
140
+
141
+ _fields_ = [("w", c_int),
142
+
143
+ ("h", c_int),
144
+
145
+ ("c", c_int),
146
+
147
+ ("data", POINTER(c_float))]
148
+
149
+
150
+
151
+ class METADATA(Structure):
152
+
153
+ _fields_ = [("classes", c_int),
154
+
155
+ ("names", POINTER(c_char_p))]
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+ #lib = CDLL("/home/pjreddie/documents/darknet/libdarknet.so", RTLD_GLOBAL)
164
+
165
+ lib = CDLL("libdarknet.so", RTLD_GLOBAL)
166
+
167
+ lib.network_width.argtypes = [c_void_p]
168
+
169
+ lib.network_width.restype = c_int
170
+
171
+ lib.network_height.argtypes = [c_void_p]
172
+
173
+ lib.network_height.restype = c_int
174
+
175
+
176
+
177
+ predict = lib.network_predict
178
+
179
+ predict.argtypes = [c_void_p, POINTER(c_float)]
180
+
181
+ predict.restype = POINTER(c_float)
182
+
183
+
184
+
185
+ set_gpu = lib.cuda_set_device
186
+
187
+ set_gpu.argtypes = [c_int]
188
+
189
+
190
+
191
+ make_image = lib.make_image
192
+
193
+ make_image.argtypes = [c_int, c_int, c_int]
194
+
195
+ make_image.restype = IMAGE
196
+
197
+
198
+
199
+ get_network_boxes = lib.get_network_boxes
200
+
201
+ get_network_boxes.argtypes = [c_void_p, c_int, c_int, c_float, c_float, POINTER(c_int), c_int, POINTER(c_int)]
202
+
203
+ get_network_boxes.restype = POINTER(DETECTION)
204
+
205
+
206
+
207
+ make_network_boxes = lib.make_network_boxes
208
+
209
+ make_network_boxes.argtypes = [c_void_p]
210
+
211
+ make_network_boxes.restype = POINTER(DETECTION)
212
+
213
+
214
+
215
+ free_detections = lib.free_detections
216
+
217
+ free_detections.argtypes = [POINTER(DETECTION), c_int]
218
+
219
+
220
+
221
+ free_ptrs = lib.free_ptrs
222
+
223
+ free_ptrs.argtypes = [POINTER(c_void_p), c_int]
224
+
225
+
226
+
227
+ network_predict = lib.network_predict
228
+
229
+ network_predict.argtypes = [c_void_p, POINTER(c_float)]
230
+
231
+
232
+
233
+ reset_rnn = lib.reset_rnn
234
+
235
+ reset_rnn.argtypes = [c_void_p]
236
+
237
+
238
+
239
+ load_net = lib.load_network
240
+
241
+ load_net.argtypes = [c_char_p, c_char_p, c_int]
242
+
243
+ load_net.restype = c_void_p
244
+
245
+
246
+
247
+ do_nms_obj = lib.do_nms_obj
248
+
249
+ do_nms_obj.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
250
+
251
+
252
+
253
+ do_nms_sort = lib.do_nms_sort
254
+
255
+ do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
256
+
257
+
258
+
259
+ free_image = lib.free_image
260
+
261
+ free_image.argtypes = [IMAGE]
262
+
263
+
264
+
265
+ letterbox_image = lib.letterbox_image
266
+
267
+ letterbox_image.argtypes = [IMAGE, c_int, c_int]
268
+
269
+ letterbox_image.restype = IMAGE
270
+
271
+
272
+
273
+ load_meta = lib.get_metadata
274
+
275
+ lib.get_metadata.argtypes = [c_char_p]
276
+
277
+ lib.get_metadata.restype = METADATA
278
+
279
+
280
+
281
+ load_image = lib.load_image_color
282
+
283
+ load_image.argtypes = [c_char_p, c_int, c_int]
284
+
285
+ load_image.restype = IMAGE
286
+
287
+
288
+
289
+ rgbgr_image = lib.rgbgr_image
290
+
291
+ rgbgr_image.argtypes = [IMAGE]
292
+
293
+
294
+
295
+ predict_image = lib.network_predict_image
296
+
297
+ predict_image.argtypes = [c_void_p, IMAGE]
298
+
299
+ predict_image.restype = POINTER(c_float)
300
+
301
+
302
+
303
+ def classify(net, meta, im):
304
+
305
+ out = predict_image(net, im)
306
+
307
+ res = []
308
+
309
+ for i in range(meta.classes):
310
+
311
+ res.append((meta.names[i], out[i]))
312
+
313
+ res = sorted(res, key=lambda x: -x[1])
314
+
315
+ return res
316
+
317
+
318
+
319
+ def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45):
320
+
321
+ im = load_image(image, 0, 0)
322
+
323
+ num = c_int(0)
324
+
325
+ pnum = pointer(num)
326
+
327
+ predict_image(net, im)
328
+
329
+ dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0, pnum)
330
+
331
+ num = pnum[0]
332
+
333
+ if (nms): do_nms_obj(dets, num, meta.classes, nms);
334
+
335
+
336
+
337
+ res = []
338
+
339
+ for j in range(num):
340
+
341
+ for i in range(meta.classes):
342
+
343
+ if dets[j].prob[i] > 0:
344
+
345
+ b = dets[j].bbox
346
+
347
+ res.append((meta.names[i], dets[j].prob[i], (b.x, b.y, b.w, b.h)))
348
+
349
+ res = sorted(res, key=lambda x: -x[1])
350
+
351
+ free_image(im)
352
+
353
+ free_detections(dets, num)
354
+
355
+ return res
356
+
357
+
358
+
359
+ if __name__ == "__main__":
360
+
361
+ net = load_net("cfg/yolov3.cfg".encode('ascii'),"yolov3.weights".encode('ascii'), 0)
362
+
363
+ meta = load_meta("cfg/coco.data".encode('ascii'))
364
+
365
+ r1 = detect(net, meta, "path1.jpg".encode('ascii'))
366
+
367
+ r2 = detect(net, meta, "path2.jpg".encode('ascii'))
368
+
369
+ kekka1 = np.empty((10,3))
370
+
371
+ kekka2 = np.empty((10,3))
372
+
373
+ for kekka1 in r1:
374
+
375
+ print('class_name=', kekka1[0].decode('ascii'))
376
+
377
+ print('confidence=', kekka1[1])
378
+
379
+ print('box1=', kekka1[2])
380
+
381
+
382
+
383
+ if kekka1[0].decode('ascii') == "person":
384
+
385
+ kekka1[2] = bbox1(0, 1, 2, 3)
386
+
387
+ x1 = bbox1(0)
388
+
389
+ y1 = bbox1(0)
390
+
391
+
392
+
393
+ for kekka2 in r2:
394
+
395
+ print('class_name=', kekka2[0].decode('ascii'))
396
+
397
+ print('confidence=', kekka2[1])
398
+
399
+ print('box2=', kekka2[2])
400
+
401
+
402
+
403
+ if kekka1[0].decode('ascii') == "person":
404
+
405
+ kekka1[2] = bbox1(0, 1, 2, 3)
406
+
407
+ x1 = bbox1(0)
408
+
409
+ y1 = bbox1(0)
410
+
411
+
412
+
413
+ if kekka2[0].decode('ascii') == "person":
414
+
415
+ kekka2[2] = bbox2(0, 1, 2, 3)
416
+
417
+ x2 = bbox2(0)
418
+
419
+ y2 = bbox2(0)
420
+
421
+
422
+
423
+ F = 123.7
424
+
425
+ T = 0.16
426
+
427
+
428
+
429
+ D = x1 - x2
430
+
431
+ z = F*T/D
432
+
433
+
434
+
435
+ print(z)
436
+
437
+
438
+
439
+ pythonで実装しています。
440
+
441
+
442
+
19
443
  ```
20
444
 
21
445
 
22
446
 
23
- ### 該当のソースコード
24
-
25
-
26
-
27
- ```ここに言語名を入力
28
-
29
- ソースコード
30
-
31
- ```
32
-
33
-
34
-
35
447
  ### 試したこと
36
448
 
37
449
 

1

2021/12/07 13:47

投稿

adgjmptw-11
adgjmptw-11

スコア0

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