質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Darknet

Darknetは、C言語で記述されたオープンソースのニューラルネットフレームワークで簡単にインストールすることが可能です。学習済みモデルとアルゴリズムも配布しており、ダウンロードすれば容易に動かすこともできます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1952閲覧

darknetのyolov3で検出した座標からpythonで計算を行いたい。

adgjmptw-11

総合スコア0

Darknet

Darknetは、C言語で記述されたオープンソースのニューラルネットフレームワークで簡単にインストールすることが可能です。学習済みモデルとアルゴリズムも配布しており、ダウンロードすれば容易に動かすこともできます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/07 13:18

編集2021/12/07 15:20

前提・実現したいこと

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

エラーメッセージ class_name= person confidence= 0.9979870915412903 box1= (757.0997924804688, 574.14208984375, 382.11517333984375, 989.4730224609375) class_name= chair confidence= 0.939139187335968 box1= (456.80657958984375, 973.4913330078125, 297.5714111328125, 218.9896697998047) class_name= diningtable confidence= 0.867287278175354 box1= (150.55377197265625, 963.4379272460938, 279.58843994140625, 256.3335876464844) class_name= person confidence= 0.9986228346824646 box2= (789.9702758789062, 566.0933227539062, 352.4512939453125, 985.2094116210938) class_name= chair confidence= 0.9849683046340942 box2= (459.69384765625, 976.21435546875, 317.9201965332031, 218.52052307128906) class_name= tvmonitor confidence= 0.8856194019317627 box2= (145.66439819335938, 574.79736328125, 228.37103271484375, 259.6019592285156) class_name= diningtable confidence= 0.8115013837814331 box2= (172.94419860839844, 939.2078857421875, 342.9265441894531, 264.38812255859375) Traceback (most recent call last): File "./python/darknet.py", line 181, in <module> D = x1 - x2 NameError: name 'x1' is not defined ### 該当のソースコード from ctypes import * import math import random import numpy as np def sample(probs): s = sum(probs) probs = [a/s for a in probs] r = random.uniform(0, 1) for i in range(len(probs)): r = r - probs[i] if r <= 0: return i return len(probs)-1 def c_array(ctype, values): arr = (ctype*len(values))() arr[:] = values return arr class BOX(Structure): _fields_ = [("x", c_float), ("y", c_float), ("w", c_float), ("h", c_float)] class DETECTION(Structure): _fields_ = [("bbox", BOX), ("classes", c_int), ("prob", POINTER(c_float)), ("mask", POINTER(c_float)), ("objectness", c_float), ("sort_class", c_int)] class IMAGE(Structure): _fields_ = [("w", c_int), ("h", c_int), ("c", c_int), ("data", POINTER(c_float))] class METADATA(Structure): _fields_ = [("classes", c_int), ("names", POINTER(c_char_p))] #lib = CDLL("/home/pjreddie/documents/darknet/libdarknet.so", RTLD_GLOBAL) lib = CDLL("libdarknet.so", RTLD_GLOBAL) lib.network_width.argtypes = [c_void_p] lib.network_width.restype = c_int lib.network_height.argtypes = [c_void_p] lib.network_height.restype = c_int predict = lib.network_predict predict.argtypes = [c_void_p, POINTER(c_float)] predict.restype = POINTER(c_float) set_gpu = lib.cuda_set_device set_gpu.argtypes = [c_int] make_image = lib.make_image make_image.argtypes = [c_int, c_int, c_int] make_image.restype = IMAGE get_network_boxes = lib.get_network_boxes get_network_boxes.argtypes = [c_void_p, c_int, c_int, c_float, c_float, POINTER(c_int), c_int, POINTER(c_int)] get_network_boxes.restype = POINTER(DETECTION) make_network_boxes = lib.make_network_boxes make_network_boxes.argtypes = [c_void_p] make_network_boxes.restype = POINTER(DETECTION) free_detections = lib.free_detections free_detections.argtypes = [POINTER(DETECTION), c_int] free_ptrs = lib.free_ptrs free_ptrs.argtypes = [POINTER(c_void_p), c_int] network_predict = lib.network_predict network_predict.argtypes = [c_void_p, POINTER(c_float)] reset_rnn = lib.reset_rnn reset_rnn.argtypes = [c_void_p] load_net = lib.load_network load_net.argtypes = [c_char_p, c_char_p, c_int] load_net.restype = c_void_p do_nms_obj = lib.do_nms_obj do_nms_obj.argtypes = [POINTER(DETECTION), c_int, c_int, c_float] do_nms_sort = lib.do_nms_sort do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float] free_image = lib.free_image free_image.argtypes = [IMAGE] letterbox_image = lib.letterbox_image letterbox_image.argtypes = [IMAGE, c_int, c_int] letterbox_image.restype = IMAGE load_meta = lib.get_metadata lib.get_metadata.argtypes = [c_char_p] lib.get_metadata.restype = METADATA load_image = lib.load_image_color load_image.argtypes = [c_char_p, c_int, c_int] load_image.restype = IMAGE rgbgr_image = lib.rgbgr_image rgbgr_image.argtypes = [IMAGE] predict_image = lib.network_predict_image predict_image.argtypes = [c_void_p, IMAGE] predict_image.restype = POINTER(c_float) def classify(net, meta, im): out = predict_image(net, im) res = [] for i in range(meta.classes): res.append((meta.names[i], out[i])) res = sorted(res, key=lambda x: -x[1]) return res def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45): im = load_image(image, 0, 0) num = c_int(0) pnum = pointer(num) predict_image(net, im) dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0, pnum) num = pnum[0] if (nms): do_nms_obj(dets, num, meta.classes, nms); res = [] for j in range(num): for i in range(meta.classes): if dets[j].prob[i] > 0: b = dets[j].bbox res.append((meta.names[i], dets[j].prob[i], (b.x, b.y, b.w, b.h))) res = sorted(res, key=lambda x: -x[1]) free_image(im) free_detections(dets, num) return res if __name__ == "__main__": net = load_net("cfg/yolov3.cfg".encode('ascii'),"yolov3.weights".encode('ascii'), 0) meta = load_meta("cfg/coco.data".encode('ascii')) r1 = detect(net, meta, "path1.jpg".encode('ascii')) r2 = detect(net, meta, "path2.jpg".encode('ascii')) kekka1 = np.empty((10,3)) kekka2 = np.empty((10,3)) for kekka1 in r1: print('class_name=', kekka1[0].decode('ascii')) print('confidence=', kekka1[1]) print('box1=', kekka1[2]) if kekka1[0].decode('ascii') == "person": kekka1[2] = bbox1(0, 1, 2, 3) x1 = bbox1(0) y1 = bbox1(0) for kekka2 in r2: print('class_name=', kekka2[0].decode('ascii')) print('confidence=', kekka2[1]) print('box2=', kekka2[2]) if kekka1[0].decode('ascii') == "person": kekka1[2] = bbox1(0, 1, 2, 3) x1 = bbox1(0) y1 = bbox1(0) if kekka2[0].decode('ascii') == "person": kekka2[2] = bbox2(0, 1, 2, 3) x2 = bbox2(0) y2 = bbox2(0) F = 123.7 T = 0.16 D = x1 - x2 z = F*T/D print(z) pythonで実装しています。

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

中心座標 (cx, cy) と大きさ (w, h) がわかっているのならば、それから

left = cx - w / 2
top = cy - h / 2

と計算できませんか?

投稿2021/12/10 02:22

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

adgjmptw-11

2021/12/13 13:30

お手数をおかけして申し訳ありません。 自己解決できました。 ありがとうございました
guest

0

申し訳ありません。
for文の中にif文が入ってないだけでした。
回答してくださった方、お時間ちょうだいして申し訳ありません。ありがとうございました

投稿2021/12/13 13:17

adgjmptw-11

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問