質問編集履歴
3
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
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
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
|
### 発生している問題・エラーメッセージ
|