pip install opencv-python numpy pandas
#Object DetectionOn this pageSetupImports and function definitionsExample useHelper functions for downloading images and for visualization.Apply moduleMore images #Run in Google ColabView on GitHubDownload notebookSee TF Hub models #This Colab demonstrates use of a TF-Hub module trained to perform object detection. #SetupImports and function definitions
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt import tempfile from six.moves.urllib.request import urlopen from six import BytesIO
import numpy as np from PIL import Image from PIL import ImageColor from PIL import ImageDraw from PIL import ImageFont from PIL import ImageOps
import time
print(tf.version)
print("The following GPU devices are available: %s" % tf.test.gpu_device_name())
def display_image(image): fig = plt.figure(figsize=(20, 15)) plt.grid(False) plt.imshow(image)
def download_and_resize_image(url, new_width=256, new_height=256, display=False): _, filename = tempfile.mkstemp(suffix=".jpg") response = urlopen(url) image_data = response.read() image_data = BytesIO(image_data) pil_image = Image.open(image_data) pil_image = ImageOps.fit(pil_image, (new_width, new_height), Image.ANTIALIAS) pil_image_rgb = pil_image.convert("RGB") pil_image_rgb.save(filename, format="JPEG", quality=90) print("Image downloaded to %s." % filename) if display: display_image(pil_image) return filename
def draw_bounding_box_on_image(image, ymin, xmin, ymax, xmax, color, font, thickness=4, display_str_list=()): """Adds a bounding box to an image.""" draw = ImageDraw.Draw(image) im_width, im_height = image.size (left, right, top, bottom) = (xmin * im_width, xmax * im_width, ymin * im_height, ymax * im_height) draw.line([(left, top), (left, bottom), (right, bottom), (right, top), (left, top)], width=thickness, fill=color)
display_str_heights = [font.getsize(ds)[1] for ds in display_str_list]
total_display_str_height = (1 + 2 * 0.05) * sum(display_str_heights)
if top > total_display_str_height: text_bottom = top else: text_bottom = top + total_display_str_height
for display_str in display_str_list[::-1]: text_width, text_height = font.getsize(display_str) margin = np.ceil(0.05 * text_height) draw.rectangle([(left, text_bottom - text_height - 2 * margin), (left + text_width, text_bottom)], fill=color) draw.text((left + margin, text_bottom - text_height - margin), display_str, fill="black", font=font) text_bottom -= text_height - 2 * margin
def draw_boxes(image, boxes, class_names, scores, max_boxes=10, min_score=0.1): """Overlay labeled boxes on an image with formatted scores and label names.""" colors = list(ImageColor.colormap.values())
try: font = ImageFont.truetype("/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Regular.ttf", 25) except IOError: print("Font not found, using default font.") font = ImageFont.load_default()
for i in range(min(boxes.shape[0], max_boxes)): if scores[i] >= min_score: ymin, xmin, ymax, xmax = tuple(boxes[i]) display_str = "{}: {}%".format(class_names[i].decode("ascii"), int(100 * scores[i])) color = colors[hash(class_names[i]) % len(colors)] image_pil = Image.fromarray(np.uint8(image)).convert("RGB") draw_bounding_box_on_image( image_pil, ymin, xmin, ymax, xmax, color, font, display_str_list=[display_str]) np.copyto(image, np.array(image_pil)) return image
image_url="http://thefinestmagazine.com/wp-content/uploads/2016/02/Rubix_The-Finest_Langham-chicago-41.jpg"
downloaded_image_path = download_and_resize_image(image_url, 1280, 856, True)
module_handle = "https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1"
detector = hub.load(module_handle).signatures['default']
def load_img(path): img = tf.io.read_file(path) img = tf.image.decode_jpeg(img, channels=3) return img
def run_detector(detector, path): img = load_img(path)
converted_img = tf.image.convert_image_dtype(img, tf.float32)[tf.newaxis, ...] start_time = time.time() result = detector(converted_img) end_time = time.time()
result = {key:value.numpy() for key,value in result.items()}
print("Found %d objects." % len(result["detection_scores"])) print("Inference time: ", end_time-start_time)
image_with_boxes = draw_boxes( img.numpy(), result["detection_boxes"], result["detection_class_entities"], result["detection_scores"])
display_image(image_with_boxes)
run_detector(detector, downloaded_image_path)
image_urls = [
"https://lp-cms-production.imgix.net/2020-11/AlamyRF_T3PACR.jpg",
"https://p1.pxfuel.com/preview/83/409/187/road-city-city-street-traffic.jpg",
]
def detect_img(image_url): start_time = time.time() image_path = download_and_resize_image(image_url, 640, 480) run_detector(detector, image_path) end_time = time.time() print("Inference time:",end_time-start_time)
detect_img(image_urls[0]) detect_img(image_urls[1])
image_urls = [
def detect_img(image_url): start_time = time.time() image_path = download_and_resize_image(image_url, 640, 480) run_detector(detector, image_path) end_time = time.time() print("Inference time:",end_time-start_time) detect_img(image_urls[0])