text: '''
  /*
   * Copyright 2012 CarCV Development Team
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  '''
  
  import cv2
  import numpy as np
  
  #######   training part    ###############
  samples = np.loadtxt('generalsamples.data',np.float32)
  responses = np.loadtxt('generalresponses.data',np.float32)
  responses = responses.reshape((responses.size,1))
  
  model = cv2.KNearest()
  model.train(samples,responses)
  
  ############################# testing part  #########################
  
  im = cv2.imread('test.jpg')
  out = np.zeros(im.shape,np.uint8)
  gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
  thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2)
  
  contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
  
  for cnt in contours:
      if cv2.contourArea(cnt)>50:
          [x,y,w,h] = cv2.boundingRect(cnt)
          if  h>25:
              cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
              roi = thresh[y:y+h,x:x+w]
              roismall = cv2.resize(roi,(10,10))
              roismall = roismall.reshape((1,100))
              roismall = np.float32(roismall)
              retval, results, neigh_resp, dists = model.find_nearest(roismall, k = 1)
              string = str(chr(results[0][0]))
              cv2.putText(out,string,(x,y+h),0,1,(0,255,0))
  
  cv2.imshow('im',im)
  cv2.imshow('out',out)
  cv2.waitKey(0)