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
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')
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
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 ")
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
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)
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)
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)
def set_builder(self): self._builder = builders.TextBuilder()
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()
def setUp(self, get_version): get_version.return_value = (4, 0, 0) self.builder = builders.TextBuilder()