Friday, June 4, 2021
Magawa the hero rat retires from job detecting landmines
He weighs 1.2kg (2.6lb) and is 70cm (28in) long. While that is far larger than many other rat species, Magawa is still small enough and light enough that he does not trigger mines if he walks over them.
The rats are trained to detect a chemical compound within the explosives, meaning they ignore scrap metal and can search for mines more quickly. Once they find an explosive, they scratch the top to alert their human co-workers.
Magawa is capable of searching a field the size of a tennis court in just 20 minutes - something Apopo says would take a person with a metal detector between one and four days.
Thursday, June 3, 2021
opencv 56 tensorflow detection model zoo 2
centernet_resnet101
6 frames/second
tfod.py
import os
import time
import tensorflow as tf
import tarfile
import urllib.request
from object_detection.utils import label_map_util
from object_detection.utils import config_util
from object_detection.utils import visualization_utils as viz_utils
from object_detection.builders import model_builder
import cv2
import numpy as np
DATA_DIR = os.path.join(os.getcwd(), 'googleNet')
MODELS_DIR = os.path.join(DATA_DIR, 'modelZoo')
print(MODELS_DIR)
for dir in [DATA_DIR, MODELS_DIR]:
if not os.path.exists(dir):
os.mkdir(dir)
# Download and extract model
MODEL_DATE = '20200711'
MODEL_NAME = 'centernet_resnet101_v1_fpn_512x512_coco17_tpu-8'
MODEL_TAR_FILENAME = MODEL_NAME + '.tar.gz'
MODELS_DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/tf2/'
MODEL_DOWNLOAD_LINK = MODELS_DOWNLOAD_BASE + MODEL_DATE + '/' + MODEL_TAR_FILENAME
PATH_TO_MODEL_TAR = os.path.join(MODELS_DIR, MODEL_TAR_FILENAME)
PATH_TO_CKPT = os.path.join(MODELS_DIR, os.path.join(MODEL_NAME, 'checkpoint/'))
PATH_TO_CFG = os.path.join(MODELS_DIR, os.path.join(MODEL_NAME, 'pipeline.config'))
if not os.path.exists(PATH_TO_CKPT):
print('Downloading model. This may take a while... ', end='')
urllib.request.urlretrieve(MODEL_DOWNLOAD_LINK, PATH_TO_MODEL_TAR)
tar_file = tarfile.open(PATH_TO_MODEL_TAR)
tar_file.extractall(MODELS_DIR)
tar_file.close()
os.remove(PATH_TO_MODEL_TAR)
print('Done')
# Download labels file
LABEL_FILENAME = 'mscoco_label_map.pbtxt'
LABELS_DOWNLOAD_BASE = \
'https://raw.githubusercontent.com/tensorflow/models/master/research/object_detection/data/'
PATH_TO_LABELS = os.path.join(MODELS_DIR, os.path.join(MODEL_NAME, LABEL_FILENAME))
if not os.path.exists(PATH_TO_LABELS):
print('Downloading label file... ', end='')
print(PATH_TO_LABELS)
urllib.request.urlretrieve(LABELS_DOWNLOAD_BASE + LABEL_FILENAME, PATH_TO_LABELS)
print('Done')
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # Suppress TensorFlow logging
tf.get_logger().setLevel('ERROR') # Suppress TensorFlow logging (2)
# Enable GPU dynamic memory allocation
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
# Load pipeline config and build a detection model
configs = config_util.get_configs_from_pipeline_file(PATH_TO_CFG)
model_config = configs['model']
detection_model = model_builder.build(model_config=model_config, is_training=False)
# Restore checkpoint
ckpt = tf.compat.v2.train.Checkpoint(model=detection_model)
ckpt.restore(os.path.join(PATH_TO_CKPT, 'ckpt-0')).expect_partial()
@tf.function
def detect_fn(image):
"""Detect objects in image."""
image, shapes = detection_model.preprocess(image)
prediction_dict = detection_model.predict(image, shapes)
detections = detection_model.postprocess(prediction_dict, shapes)
return detections, prediction_dict, tf.reshape(shapes, [-1])
category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS,
use_display_name=True)
# Using OpenCV to initialize the webcam
cap = cv2.VideoCapture("assets/Cairo.mp4")
# Define the codec and create VideoWriter object
fps = 25.175
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
size = (int(frame_width), int(frame_height))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
path = 'C:/Users/zchen/PycharmProjects/opencv/googleNet/record'
out = cv2.VideoWriter()
success = out.open(os.path.join(path, "cario.mov"), fourcc, fps, size, True)
frame_count = 0
t1 = time.time()
while cap.isOpened():
ret, image_np = cap.read()
input_tensor = tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.float32)
detections, predictions_dict, shapes = detect_fn(input_tensor)
label_id_offset = 1
image_np_with_detections = image_np.copy()
viz_utils.visualize_boxes_and_labels_on_image_array(
image_np_with_detections,
detections['detection_boxes'][0].numpy(),
(detections['detection_classes'][0].numpy() + label_id_offset).astype(int),
detections['detection_scores'][0].numpy(),
category_index,
use_normalized_coordinates=True,
max_boxes_to_draw=200,
min_score_thresh=.50,
line_thickness=1,
agnostic_mode=False)
cv2.imshow('centernet_resnet101', image_np_with_detections)
out.write(image_np_with_detections)
frame_count += 1
if cv2.waitKey(1) == 13: # 13 is the Enter Key
break
t2 = time.time()
# calculate FPS
fps = str(float(frame_count / float(t2 - t1))) + ' FPS'
print("Frames processed: {}".format(frame_count))
print("Elapsed time: {:.2f}".format(float(t2 - t1)))
print("FPS: {}".format(fps))
# Release camera and close windows
cap.release()
cv2.destroyAllWindows()
---------------------------
More models can be found in the TensorFlow 2 Detection Model Zoo <https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md>_. To use a different model you will need the URL name of the specific model. This can be done as follows:
- Right click on the Model name of the model you would like to use;
- Click on Copy link address to copy the download link of the model;
- Paste the link in a text editor of your choice. You should observe a link similar to download.tensorflow.org/models/object_detection/tf2/YYYYYYYY/XXXXXXXXX.tar.gz;
- Copy the XXXXXXXXX part of the link and use it to replace the value of the MODEL_NAME variable in the code shown below;
- Copy the YYYYYYYY part of the link and use it to replace the value of the MODEL_DATE variable in the code shown below.
reference:
Tuesday, June 1, 2021
opencv 55 TensorFlow 2 Detection Model Zoo
tensorflow 2 models
tutorial
Windows-Protobuf Installation And Compilation
download protobuf from https://github.com/protocolbuffers/protobuf/releases ->
create Google Protobuf folder in Program files ->
copy unzipped protobuf content in the Google Protobuf folder ->
add C:\Program Files\Google Protobuf\bin to environment variable Path ->
cd tensorflow 2 models directory ->
PS C:\Users\zchen\Downloads\models-master\research> protoc object_detection/protos/*.proto --python_out=.
tutorial
COCO API installation
power shell
pip install cython
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
git bash
cd tensorflow model directory, research folder
cp object_detection/packages/tf2/setup.py .
powershell
cd tensorflow model directory, research folder
python -m pip install .
python object_detection/builders/model_builder_tf2_test.py
download script from https://github.com/krishnaik06/TFOD ->
open in jupyter notebook
tutorial
Subscribe to:
Posts (Atom)