web-dev-qa-db-ja.com

オブジェクト検出APIのバウンディングボックスのサイズを知りたい

APIを使用しました

https://github.com/tensorflow/models/tree/master/object_detection

その後、

バウンディングボックスの長さを知るにはどうすればよいですか?

GithubのチュートリアルIPythonノートブックをリアルタイムで使用しました。

しかし、ボックスの長さを計算するためにどのコマンドを使用するかわかりません。

7
SUN JIAWEI

ベータの答えを拡張するだけです:

検出グラフから予測される境界ボックスを取得できます。この例は githubのチュートリアルIPythonノートブック にあります。これは、ベータ版のコードの一部です。 _detection_graph_にアクセスし、テンソルから予測される境界ボックスの座標を抽出します。

np.squeeze(boxes)を呼び出すことにより、それらを(m、4)に再形成します。ここで、mは予測ボックスの量を示します。これでボックスにアクセスして、長さ、面積、または必要なものを計算できます。

ただし、予測ボックス座標は正規化されていることに注意してください。それらは次の順序です。

_[ymin, xmin, ymax, xmax]_

したがって、ピクセル単位での長さを計算すると、次のようになります。

_def length_of_bounding_box(bbox):
    return bbox[3]*IMG_WIDTH - bbox[1]*IMG_WIDTH
_
8
ITiger

私はバウンディングボックスの座標を見つける方法について完全な回答を書きました here このスレッドの誰かにも役立つかもしれないと思いました。

Google Object Detection APIは、境界ボックスを[ymin、xmin、ymax、xmax]の形式と正規化された形式で返します(完全な説明 here )。 (x、y)ピクセル座標を見つけるには、結果に画像の幅と高さを掛ける必要があります。まず、画像の幅と高さを取得します。

width, height = image.size

次に、boxesオブジェクトからymin、xmin、ymax、xmaxを抽出し、乗算して(x、y)座標を取得します。

ymin = boxes[0][i][0]*height
xmin = boxes[0][i][1]*width
ymax = boxes[0][i][2]*height
xmax = boxes[0][i][3]*width

最後に、ボックスの角の座標を出力します。

print 'Top left'
print (xmin,ymin,)
print 'Bottom right'
print (xmax,ymax)
3
Gal_M

次のようにボックスを呼び出すことができます。

boxes = detection_graph.get_tensor_by_name('detection_boxes:0')

スコアやクラスについても同様です。

次に、セッション実行時にそれらを呼び出します。

(boxes, scores, classes) = sess.run(
              [boxes, scores, classes],
              feed_dict={image_tensor: imageFile})
1
Beta

基本的に、グラフからすべてを取得できます

image_tensor = graph.get_tensor_by_name('image_tensor:0')
boxes = graph.get_tensor_by_name('detection_boxes:0')
scores = graph.get_tensor_by_name('detection_scores:0')
classes = graph.get_tensor_by_name('detection_classes:0')
num_detections = graph.get_tensor_by_name('num_detections:0')

そして、boxs [0]には、[top_left_x、top_left_y、bottom_right_x、bottom_right_y]の形式ですべての予測された境界ボックス座標が含まれます。これは、探しているものです。

このリポジトリをチェックして、詳細を確認してください: https://github.com/KleinYuan/tf-object-detection

0
KleinYuan

オブジェクトを認識し、場所と信頼度の情報を返す次のコードは次のとおりです。

(boxes, scores, classes, num_detections) = sess.run(
          [boxes, scores, classes, num_detections],
          feed_dict={image_tensor: image_np_expanded})

ボックスを反復処理するには

 for i,b in enumerate(boxes[0]):

幅と高さを取得するには:

 width = boxes[0][i][1]+boxes[0][i][3]
 height = boxes[0][i][0]+boxes[0][i][2]

詳細は次のとおりです:[ https://pythonprogramming.net/detecting-distances-self-driving-car/]