Detecting Certain Classes with OpenCV DNN
Hello all, I was recently working on an object detection project in which I had to detect and localize certain objects in a frame. However, I was only able to use the OpenCV example on the Tensorflow Object Detection github in order to draw yellow boxes around each identified object. However, I want to print the name of the object that I have detected. I wanted to know how to do this. Also, I have only written code to detect and localize the image in one frame, how would I do so in order to make it process a video stream? Sorry for asking so many questions but, my last question is that, all my code is written in Python, how would I write all of the similar code in C++?
As aforementioned:
import cv2 as cv
from collections import defaultdict
cvNet = cv.dnn.readNetFromTensorflow('/Users/User/Desktop/Robotics/Skystone-Vision/Final/image_tensor/PB_file/model.pb', '/Users/User/Desktop/Robotics/Skystone-Vision/Final/image_tensor/Pbtxt/model.pbtxt')
img = cv.imread('/Users/User/Desktop/TestStuff/work.jpeg')
rows = img.shape[0]
cols = img.shape[1]
cvNet.setInput(cv.dnn.blobFromImage(img, size=(300, 300), swapRB=True, crop=False))
cvOut = cvNet.forward()
numOfRect = 0
objects_dict = {}
for detection in cvOut[0,0,:,:]:
score = float(detection[2])
objects = detection
if score > 0.75:
left = detection[3] * cols
top = detection[4] * rows
right = detection[5] * cols
bottom = detection[6] * rows
objects_dict[score]=[left,top,right,bottom]
numOfRect += 1
print(score)
#print(objects_dict)
l=list(objects_dict.keys())
l.sort(reverse=True)
print(l)
for i in l[:6] :
print(i,objects_dict[i])
cv.rectangle(img, (int(objects_dict[i][0]), int(objects_dict[i][1])), (int(objects_dict[i][2]), int(objects_dict[i][3])), (23, 230, 210), thickness=5)
cv.imshow('img', img)
print(numOfRect)
print(objects)
cv.waitKey()
PB file, Pbtxt, model config: https://drive.google.com/drive/folder...
what kind of model do you try to use ? does it have the required object classes ? do you need to retrain it on your own ?
please put at least your code here, not on some pastebin, where it will expire (also, pastebin.com is not reachable from cn or tr)
@berak My apologies, I did not know that pastebin was not accessible. I will assume that the PB fille, the PBtxt file, and the model config are accessible. The code that I am using is however rather long and it seems to be exceeding the character limit. If the Google Drive files are accessible the code should be accessible too. The name of the file is DetectRightObj.py. The link for the code: along with the rest of the files. Here
@berak The forum seems to be adding the text that I have typed along with the code for a total characted count. The code itself is rather close to 40 lines.
you need a list of classnames, or at least the name of the dataset it was trained on (and take it from there)