Python - "from utils import label_map_util" ImportError: 无法导入名称'label_map_util'。

5
当我运行这段代码时,出现了导入错误。
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行 from utils import label_map_util 导入错误:无法导入名称'label_map_util'


如果你删除除了"from utils import label_map_util"这一行代码之外的所有代码,你是否会得到相同的ImportError? - joaquin
是的,我得到了相同的错误。 - Roxas Zohbi
你可以通过仅提供与你的问题相关的信息来简化你的帖子。 - joaquin
3个回答

14

进入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


你正在运行代码的工作目录是什么? - Soumya Boral
D:\Pythonic\My-Work - Roxas Zohbi
1
克隆 https://github.com/tensorflow/models,你会在其中找到一个名为 ..\models\research\object_detection 的文件夹 - 然后运行上述代码。它会起作用的。 - Soumya Boral
代码 label_map_util 存在于 object_detection 目录下的 utils 文件夹中。 - Soumya Boral
@RoxasZohbi,如果这个答案满足/已经满足了您的需求,请接受它。这样人们会更快地注意到它。 - Aaron John Sabu

2
pip install tensorflow-object-detection-api

1
这对我有用。但是,为了使它工作,我必须执行以下操作:
  1. 创建一个虚拟环境,并安装以下内容: i) OpenCV 4.0.1 ii) Python 3.6 iii) tensorflow v1.12

  2. 逐个安装和/或更新各种依赖项: 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. 编译所有协议缓冲器定义文件: i)进入models/research文件夹 ii)protoc object_detection/protos/*.proto --python_out=.

4.导出正确的PYTHONPATH变量路径: i)export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim ii)echo $PYTHONPATH

  1. 进入存放文件(object_detection)的文件夹,并在Python中运行它 i) cd object_detection/ ii) python test_pyprog.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接