python-“从utils导入label_map_util” ImportError:无法导入名称'label_map_util'

时间:2018-07-28 08:51:22

标签: python tensorflow

当我运行这段代码时,我得到一个导入错误

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

错误:

  

警告:打开文件时出错   (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:834)警告:   ipr.mp4(/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:835)   追溯(最近一次通话):文件“ test.py”,第31行,在          从utils导入label_map_util ImportError:无法导入名称'label_map_util'

4 个答案:

答案 0 :(得分:2)

CD到object_detection目录

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

并更改这些行

from utils import label_map_util

from utils import visualization_utils as vis_util

到以下几行

from object_detection.utils import label_map_util

from object_detection.utils import visualization_utils as vis_util

它将起作用。

来源:https://github.com/tensorflow/models/issues/1990

答案 1 :(得分:0)

这对我有用。但是,为了使其正常工作,我必须执行以下操作:

  1. 使用以下命令创建虚拟环境: i)OpenCV 4.0.1 ii)Python 3.6 iii)tensorflow v1.12

  2. 分别安装和/或更新各种依赖项: 康达安装scipy pip install-升级sklearn pip install-升级熊猫 pip install --upgrade熊猫数据读取器 pip install-升级matplotlib 点安装-升级枕头 pip install-升级请求 pip install-升级h5py pip install-升级pyyaml pip install-升级psutil 点安装--upgrade tensorflow == 1.12.0 pip安装-升级lxml pip安装opencv-contrib-python

  3. 编译所有协议缓冲区定义文件: 我)CD到模型/研究文件夹 ii)protoc object_detection / protos / *。proto --python_out =。

4。导出正确的PYTHONPATH变量路径:     i)导出PYTHONPATH = $ PYTHONPATH:pwdpwd / slim    ii)回显$ PYTHONPATH

  1. 转到文件所在的文件夹(object_dectection)并在python中运行它 i)cd object_detection / ii)python test_pyprog.py

答案 2 :(得分:0)

pip install tensorflow-object-detection-api

答案 3 :(得分:-1)

代码多大了?您正在使用哪个版本的utils?您使用的是最新版本的https://github.com/haaksmash/pyutils吗?如果已安装该版本,则将看到没有名为label_map_utilvisualization_utils的文件夹或类。