🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
YOLO

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5038閲覧

Yolo、Realsenseを用いて深度情報ありの物体検出をpythonで行いたい。

退会済みユーザー

退会済みユーザー

総合スコア0

YOLO

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/08 16:30

前提・実現したいこと

Yolo(darkflow)とRealsensed435i(pyrealsense2)を用いて、深度情報が付加された物体検出をpythonで行いたいです。
cv2.VideoCaptureではなくpyreasense2を用いて行いたい。(cv2.VideoCaptureでも深度情報を取得できるのであれば可)

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

from darkflow.net.build import TFNet
import cv2
import numpy as np
import pyrealsense2 as rs

options = {"model": "cfg/yolo.cfg", "load": "bin/yolo.weights", "threshold": 0.1}
tfnet = TFNet(options)

cap = cv2.VideoCapture(1)

class_names = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle',
'bus', 'car', 'cat', 'chair', 'cow', 'diningtable',
'dog', 'horse', 'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor']

num_classes = len(class_names)
class_colors = []
for i in range(0, num_classes):
hue = 255*i/num_classes
col = np.zeros((1,1,3)).astype("uint8")
col[0][0][0] = hue
col[0][0][1] = 128
col[0][0][2] = 255
cvcol = cv2.cvtColor(col, cv2.COLOR_HSV2BGR)
col = (int(cvcol[0][0][0]), int(cvcol[0][0][1]), int(cvcol[0][0][2]))
class_colors.append(col)

def main():

while(True): ret, frame = cap.read() result = tfnet.return_predict(frame) for item in result: tlx = item['topleft']['x'] tly = item['topleft']['y'] brx = item['bottomright']['x'] bry = item['bottomright']['y'] label = item['label'] conf = item['confidence'] if conf > 0.4: for i in class_names: if label == i: class_num = class_names.index(i) break cv2.rectangle(frame, (tlx, tly), (brx, bry), class_colors[class_num], 2) text = label + " " + ('%.2f' % conf) cv2.rectangle(frame, (tlx, tly - 15), (tlx + 100, tly + 5), class_colors[class_num], -1) cv2.putText(frame, text, (tlx, tly), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1) cv2.imshow("Show FLAME Image", frame) k = cv2.waitKey(10); if k == ord('q'): break; cap.release() cv2.destroyAllWindows()

if name == 'main':
main()

ソースコード

試したこと

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

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

labelのconfの部分を深度に変えて表示、出力したいです。
プログラミング初学者のため、投げやりの質問になってしまい、申し訳ありません。
ご教授頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

メモ: Pythonはインデントで意味合いが変わりますので、<code>で表示される記号の内側にPythonのコードを張り付けましょう。


**Q.1 **

cv2.VideoCaptureではなくpyreasense2を用いて行いたい。(cv2.VideoCaptureでも深度情報を取得できるのであれば可)

**A.1 **
yumionさん@Qiitaが参考になりませんか?cv2.VideoCaptureでは拾えないようで、独自のクラスを実装されたそうです。


**Q.2 **

Yolo(darkflow)とRealsensed435i(pyrealsense2)を用いて、深度情報が付加された物体検出をpythonで行いたいです。

**A.2 **
YOLOを触ったことはありませんが、3ch分のデータの初期化と値の代入は

Python3

1col = np.zeros((1,1,3)).astype("uint8") 2col[0][0][0] = hue 3col[0][0][1] = 128 4col[0][0][2] = 255 5cvcol = cv2.cvtColor(col, cv2.COLOR_HSV2BGR) 6col = (int(cvcol[0][0][0]), int(cvcol[0][0][1]), int(cvcol[0][0][2]))

でさばいているようだ、ということは理解できます。
ですので、データの入力に関してだけであれば、ここにさらに1chを加えれば動きそうなものです。
8bitの3chに、後付けで16bit(?)の深度を加えるイメージでしょうか。

が、問題はそこまで簡単ではないように思います。
というのも、

Python3

1from darkflow.net.build import TFNet 2(略) 3options = {"model": "cfg/yolo.cfg", "load": "bin/yolo.weights", "threshold": 0.1} 4tfnet = TFNet(options) 5(略) 6result = tfnet.return_predict(frame)

とありますように、import元のdarkflow中のネットワークをresult=tfnet.return_predict(frame)でがっつり使っています。恐らく入力データを挿げ替えても走らせたときに次元が違う、と怒られるものと思います。

解決するには、元のネットワークの中に1ch分余分に処理させるように書き換えないといけません。YOLOのコードがポン付けで1ch追加できるようであればすぐに終わりますが、もし複雑で大変、ということであればこの質問とは別にYOLO(RGB?HSV?,3ch)に1ch(Depth)を加えたいという内容の質問を立てた方が良いと思います。


ちゃんとレビューできるPythonのコードを書いて、質問者がやれる範囲のことをやった旨、どうしたらうまくいきそうかの考え、等を質問として挙げられれば、YOLOに1ch加えるような難しい問題でもちゃんと答えがもらえるものと思います。ちゃんとした質問であればちゃんとした回答が返ってくるはずです。

投稿2019/11/08 18:18

編集2019/11/08 18:27
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/11/09 03:50

貴重なご意見ありがとうございます。 ご指摘の通りにもう少し自分でトライして分からない部分、上手くいかない部分をより明確にした上で質問させて頂きたいと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問