API
を使用しました
( https://github.com/tensorflow/models/tree/master/object_detection )
その後、
バウンディングボックスの長さを知るにはどうすればよいですか?
GithubのチュートリアルIPythonノートブックをリアルタイムで使用しました。
しかし、ボックスの長さを計算するためにどのコマンドを使用するかわかりません。
ベータの答えを拡張するだけです:
検出グラフから予測される境界ボックスを取得できます。この例は 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
_
私はバウンディングボックスの座標を見つける方法について完全な回答を書きました 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)
次のようにボックスを呼び出すことができます。
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
スコアやクラスについても同様です。
次に、セッション実行時にそれらを呼び出します。
(boxes, scores, classes) = sess.run(
[boxes, scores, classes],
feed_dict={image_tensor: imageFile})
基本的に、グラフからすべてを取得できます
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
オブジェクトを認識し、場所と信頼度の情報を返す次のコードは次のとおりです。
(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/]