0

How do I extract the type of the object the video detects.For example, once the video in the Object Detection API detects a 'laptop', how do I get 'laptop' label along with its id ,to display that in separate file?

import cv2
 cap = cv2.VideoCapture(0)

 with detection_graph.as_default():
   with tf.Session(graph=detection_graph) as sess:
    ret = True
    while (ret):
       ret,image_np = cap.read()

       image_np_expanded = np.expand_dims(image_np, axis=0)
       image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')

       boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
       # Each score represent how level of confidence for each of the objects.
       # Score is shown on the result image, together with the class label.
       scores = detection_graph.get_tensor_by_name('detection_scores:0')
       classes = detection_graph.get_tensor_by_name('detection_classes:0')
       num_detections = detection_graph.get_tensor_by_name('num_detections:0')
       # Actual detection.
       (boxes, scores, classes, num_detections) = sess.run(
           [boxes, scores, classes, num_detections],
           feed_dict={image_tensor: image_np_expanded})
       # Visualization of the results of a detection.
       vis_util.visualize_boxes_and_labels_on_image_array(
           image_np,
           np.squeeze(boxes),
           np.squeeze(classes).astype(np.int32),
           np.squeeze(scores),
           category_index,
           use_normalized_coordinates=True,
           line_thickness=8)

       cv2.imshow('image',cv2.resize(image_np,(600,400)))      

       if cv2.waitKey(25) & 0xFF == ord('q'):
           cv2.destroyAllWindows()
           cap.release()
           break
1
  • the output of object detector is given in (boxes, scores, classes, num_detections) tuple, sorted by confidence scores from highest to lowest, the class information is contained in classes (indexed by id) which can be extracted using the label map file Commented Aug 8, 2018 at 18:39

1 Answer 1

1

assuming you have pbtxt file for the labels mapping that look something like this:

item {
  name: "/m/01g317"
  id: 1
  display_name: "person"
}
item {
  name: "/m/0199g"
  id: 2
  display_name: "bicycle"
}
item {
  name: "/m/0k4j"
  id: 3
  display_name: "car"
}
...

you can read the labels to a dictionary using label_map_util [https://github.com/tensorflow/models/blob/master/research/object_detection/utils/label_map_util.py]

label_map = label_map_util.load_labelmap(LABELS_PBTXT_FILE_PATH)

categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=n_classes, use_display_name=True)

idx_to_label = {}
for cat in categories:
    idx_to_label[cat['id']] = cat['name']

Then - when you'll have the idx_to_label dict, simply use

idx_to_label.get(curr_id, 'N/A')
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.