web-dev-qa-db-fra.com

Je veux connaître la taille du cadre de sélection dans un API de détection d'objets

J'ai utilisé la API 

( https://github.com/tensorflow/models/tree/master/object_detection } _)

Et alors,

Comment pourrais-je connaître la longueur du cadre de sélection?

J'ai utilisé le cahier de tutoriel IPython sur github en temps réel.

Mais je ne sais pas utiliser quelle commande pour calculer la longueur des boîtes.

6
SUN JIAWEI

Juste pour prolonger la réponse de Beta:

Vous pouvez obtenir les cadres de sélection prévus à partir du graphique de détection. Un exemple à cet effet est donné dans Tutorial IPython notebook on github . C'est de là que provient le code de la bêta. Accédez au detection_graph et extrayez les coordonnées des boîtes englobantes prédites à partir du tenseur:

En appelant np.squeeze(boxes), vous les redéfinissez en (m, 4), où m indique le nombre de cases prédites. Vous pouvez maintenant accéder aux cases et calculer la longueur, la surface ou tout ce que vous voulez.

Mais rappelez-vous que les coordonnées de la boîte prédites sont normalisées! Ils sont dans l'ordre suivant:

[ymin, xmin, ymax, xmax]

Donc, calculer la longueur en pixel serait quelque chose comme:

def length_of_bounding_box(bbox):
    return bbox[3]*IMG_WIDTH - bbox[1]*IMG_WIDTH
7
ITiger

J'ai écrit une réponse complète sur la façon de trouver les coordonnées du cadre de sélection ici et j'ai pensé que cela pourrait également être utile à quelqu'un sur ce sujet. 

L'API de détection d'objets de Google renvoie des cadres de sélection au format [ymin, xmin, ymax, xmax] et sous une forme normalisée (explication complète ici ). Pour trouver les coordonnées en pixels (x, y), nous devons multiplier les résultats par la largeur et la hauteur de l'image. D'abord, obtenez la largeur et la hauteur de votre image: 

width, height = image.size

Ensuite, extrayez ymin, xmin, ymax, xmax de l'objet boxes et multipliez-vous pour obtenir les coordonnées (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

Imprimez enfin les coordonnées des coins de la boîte:

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

Vous pouvez appeler des boîtes, comme suit:

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

de même pour les scores et les classes.

Ensuite, appelez-les simplement en session.

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

Fondamentalement, vous pouvez obtenir tous ceux du graphique

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')

et boxes [0] contient toutes les coordonnées prédites du cadre de sélection dans le format [top_left_x, top_left_y, bottom_right_x, bottom_right_y], ce que vous recherchez.

Découvrez ce dépôt et vous trouverez plus de détails: https://github.com/KleinYuan/tf-object-detection

1
KleinYuan

Le code suivant qui reconnaît les objets et renvoie les informations pour les emplacements et la confiance est: 

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

Pour parcourir les cases

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

Pour obtenir la largeur et la hauteur: 

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

Vous pouvez trouver plus de détails: [ https://pythonprogramming.net/detecting-distances-self-driving-car/]

0