예제 #1
0
 def OCR(self, plateImage):
     tessdata_dir_config = '--tessdata-dir "C:\\Program Files\\Tesseract-OCR\\tessdata"'
     cv2.imwrite("a.jpg", plateImage)
     textOfImage = tools.image_to_string(Image.open("a.jpg"),
                                         builder=builders.TextBuilder())
     #textOfImage = pytesseract.image_to_string(plateImage, lang="eng",config=tessdata_dir_config)
     return textOfImage
예제 #2
0
    def get_text_from_file(self, filepath):
        from pyocr import tesseract, builders
        from PIL import Image
        image = Image.open(filepath)

        text = tesseract.image_to_string(image=image, builder=builders.TextBuilder())
        return text.strip('\r\n')
예제 #3
0
def processing():
  global rectangle,thresh,erosion_iters,most_common_filter    
  #
  r = cv2.getTrackbarPos('Threshold', 'Inputs')   #changed from frame to Inputs
  #
  cv2.namedWindow('image')
  cv2.setMouseCallback('image', draw_shape)
  #
  img_temp, img, roi = initialize_images()
  rectangle = None
  scale = 1
  factor = 0.75
  #
  while(1):
    sleep(0.2)
    img = img_temp.copy()
    #
    ### ROI ###########################################################
    if is_rectangle(rectangle):
      roi = img_temp[rectangle[0][1]:rectangle[1][1], rectangle[0][0]:rectangle[1][0]]
      cv2.rectangle(img,rectangle[0],rectangle[1],(0,255,0),0)
    else:
      roi = None
    ### FILTER ########################################################
    # retrieving parameters from GUI slidebars        
    ### DISPLAY #######################################################
    cv2.imshow('image',img)
    if roi is not None:      #changed from "if roi != None" which gave array related error
      kernel = np.ones((5, 5), np.uint8)
      roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
      roi = cv2.threshold(roi, thresh, 255, cv2.THRESH_BINARY)[1]
      roi = cv2.erode(roi, kernel, iterations=erosion_iters)
      cv2.imshow('ROI',roi) 

    if roi is not None and not drawing:    #changed from "if roi != None" which gave array related error
      ### OCR ###########################################################
      tool = pyocr.get_available_tools()[0] # 
      lang = 'letsgodigital'#'letsgodigital'#"eng"    #export TESSDATA_PREFIX=/path/to/tessdata/folder
      txt = tool.image_to_string(Image.fromarray(roi), lang=lang, builder=builders.TextBuilder())
      print(txt)
    ### ACTIONS #######################################################
    k = cv2.waitKey(1) & 0xFF
    if k == ord('c'):
      img_temp, img, roi = initialize_images()
      img = img_temp.copy()
      rectangle, roi = None, None
      pass
    elif k == ord('r'):
      # todo: ROI resizing
      scale *= factor
      print(scale)
      img = cv2.resize(img, (0,0), fx=factor, fy=factor)
      img_temp = img.copy()
    elif k == 27:   #esc key
      cv2.destroyAllWindows()
      break
예제 #4
0
def ocr(tool, img, cont='txt'):
    # img is [0,1] with float64 and single channel
    # langs = tool.get_available_languages()
    # lang = langs[0]

    if cont == 'txt':
        # txt is a Python string
        txt = tool.image_to_string(
            Image.fromarray((img * 255.0).astype('uint8'), mode='L'),
            lang="eng",
            builder=ocrtools.TextBuilder()
        )
        return txt

    if cont == 'word_boxes':
        # list of box objects. For each box object:
        #   box.content is the word in the box
        #   box.position is its position on the page (in pixels)
        #
        # Beware that some OCR tools (Tesseract for instance)
        # may return empty boxes
        word_boxes = tool.image_to_string(
            Image.fromarray((img * 255.0).astype('uint8'), mode='L'),
            lang="eng",
            builder=ocrtools.WordBoxBuilder()
        )
        return word_boxes

    if cont == 'line_word_boxes':
        # list of line objects. For each line object:
        #   line.word_boxes is a list of word boxes (the individual words in the line)
        #   line.content is the whole text of the line
        #   line.position is the position of the whole line on the page (in pixels)
        #
        # Beware that some OCR tools (Tesseract for instance)
        # may return empty boxes
        line_and_word_boxes = tool.image_to_string(
            Image.fromarray((img * 255.0).astype('uint8'), mode='L'),
            lang="eng",
            builder=ocrtools.LineBoxBuilder()
        )
        return line_and_word_boxes

    # if cont == 'digits':
    #     # Digits - Only Tesseract (not 'libtesseract' yet !)
    #     # digits is a python string
    #     digits = tool.image_to_string(
    #         Image.fromarray((img * 255.0).astype('uint8'), mode='L'),
    #         lang="eng",
    #         builder=pyocr.tesseract.DigitBuilder()
    #     )
    #     return digits

    else:
        raise ValueError(" Not supported OCR type ")
