File size: 2,893 Bytes
9b11319
 
7a25466
 
 
0763beb
9b11319
 
 
d078086
9b11319
 
d078086
9b11319
 
 
 
 
3fbf9d4
9b11319
 
d078086
9b11319
 
 
 
 
 
 
 
d078086
 
9b11319
 
 
 
 
 
 
 
 
3fbf9d4
7a25466
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3fbf9d4
 
 
 
 
 
 
 
 
49ecb98
 
 
 
 
3fbf9d4
 
 
9b11319
49ecb98
3fbf9d4
d078086
 
 
 
3fbf9d4
 
 
 
 
9b11319
 
 
 
 
 
 
7a25466
187ae11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import cv2
import gradio as gr
import fast_colorthief
import webcolors
from PIL import Image
import numpy as np
thres = 0.45 # Threshold to detect object



def Detection(filename):
  cap = cv2.VideoCapture(filename)
  framecount=0  

  cap.set(3,1280)
  cap.set(4,720)
  cap.set(10,70)

  error="in function 'cv::imshow'"
  classNames= []
  FinalItems=[]
  classFile = 'coco.names'
  with open(classFile,'rt') as f:
    #classNames = f.read().rstrip('n').split('n')
    classNames = f.readlines()


  # remove new line characters
  classNames = [x.strip() for x in classNames]
  print(classNames)
  configPath = 'ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
  weightsPath = 'frozen_inference_graph.pb'


  net = cv2.dnn_DetectionModel(weightsPath,configPath)
  net.setInputSize(320,320)
  net.setInputScale(1.0/ 127.5)
  net.setInputMean((127.5, 127.5, 127.5))
  net.setInputSwapRB(True)

  while True:
    success,img = cap.read()


    
    # #Colour
    try:
      image = Image.fromarray(img)
      image = image.convert('RGBA')
      image = np.array(image).astype(np.uint8)
      palette=fast_colorthief.get_palette(image)
    

      for i in range(len(palette)):
        diff={}
        for color_hex, color_name in webcolors.CSS3_HEX_TO_NAMES.items():
          r, g, b = webcolors.hex_to_rgb(color_hex)
          diff[sum([(r - palette[i][0])**2,
                    (g - palette[i][1])**2,
                    (b - palette[i][2])**2])]= color_name
        if FinalItems.count(diff[min(diff.keys())])==0:
          FinalItems.append(diff[min(diff.keys())])

    except:
      pass
        
    try:
        classIds, confs, bbox = net.detect(img,confThreshold=thres)
    except:
        pass
    print(classIds,bbox)
    try:
      if len(classIds) != 0:
          for classId, confidence,box in zip(classIds.flatten(),confs.flatten(),bbox):
    
              #cv2.rectangle(img,box,color=(0,255,0),thickness=2)
              #cv2.putText(img,classNames[classId-1].upper(),(box[0]+10,box[1]+30),
              #cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),2)
              #cv2.putText(img,str(round(confidence*100,2)),(box[0]+200,box[1]+30),
              #cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),2)
              if FinalItems.count(classNames[classId-1]) == 0:
                FinalItems.append(classNames[classId-1])
            
      
      #cv2.imshow("Output",img)
      cv2.waitKey(10)
      if framecount>cap.get(cv2.CAP_PROP_FRAME_COUNT):
          break
      else:
          framecount+=1
    except  Exception as err:
      print(err)
      t=str(err)
      if t.__contains__(error):
        break

  print(FinalItems)
  return str(FinalItems)

interface = gr.Interface(fn=Detection, 
                        inputs=["video"],
                         outputs="text", 
                        title='Object & Color Detection in Video')
interface.launch(inline=False,debug=True)