Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python - "from utils import label_map_util" ImportError: cannot import name 'label_map_util'

when I am running this code i get an import errror

import numpy as np
import os
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile

from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image

import cv2
cap = cv2.VideoCapture("ipr.mp4")

from utils import label_map_util
from utils import visualization_utils as vis_util

MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'

PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

NUM_CLASSES = 90



opener = urllib.request.URLopener()
opener.retrieve(DOWNLOAD_BASE + MODEL_FILE, MODEL_FILE)
tar_file = tarfile.open(MODEL_FILE)
for file in tar_file.getmembers():
  file_name = os.path.basename(file.name)
  if 'frozen_inference_graph.pb' in file_name:
    tar_file.extract(file, os.getcwd())



detection_graph = tf.Graph()
with detection_graph.as_default():
  od_graph_def = tf.GraphDef()
  with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
    serialized_graph = fid.read()
    od_graph_def.ParseFromString(serialized_graph)
    tf.import_graph_def(od_graph_def, name='')



label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
category_index = label_map_util.create_category_index(categories)


def load_image_into_numpy_array(image):
  (im_width, im_height) = image.size
  return np.array(image.getdata()).reshape(
      (im_height, im_width, 3)).astype(np.uint8)


PATH_TO_TEST_IMAGES_DIR = 'test_images'
TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]

IMAGE_SIZE = (12, 8)



with detection_graph.as_default():
  with tf.Session(graph=detection_graph) as sess:
    while True:
      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')
      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')
      (boxes, scores, classes, num_detections) = sess.run(
          [boxes, scores, classes, num_detections],
          feed_dict={image_tensor: image_np_expanded})
      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('object detection', cv2.resize(image_np, (800,600)))
      if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

error:

warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:834) warning: ipr.mp4 (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:835) Traceback (most recent call last): File "test.py", line 31, in from utils import label_map_util ImportError: cannot import name 'label_map_util'

like image 987
Roxas Zohbi Avatar asked Dec 10 '22 05:12

Roxas Zohbi


2 Answers

CD to object_detection directory

import( os )
os.chdir( 'D:\\projects\\data core\\helmet detection\\models\\research\\object_detection' )

and change these lines

from utils import label_map_util

from utils import visualization_utils as vis_util

to the following lines

from object_detection.utils import label_map_util

from object_detection.utils import visualization_utils as vis_util

It will work.

Source : https://github.com/tensorflow/models/issues/1990

like image 83
Soumya Boral Avatar answered Apr 08 '23 09:04

Soumya Boral


This works for me. However, in order to make it work I had to do the following:

  1. Create a virtual environment with the following: i) OpenCV 4.0.1 ii) Python 3.6 iii) tensorflow v1.12

  2. Install and/or update the various dependencies individually: conda install scipy pip install --upgrade sklearn pip install --upgrade pandas pip install --upgrade pandas-datareader pip install --upgrade matplotlib pip install --upgrade pillow pip install --upgrade requests pip install --upgrade h5py pip install --upgrade pyyaml pip install --upgrade psutil pip install --upgrade tensorflow==1.12.0 pip install -- upgrade lxml pip install opencv-contrib-python

  3. Compile all the protocol buffer definition files: i)cd to the models/research folder ii)protoc object_detection/protos/*.proto --python_out=.

4.Export the correct PYTHONPATH variable path: i)export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim ii)echo $PYTHONPATH

  1. Go to the folder where the file resides (object_dectection) and run it in python i) cd object_detection/ ii) python test_pyprog.py
like image 27
CyberMITZ Avatar answered Apr 08 '23 09:04

CyberMITZ