text: import numpy as np
  import cv2
  import pickle
  
  
  frameWidth= 640
  frameHeight = 480
  brightness = 180
  threshold = 0.75
  font = cv2.FONT_HERSHEY_SIMPLEX
  cap = cv2.VideoCapture(0)
  cap.set(3, frameWidth)
  cap.set(4, frameHeight)
  cap.set(10, brightness)
  
  pickle_in=open("model_trained_10.p","rb")
  model=pickle.load(pickle_in)
  
  def grayscale(img):
      img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
      return img
  def equalize(img):
      img =cv2.equalizeHist(img)
      return img
  def preprocessing(img):
      img = grayscale(img)
      img = equalize(img)
      img = img/255
      return img
  def croping(img1):
      img=img1
      img =np.where(img>70,255,img)
      img =np.where(img<=30,0,img)
      img = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,115,1)
      
      contours, _ = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
      rect_contours=[]
      for i in contours:
        perimeter = cv2.arcLength(i,True)
        approx = cv2.approxPolyDP(i,0.1*perimeter,True)
        (x,y,w,h)=cv2.boundingRect(i)
        if(len(approx)==4):
          rect_contours.append(i)
          
      max_area=0
      phone_portion=None
      for cnt in rect_contours:
        (x,y,w,h)=cv2.boundingRect(cnt)
        if max_area<w*h:
          max_area=w*h
          phone_portion=cnt
      return phone_portion
  def getCalssName(classNo):
      if   classNo == 0: return 'Speed Limit 20 km/h'
      elif classNo == 1: return 'Speed Limit 30 km/h'
      elif classNo == 2: return 'Speed Limit 50 km/h'
      elif classNo == 3: return 'Speed Limit 60 km/h'
      elif classNo == 4: return 'Speed Limit 70 km/h'
      elif classNo == 5: return 'Speed Limit 80 km/h'
      elif classNo == 6: return 'End of Speed Limit 80 km/h'
      elif classNo == 7: return 'Speed Limit 100 km/h'
      elif classNo == 8: return 'Speed Limit 120 km/h'
      elif classNo == 9: return 'No passing'
      elif classNo == 10: return 'No passing for vechiles over 3.5 metric tons'
      elif classNo == 11: return 'Right-of-way at the next intersection'
      elif classNo == 12: return 'Priority road'
      elif classNo == 13: return 'Yield'
      elif classNo == 14: return 'Stop'
      elif classNo == 15: return 'No vechiles'
      elif classNo == 16: return 'Vechiles over 3.5 metric tons prohibited'
      elif classNo == 17: return 'No entry'
      elif classNo == 18: return 'General caution'
      elif classNo == 19: return 'Dangerous curve to the left'
      elif classNo == 20: return 'Dangerous curve to the right'
      elif classNo == 21: return 'Double curve'
      elif classNo == 22: return 'Bumpy road'
      elif classNo == 23: return 'Slippery road'
      elif classNo == 24: return 'Road narrows on the right'
      elif classNo == 25: return 'Road work'
      elif classNo == 26: return 'Traffic signals'
      elif classNo == 27: return 'Pedestrians'
      elif classNo == 28: return 'Children crossing'
      elif classNo == 29: return 'Bicycles crossing'
      elif classNo == 30: return 'Beware of ice/snow'
      elif classNo == 31: return 'Wild animals crossing'
      elif classNo == 32: return 'End of all speed and passing limits'
      elif classNo == 33: return 'Turn right ahead'
      elif classNo == 34: return 'Turn left ahead'
      elif classNo == 35: return 'Ahead only'
      elif classNo == 36: return 'Go straight or right'
      elif classNo == 37: return 'Go straight or left'
      elif classNo == 38: return 'Keep right'
      elif classNo == 39: return 'Keep left'
      elif classNo == 40: return 'Roundabout mandatory'
      elif classNo == 41: return 'End of no passing'
      elif classNo == 42: return 'End of no passing by vechiles over 3.5 metric tons'
  
  while True:
  
      success, imgOrignal = cap.read()
      imt=cv2.cvtColor(imgOrignal,cv2.COLOR_BGR2GRAY)
      cnt=croping(imt.astype('uint8'))
      (x,y,w,h)=cv2.boundingRect(cnt)
      imgO=imgOrignal[y:y+h,x:x+w]
      cv2.imshow("cropped",imgO)
      img = np.asarray(imgO)
      img = cv2.resize(img, (32, 32))
      img = preprocessing(img)
      cv2.imshow("Processed Image", img)
      img = img.reshape(1, 32, 32, 1)
      cv2.putText(imgOrignal, "CLASS: " , (20, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
      cv2.putText(imgOrignal, "PROBABILITY: ", (20, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
      predictions = model.predict(img)
      classIndex = model.predict_classes(img)
      probabilityValue =np.amax(predictions)
      if probabilityValue > threshold:
          cv2.putText(imgOrignal,str(classIndex)+" "+str(getCalssName(classIndex)), (120, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
          cv2.putText(imgOrignal, str(round(probabilityValue*100,2) )+"%", (180, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
      cv2.imshow("Result", imgOrignal)
  
      if cv2.waitKey(1) & 0xFF == ord('q'):
          break