Intel® Distribution of OpenVINO™ Toolkit
Community assistance about the Intel® Distribution of OpenVINO™ toolkit, OpenCV, and all aspects of computer vision-related on Intel® platforms.
6482 Discussions

Raspbeery pi 4 + tensorflow models object detection + NCS2

ULGER__Engin
Beginner
547 Views

https://github.com/tensorflow/models/tree/master/research/object_detection/

*****************How to insert NCS2 into the following code?******************************

object_detection_webcam.py

## Some of the code is copied from Google's example at
## https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb


# Import packages
import os
import cv2
import numpy as np
import tensorflow as tf
import time
import sys



# This is needed since the notebook is stored in the object_detection folder.
sys.path.append("..")

# Import utilites
from utils import label_map_util
from utils import visualization_utils as vis_util


# Name of the directory containing the object detection module we're using
MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'

# Grab path to current working directory
CWD_PATH = os.getcwd() 


# for object detection.
# nesne algılama için.
PATH_TO_CKPT = os.path.join(CWD_PATH,MODEL_NAME,'frozen_inference_graph.pb') 

# Path to label map fileqq
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

# Number of classes the object detector can identify
NUM_CLASSES = 90

## Load the label map.

# Label maps map indices to category names, so that when our convolution
# network predicts `5`, we know that this corresponds to `king`.
# Here we use internal utility functions, but anything that returns a
# dictionary mapping integers to appropriate string labels would be fine
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)


# Load the Tensorflow model into memory.
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='')

    sess = tf.Session(graph=detection_graph)


# Define input and output tensors (i.e. data) for the object detection classifier

# Input tensor is the image
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')

# Output tensors are the detection boxes, scores, and classes
# Each box represents a part of the image where a particular object was detected
detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')

# Each score represents level of confidence for each of the objects.
# The score is shown on the result image, together with the class label.
detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')

# Number of objects detected
num_detections = detection_graph.get_tensor_by_name('num_detections:0')

# Initialize webc   am feed
video = cv2.VideoCapture(0)


while(True):

    # Acquire frame and expand frame dimensions to have shape: [1, None, None, 3]
    # i.e. a single-column array, where each item in the column has the pixel RGB valu
    ret, frame = video.read()
    frame_expanded = np.expand_dims(frame, axis=0)

    # Perform the actual detection by running the model with the image as input
    (boxes, scores, classes, num) = sess.run(
        [detection_boxes, detection_scores, detection_classes, num_detections],
        feed_dict={image_tensor: frame_expanded})

    # Draw the results of the detection (aka 'visulaize the results')
    vis_util.visualize_boxes_and_labels_on_image_array(
        ard,
        frame,
        np.squeeze(boxes),
        np.squeeze(classes).astype(np.int32),
        np.squeeze(scores),
        category_index,
        use_normalized_coordinates=True,
        line_thickness=8,
        min_score_thresh=0.85)

    # All the results have been drawn on the frame, so it's time to display it.
    cv2.imshow('Object detector', frame)


    # Press 'q' to quit
    if cv2.waitKey(1) == ord('q'):
        break

# Clean up
video.release()
cv2.destroyAllWindows()

 

 

thank you..

 

0 Kudos
2 Replies
Shubha_R_Intel
Employee
547 Views

Dear ULGER, Engin,

There is no way to insert MYRIAD or NCS2 into that code.

First of all, OpenVino Inference Engine does not understand Tensorflow models directly.

First you must convert frozen_inference_graph.pb into IR using Model Optimizer. Here is the Model Optimizer Tensorflow Document  for reference.

Next you will need Inference Engine Core API on that model to perform inference. There are Python object detection samples within the OpenVino toolkit that do this. You can refer to object detection code, such as object_detection_sample_ssd and improvise accordingly.

Hope it helps,

Thanks,

Shubha

 

0 Kudos
NMitr2
Beginner
547 Views

Hello Shuba,

I'm new on this group,
I have a question: 
I trained my custom dataset for recognise two different objects, everything was fine, I also converter the files in IR so I got the file frozen_inferene_graph.xml and .bin ect... 

for run this file inside NCS2 I used objcet_detection_demo_ssd_async.py and I got the output on video, but I saw just one of the object I trained, while on jupyter I can see both)..

How can I get the label for each object I have trained?? or I need to change/fix the file objcet_detection_demo_ssd_async.py ???

many thanks for your help and tips

Regards

Nicola

0 Kudos
Reply