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'
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
This works for me. However, in order to make it work I had to do the following:
Create a virtual environment with the following: i) OpenCV 4.0.1 ii) Python 3.6 iii) tensorflow v1.12
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With