import cv2
import numpy as np 
net=cv2.dnn.readNet("D://codespeedy//yolov3.weights","D://codespeedy//yolov3.cfg")
classes = []
with open("D://codespeedy//coco.names","r")as f:
    classes=[line.strip()for line in f.readlines()]
output_layers=net.getUnconnectedOutLayersNames()
#layer_names=net.getLayerNames()
#output_layers=[layer_names[i(0)-1]for i in net.getUnconnetedOutLayers()]
colors=np.random.uniform(0,255,size=(len(classes),3))
img=cv2.imread("D://codespeedy//hotel-room-blocks.jpg")
img =cv2.resize(img,None,fx=0.4,fy=0.4)
height,width,channels=img.shape
blob=cv2.dnn.blobFromImage(img,0.00392,(416,416),(0,0,0),True,crop=False)
net.setInput(blob)
outs=net.forward(output_layers)
class_ids=[]
confidences=[]
boxes=[]
for out in outs:
    for detection in out:
        scores=detection[5:]
        class_id=np.argmax(scores)
        confidence=scores[class_id]
        if confidence>0.5:
            center_x=int(detection[0]*width)
            center_y=int(detection[1]*height)
            w=int(detection[2]*width)
            h=int(detection[3]*height)
            x=int(center_x-w/2)
            y=int(center_y-h/2)
            boxes.append([x,y,w,h])
            confidences.append(float(confidence))
            class_ids.append(class_id)

indexes=cv2.dnn.NMSBoxes(boxes,confidences,0.5,0.4)
print(indexes)
font=cv2.FONT_HERSHEY_PLAIN
for i in range(len(boxes)):
    if i in indexes:
        x,y,w,h=boxes[i]    
        label=classes[class_ids[i]]
        color=colors[i]
        cv2.rectangle(img,(x,y),(x+y,w+h),color,2)
        cv2.putText(img,label,(x,y+30),font,3,color,3)
cv2.imshow("Image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
