Search code examples
tensorflowdeep-learningobject-detectionobject-detection-apibounding-box

how to check if there is a boundng box using tensorflow object detection


I am writing a program for a small drone. I am calculating the distance and the coordinates of a platform at each frame. With the coordinates of the bounding box the drone rotates clockwise or counter clockwise until the bounding box is centered.

                maxBoxes=1 #max boxes to draw
                vis_util.visualize_boxes_and_labels_on_image_array(
                    image,
                    np.squeeze(boxes),
                    np.squeeze(classes).astype(np.int32),
                    np.squeeze(scores),
                    category_index,
                    max_boxes_to_draw=maxBoxes,
                    min_score_thresh=0.5,
                    use_normalized_coordinates=True,
                    line_thickness=4)
                #if here, to check whether there is a detected object and then calculate
                ymin = int((boxes[0][0][0]*imageHeight))
                xmin = int((boxes[0][0][1]*imageWidth))
                ymax = int((boxes[0][0][2]*imageHeight))
                xmax = int((boxes[0][0][3]*imageWidth))
                boxWidth=xmax-xmin
                boxHeight=ymax-ymax
                #Distance calculation
                distance=round(W*F/boxWidth,2) #distance from the object

My question is how to check if there is a detected object (a bounding box) at a given frame, because sometimes it is unable to find the object but still rotates on random directions.


Solution

  • So, after looking to the source code through github, i have been able to figure it out. The way to do it is by checking if the first score is lower than the threshold, like my example below.

                maxBoxes=1 #max boxes to draw
                minScoreThreshold=0.5 #minimum score threshold
                vis_util.visualize_boxes_and_labels_on_image_array(
                    image,
                    np.squeeze(boxes),
                    np.squeeze(classes).astype(np.int32),
                    np.squeeze(scores),
                    category_index,
                    max_boxes_to_draw=maxBoxes,
                    min_score_thresh=minScoreThreshold,
                    use_normalized_coordinates=True,
                    line_thickness=4)
                #if here, to check whether there is a detected object and then calculate
                if (scores[0]<minScoreThreshold).all():
                    print("Nothing has been detected")
                else:
                    print("Object has been detected. Continuing with calculations")
                    ymin = int((boxes[0][0][0]*imageHeight))
                    xmin = int((boxes[0][0][1]*imageWidth))
                    ymax = int((boxes[0][0][2]*imageHeight))
                    xmax = int((boxes[0][0][3]*imageWidth))
                    boxWidth=xmax-xmin
                    boxHeight=ymax-ymax
                    #Distance calculation
                    distance=round(W*F/boxWidth,2) #distance from the object