예제 #5
0
 def ditect(self, fname):
     try:
         croped_img = self.__crop_img(fname)
         inference_txt = self.tool.image_to_string(
             croped_img,
             lang='eng',
             builder=b.TextBuilder(tesseract_layout=6))
     except Exception as e:
         sys.stderr.write(str(e))
         sys.exit(0)
     return inference_txt
    def __init__(self):
        tools = pyocr.get_available_tools()
        tool = tools[0]

        langs = tool.get_available_languages()

        self.tool = tool
        self.lang = 'jpn'

        builder = builders.TextBuilder(tesseract_layout=6)
        self.builder = builder
예제 #7
0
 def setUp(self, get_version):
     get_version.return_value = (4, 0, 0)
     self.builder = builders.TextBuilder()
     self.image = Image.new(mode="RGB", size=(1, 1))
     self.text_file = StringIO(self._get_file_content("text"))
     self.stdout = MagicMock()
     self.stdout.stdout.read.return_value = b"Cuneiform for Linux 1.1.0\n"
     self.stdout.wait.return_value = 0
     self.tmp_filename = "/tmp/cuneiform_n0qfk87otxt"
     self.enter = MagicMock()
     self.enter.__enter__.return_value = MagicMock()
     self.enter.__enter__.return_value.configure_mock(
         name=self.tmp_filename)
예제 #8
0
    def test_run_tesseract(self, popen, get_version):
        message = ("Tesseract Open Source OCR Engine v4.0.0 with Leptonica\n")
        self.stdout.stdout.read.return_value = message.encode()
        popen.return_value = self.stdout

        with tesseract.temp_dir() as tmpdir:
            self.image.save(os.path.join(tmpdir, "input.bmp"))
            status, error = tesseract.run_tesseract(
                "input.bmp",
                "output",
                cwd=tmpdir,
            )
        self.assertEqual(status, 0)
        self.assertEqual(error.decode(), message)
        popen.assert_called_once_with(["tesseract", "input.bmp", "output"],
                                      cwd=tmpdir,
                                      startupinfo=None,
                                      creationflags=0,
                                      stdout=subprocess.PIPE,
                                      stderr=subprocess.STDOUT)

        get_version.return_value = (4, 0, 0)
        builder = builders.TextBuilder()
        with tesseract.temp_dir() as tmpdir:
            self.image.save(os.path.join(tmpdir, "input2.bmp"))
            status, error = tesseract.run_tesseract(
                "input2.bmp",
                "output2",
                cwd=tmpdir,
                lang="fra",
                flags=builder.tesseract_flags,
                configs=builder.tesseract_configs,
            )
        self.assertEqual(status, 0)
        self.assertEqual(error.decode(), message)
        popen.assert_called_with(
            ["tesseract", "input2.bmp", "output2", "-l", "fra", "--psm", "3"],
            cwd=tmpdir,
            startupinfo=None,
            creationflags=0,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT)
        self.assertEqual(popen.call_count, 2)
예제 #9
0
 def test_init_cuneiform_params(self, get_version):
     get_version.return_value = (4, 0, 0)
     # XXX Maybe overkill?
     # this check all combinations of parameters
     for cun_dotmat, cun_fax, cun_sglcol in product(*((False, True), ) * 3):
         builder = builders.TextBuilder(cuneiform_dotmatrix=cun_dotmat,
                                        cuneiform_fax=cun_fax,
                                        cuneiform_singlecolumn=cun_sglcol)
         if cun_dotmat:
             self.assertIn("--dotmatrix", builder.cuneiform_args)
         else:
             self.assertNotIn("--dotmatrix", builder.cuneiform_args)
         if cun_fax:
             self.assertIn("--fax", builder.cuneiform_args)
         else:
             self.assertNotIn("--fax", builder.cuneiform_args)
         if cun_sglcol:
             self.assertIn("--singlecolumn", builder.cuneiform_args)
         else:
             self.assertNotIn("--singlecolumn", builder.cuneiform_args)
예제 #10
0
 def set_builder(self):
     self._builder = builders.TextBuilder()
예제 #11
0
 def setUp(self, get_version):
     get_version.return_value = (4, 0, 0)
     self.image = Image.new(mode="RGB", size=(1, 1))
     self.builder = builders.TextBuilder()
예제 #12
0
 def setUp(self, get_version):
     get_version.return_value = (4, 0, 0)
     self.builder = builders.TextBuilder()