sipp11
5 years ago
commit
bf777b33a0
4 changed files with 521 additions and 0 deletions
@ -0,0 +1,26 @@
|
||||
TO get this code to work |
||||
|
||||
1. clone models |
||||
|
||||
git clone https://github.com/tensorflow/models |
||||
|
||||
2. run [`protoc`](http://google.github.io/proto-lens/installing-protoc.html) in `models/research` |
||||
|
||||
protoc object_detection/protos/*.proto --python_out=. |
||||
|
||||
3. Add models/research into PYTHONPATH |
||||
|
||||
export PYTHONPATH=/home/sipp11/dev/tf1-test/models/research:$PYTHONPATH |
||||
|
||||
4. Copy `mscoco_label_map.pbtxt` from `/models/research/object_detection/data` to `./data/` However, `.pbtxt` is just an id & label conversion as following: |
||||
|
||||
item { |
||||
id: 1 |
||||
display_name: "person" |
||||
} |
||||
item { |
||||
id: 2 |
||||
display_name: "bicycle" |
||||
} |
||||
|
||||
5. It should work! |
@ -0,0 +1,394 @@
|
||||
item { |
||||
id: 1 |
||||
display_name: "person" |
||||
} |
||||
item { |
||||
id: 2 |
||||
display_name: "bicycle" |
||||
} |
||||
item { |
||||
id: 3 |
||||
display_name: "car" |
||||
} |
||||
item { |
||||
id: 4 |
||||
display_name: "motorcycle" |
||||
} |
||||
item { |
||||
id: 5 |
||||
display_name: "airplane" |
||||
} |
||||
item { |
||||
id: 6 |
||||
display_name: "bus" |
||||
} |
||||
item { |
||||
name: "/m/07jdr" |
||||
id: 7 |
||||
display_name: "train" |
||||
} |
||||
item { |
||||
name: "/m/07r04" |
||||
id: 8 |
||||
display_name: "truck" |
||||
} |
||||
item { |
||||
name: "/m/019jd" |
||||
id: 9 |
||||
display_name: "boat" |
||||
} |
||||
item { |
||||
name: "/m/015qff" |
||||
id: 10 |
||||
display_name: "traffic light" |
||||
} |
||||
item { |
||||
name: "/m/01pns0" |
||||
id: 11 |
||||
display_name: "fire hydrant" |
||||
} |
||||
item { |
||||
name: "/m/02pv19" |
||||
id: 13 |
||||
display_name: "stop sign" |
||||
} |
||||
item { |
||||
name: "/m/015qbp" |
||||
id: 14 |
||||
display_name: "parking meter" |
||||
} |
||||
item { |
||||
name: "/m/0cvnqh" |
||||
id: 15 |
||||
display_name: "bench" |
||||
} |
||||
item { |
||||
name: "/m/015p6" |
||||
id: 16 |
||||
display_name: "bird" |
||||
} |
||||
item { |
||||
name: "/m/01yrx" |
||||
id: 17 |
||||
display_name: "cat" |
||||
} |
||||
item { |
||||
name: "/m/0bt9lr" |
||||
id: 18 |
||||
display_name: "dog" |
||||
} |
||||
item { |
||||
name: "/m/03k3r" |
||||
id: 19 |
||||
display_name: "horse" |
||||
} |
||||
item { |
||||
name: "/m/07bgp" |
||||
id: 20 |
||||
display_name: "sheep" |
||||
} |
||||
item { |
||||
name: "/m/01xq0k1" |
||||
id: 21 |
||||
display_name: "cow" |
||||
} |
||||
item { |
||||
name: "/m/0bwd_0j" |
||||
id: 22 |
||||
display_name: "elephant" |
||||
} |
||||
item { |
||||
name: "/m/01dws" |
||||
id: 23 |
||||
display_name: "bear" |
||||
} |
||||
item { |
||||
name: "/m/0898b" |
||||
id: 24 |
||||
display_name: "zebra" |
||||
} |
||||
item { |
||||
name: "/m/03bk1" |
||||
id: 25 |
||||
display_name: "giraffe" |
||||
} |
||||
item { |
||||
name: "/m/01940j" |
||||
id: 27 |
||||
display_name: "backpack" |
||||
} |
||||
item { |
||||
name: "/m/0hnnb" |
||||
id: 28 |
||||
display_name: "umbrella" |
||||
} |
||||
item { |
||||
name: "/m/080hkjn" |
||||
id: 31 |
||||
display_name: "handbag" |
||||
} |
||||
item { |
||||
name: "/m/01rkbr" |
||||
id: 32 |
||||
display_name: "tie" |
||||
} |
||||
item { |
||||
name: "/m/01s55n" |
||||
id: 33 |
||||
display_name: "suitcase" |
||||
} |
||||
item { |
||||
name: "/m/02wmf" |
||||
id: 34 |
||||
display_name: "frisbee" |
||||
} |
||||
item { |
||||
name: "/m/071p9" |
||||
id: 35 |
||||
display_name: "skis" |
||||
} |
||||
item { |
||||
name: "/m/06__v" |
||||
id: 36 |
||||
display_name: "snowboard" |
||||
} |
||||
item { |
||||
name: "/m/018xm" |
||||
id: 37 |
||||
display_name: "sports ball" |
||||
} |
||||
item { |
||||
name: "/m/02zt3" |
||||
id: 38 |
||||
display_name: "kite" |
||||
} |
||||
item { |
||||
name: "/m/03g8mr" |
||||
id: 39 |
||||
display_name: "baseball bat" |
||||
} |
||||
item { |
||||
name: "/m/03grzl" |
||||
id: 40 |
||||
display_name: "baseball glove" |
||||
} |
||||
item { |
||||
name: "/m/06_fw" |
||||
id: 41 |
||||
display_name: "skateboard" |
||||
} |
||||
item { |
||||
name: "/m/019w40" |
||||
id: 42 |
||||
display_name: "surfboard" |
||||
} |
||||
item { |
||||
name: "/m/0dv9c" |
||||
id: 43 |
||||
display_name: "tennis racket" |
||||
} |
||||
item { |
||||
name: "/m/04dr76w" |
||||
id: 44 |
||||
display_name: "bottle" |
||||
} |
||||
item { |
||||
name: "/m/09tvcd" |
||||
id: 46 |
||||
display_name: "wine glass" |
||||
} |
||||
item { |
||||
name: "/m/08gqpm" |
||||
id: 47 |
||||
display_name: "cup" |
||||
} |
||||
item { |
||||
name: "/m/0dt3t" |
||||
id: 48 |
||||
display_name: "fork" |
||||
} |
||||
item { |
||||
name: "/m/04ctx" |
||||
id: 49 |
||||
display_name: "knife" |
||||
} |
||||
item { |
||||
name: "/m/0cmx8" |
||||
id: 50 |
||||
display_name: "spoon" |
||||
} |
||||
item { |
||||
name: "/m/04kkgm" |
||||
id: 51 |
||||
display_name: "bowl" |
||||
} |
||||
item { |
||||
name: "/m/09qck" |
||||
id: 52 |
||||
display_name: "banana" |
||||
} |
||||
item { |
||||
name: "/m/014j1m" |
||||
id: 53 |
||||
display_name: "apple" |
||||
} |
||||
item { |
||||
name: "/m/0l515" |
||||
id: 54 |
||||
display_name: "sandwich" |
||||
} |
||||
item { |
||||
name: "/m/0cyhj_" |
||||
id: 55 |
||||
display_name: "orange" |
||||
} |
||||
item { |
||||
name: "/m/0hkxq" |
||||
id: 56 |
||||
display_name: "broccoli" |
||||
} |
||||
item { |
||||
name: "/m/0fj52s" |
||||
id: 57 |
||||
display_name: "carrot" |
||||
} |
||||
item { |
||||
name: "/m/01b9xk" |
||||
id: 58 |
||||
display_name: "hot dog" |
||||
} |
||||
item { |
||||
name: "/m/0663v" |
||||
id: 59 |
||||
display_name: "pizza" |
||||
} |
||||
item { |
||||
name: "/m/0jy4k" |
||||
id: 60 |
||||
display_name: "donut" |
||||
} |
||||
item { |
||||
name: "/m/0fszt" |
||||
id: 61 |
||||
display_name: "cake" |
||||
} |
||||
item { |
||||
name: "/m/01mzpv" |
||||
id: 62 |
||||
display_name: "chair" |
||||
} |
||||
item { |
||||
name: "/m/02crq1" |
||||
id: 63 |
||||
display_name: "couch" |
||||
} |
||||
item { |
||||
name: "/m/03fp41" |
||||
id: 64 |
||||
display_name: "potted plant" |
||||
} |
||||
item { |
||||
name: "/m/03ssj5" |
||||
id: 65 |
||||
display_name: "bed" |
||||
} |
||||
item { |
||||
name: "/m/04bcr3" |
||||
id: 67 |
||||
display_name: "dining table" |
||||
} |
||||
item { |
||||
name: "/m/09g1w" |
||||
id: 70 |
||||
display_name: "toilet" |
||||
} |
||||
item { |
||||
name: "/m/07c52" |
||||
id: 72 |
||||
display_name: "tv" |
||||
} |
||||
item { |
||||
name: "/m/01c648" |
||||
id: 73 |
||||
display_name: "laptop" |
||||
} |
||||
item { |
||||
name: "/m/020lf" |
||||
id: 74 |
||||
display_name: "mouse" |
||||
} |
||||
item { |
||||
name: "/m/0qjjc" |
||||
id: 75 |
||||
display_name: "remote" |
||||
} |
||||
item { |
||||
name: "/m/01m2v" |
||||
id: 76 |
||||
display_name: "keyboard" |
||||
} |
||||
item { |
||||
name: "/m/050k8" |
||||
id: 77 |
||||
display_name: "cell phone" |
||||
} |
||||
item { |
||||
name: "/m/0fx9l" |
||||
id: 78 |
||||
display_name: "microwave" |
||||
} |
||||
item { |
||||
name: "/m/029bxz" |
||||
id: 79 |
||||
display_name: "oven" |
||||
} |
||||
item { |
||||
name: "/m/01k6s3" |
||||
id: 80 |
||||
display_name: "toaster" |
||||
} |
||||
item { |
||||
name: "/m/0130jx" |
||||
id: 81 |
||||
display_name: "sink" |
||||
} |
||||
item { |
||||
name: "/m/040b_t" |
||||
id: 82 |
||||
display_name: "refrigerator" |
||||
} |
||||
item { |
||||
name: "/m/0bt_c3" |
||||
id: 84 |
||||
display_name: "book" |
||||
} |
||||
item { |
||||
name: "/m/01x3z" |
||||
id: 85 |
||||
display_name: "clock" |
||||
} |
||||
item { |
||||
name: "/m/02s195" |
||||
id: 86 |
||||
display_name: "vase" |
||||
} |
||||
item { |
||||
name: "/m/01lsmm" |
||||
id: 87 |
||||
display_name: "scissors" |
||||
} |
||||
item { |
||||
name: "/m/0kmg4" |
||||
id: 88 |
||||
display_name: "teddy bear" |
||||
} |
||||
item { |
||||
name: "/m/03wvsk" |
||||
id: 89 |
||||
display_name: "hair drier" |
||||
} |
||||
item { |
||||
name: "/m/012xff" |
||||
id: 90 |
||||
display_name: "toothbrush" |
||||
} |
@ -0,0 +1,8 @@
|
||||
Cython |
||||
contextlib2 |
||||
pillow |
||||
lxml |
||||
jupyter |
||||
matplotlib |
||||
protobuf |
||||
tensorflow==1.14.0 |
@ -0,0 +1,93 @@
|
||||
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(0) |
||||
cap = cv2.VideoCapture("/home/sipp11/Desktop/5min.mp4") |
||||
|
||||
|
||||
sys.path.append("..") |
||||
|
||||
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 frozen detection graph. This is the actual model that is used for the object detection. |
||||
PATH_TO_CKPT = MODEL_NAME + "/frozen_inference_graph.pb" |
||||
|
||||
# List of the strings that is used to add correct label for each box. |
||||
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.compat.v1.GraphDef() |
||||
with tf.io.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) |
||||
|
||||
with detection_graph.as_default(): |
||||
with tf.compat.v1.Session(graph=detection_graph) as sess: |
||||
while True: |
||||
ret, image_np = cap.read() |
||||
# Expand dimensions since the model expects images to have shape: [1, None, None, 3] |
||||
image_np_expanded = np.expand_dims(image_np, axis=0) |
||||
image_tensor = detection_graph.get_tensor_by_name("image_tensor:0") |
||||
# Each box represents a part of the image where a particular object was detected. |
||||
boxes = detection_graph.get_tensor_by_name("detection_boxes:0") |
||||
# Each score represent how level of confidence for each of the objects. |
||||
# Score is shown on the result image, together with the class label. |
||||
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") |
||||
# Actual detection. |
||||
(boxes, scores, classes, num_detections) = sess.run( |
||||
[boxes, scores, classes, num_detections], |
||||
feed_dict={image_tensor: image_np_expanded}, |
||||
) |
||||
# Visualization of the results of a detection. |
||||
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 |
Loading…
Reference in new issue