생성 데이터 인텔리전스

Tesseract, OpenCV 및 Python으로 OCR하는 방법

시간

이 블로그 게시물에서는 가장 많이 사용되는 Tesseract Engine의 이면에 있는 기술을 설명하려고 합니다. Tesseract Engine은 광학 문자 인식에서 연구된 최신 지식으로 업그레이드되었습니다.

이 문서는 구현 방법에 대한 방법 가이드/튜토리얼 역할도 합니다. OCR Tesseract 엔진을 사용하여 파이썬에서. 다음 모듈을 살펴보겠습니다.

  • Tesseract OCR 기능
  • OpenCV를 사용한 OCR 전처리
  • CLI 및 Python으로 Tesseract 실행
  • Tesseract 엔진의 한계

개요

OCR = 광학 문자 인식. 다시 말해, OCR 시스템은 이미지 표현에서 기계로 인쇄하거나 손으로 쓴 텍스트를 포함할 수 있는 XNUMX차원 텍스트 이미지를 기계가 읽을 수 있는 텍스트로 변환합니다. 프로세스로서의 OCR은 일반적으로 가능한 한 정확하게 수행하기 위해 여러 하위 프로세스로 구성됩니다. 하위 프로세스는 다음과 같습니다.

  • 이미지 전처리
  • 텍스트 현지화
  • 캐릭터 세분화
  • 문자 인식
  • 처리를 게시

물론 위 목록의 하위 프로세스는 다를 수 있지만 자동 문자 인식에 접근하는 데 필요한 단계입니다. OCR 소프트웨어의 주요 목표는 서면 텍스트 문자와 다른 언어를 사용하여 모든 고유 단어를 식별하고 캡처하는 것입니다.

거의 XNUMX년 동안 광학 문자 인식 시스템은 컴퓨터 시스템에 자동 텍스트 입력을 제공하는 데 널리 사용되었습니다. 그러나 이 모든 시간 동안 기존의 온라인 OCR 시스템(예: 영역 OCR) 소수의 글꼴 및 페이지 형식 이상을 읽지 못하는 것을 극복한 적이 없습니다. 비례 간격 활자(거의 모든 조판 복사 포함), 레이저 프린터 글꼴, 심지어 많은 비-비례 타자기 글꼴은 이러한 시스템의 범위를 벗어났습니다. 결과적으로 기존 OCR은 디지털 형식으로 변환해야 하는 전체 문서 수에 미미한 영향을 미치지 않았습니다.

광학 문자 인식 과정 (과정)

차세대 OCR 엔진은 딥 러닝 분야의 최신 연구를 활용하여 위에서 언급 한 이러한 문제를 효과적으로 처리합니다. 공개적으로 사용 가능한 딥 모델과 방대한 데이터 세트의 조합을 활용하여 모델은 주어진 작업에서 최첨단 정확도를 달성합니다. 요즘 그것은 또한 가능합니다 합성 데이터 생성 생식 적대 네트워크와 다른 생식 접근 방식을 사용하는 다른 글꼴.

광학 문자 인식은 도전적인 문제 제한되지 않은 환경에서 텍스트가 나타나는 경우 자연 장면기하학적 왜곡, 복잡한 배경 및 다양한 글꼴로 인해 이 기술은 딥 러닝 기반 OCR의 다양한 사용 사례로 인해 여전히 큰 잠재력을 가지고 있습니다.


OCR 문제를 염두에두고 있습니까? 조직의 데이터 입력 비용을 줄이고 싶으십니까? 에 머리 나노 넷 OCR 모델을 구축하여 이미지에서 텍스트를 추출 or PDF에서 데이터 추출 AI 기반으로 PDF OCR!


많이있다 광학 문자 인식 유효한 소프트웨어. 나는 그들 사이의 품질 비교를 찾지 못했지만 가장 개발자 친화적 인 것 중 일부에 대해 쓸 것입니다.

정팔 포체 – OCR 개발자들 사이에서 인기를 얻은 오픈 소스 OCR 엔진. 때때로 구현하고 수정하는 것이 어려울 수 있지만 시장에 출시 된 자유롭고 강력한 OCR 대안은 그리 많지 않았습니다. Tesseract는 박사 학위를 시작했습니다. 브리스톨의 HP Labs 연구 프로젝트. HP는 1984 년에서 1994 년 사이에 인기를 얻었으며 개발했습니다. 2005 년 HP는 오픈 소스 소프트웨어로 Tesseract를 출시했습니다. 2006 년부터 Google이 개발했습니다.

다양한 오픈 소스 OCR 도구에 대한 Google 트렌드 비교

오크로푸스 – OCRopus는 연구원과 회사 모두 OCR 구성 요소를 쉽게 평가하고 재사용 할 수있는 오픈 소스 OCR 시스템입니다. 턴키 OCR 시스템이 아닌 문서 분석 프로그램 모음. 문서에 적용하려면 이미지 사전 처리를 수행하고 새로운 모델을 교육해야 할 수도 있습니다. 인식 스크립트 외에도, 실제 진실 편집 및 수정, 오류율 측정, 사용 및 편집이 쉬운 혼동 행렬 결정을위한 몇 가지 스크립트가 있습니다.


접안 렌즈 – Ocular는 여러 언어로 작성된 문서를 포함하여 핸드 프레스를 사용하여 인쇄 된 문서에 가장 적합합니다. 명령 행을 사용하여 작동합니다. 최첨단의 역사적 OCR 시스템입니다. 주요 특징은 다음과 같습니다.

  • 알 수없는 글꼴에 대한 감독되지 않은 학습 : 문서 이미지와 텍스트 모음 만 필요합니다.
  • 소음이 많은 문서 처리 기능 : 불일치 한 잉크, 간격, 수직 정렬
  • 상당한 단어 수준 코드 전환 기능이있는 문서를 포함하여 다국어 문서를 지원합니다.
  • 구식 철자법 및 프린터 속기 등 직교 변형 패턴에 대한 감독되지 않은 학습.
  • 외교적 (문자 적) 형식과 정규화 된 형식으로 동시 공동 전사.

스위프트 OCR – Swift로 작성된 OCR 엔진에 대해서도 언급 할 것입니다. Swift를 딥 러닝에 사용되는 개발 프로그래밍 언어로 사용하는 데 큰 발전이 있었기 때문입니다. 체크 아웃 블로그 더 많은 이유를 알아보십시오. SwiftOCR은 신경망을 사용하여 이미지를 인식하는 빠르고 간단한 OCR 라이브러리입니다. SwiftOCR은 엔진이 잘 알려진 Tessaract 라이브러리보다 성능이 우수하다고 주장합니다.

이 블로그 게시물에는 Tesseract OCR에 초점 작동 방식 및 사용 방법에 대해 자세히 알아보십시오.


Tesseract OCR

Tesseract는 Apache 2.0 라이센스에 따라 사용 가능한 오픈 소스 텍스트 인식 (OCR) 엔진입니다. 직접 사용하거나 API를 사용하여 이미지에서 인쇄 된 텍스트를 추출 할 수 있습니다 (프로그래머 용). 다양한 언어를 지원합니다. Tesseract에는 GUI가 내장되어 있지 않지만 타사 페이지. Tesseract는 찾을 수있는 래퍼를 통해 많은 프로그래밍 언어 및 프레임 워크와 호환됩니다. 여기에서 지금 확인해 보세요.. 기존 레이아웃 분석과 함께 사용하여 큰 문서 내에서 텍스트를 인식하거나 외부 텍스트 감지기와 함께 사용하여 단일 텍스트 행의 이미지에서 텍스트를 인식 할 수 있습니다.

Tesseract를 사용하여 API를 빌드하는 OCR 프로세스 흐름 블로그 게시물

Tesseract 4.00에는 텍스트 라인 인식기로 구성된 새로운 신경망 서브 시스템이 포함되어 있습니다. 그것의 기원이 있습니다 OCRopus의 Python 기반 LSTM C ++에서 Tesseract를 위해 다시 설계되었습니다. Tesseract의 신경망 시스템은 TensorFlow보다 이전 버전이지만 VGSL (Variable Graph Specification Language)이라는 네트워크 설명 언어가 있으므로 TensorFlow에도 사용할 수 있으므로 호환됩니다.

단일 문자를 포함하는 이미지를 인식하기 위해 일반적으로 CNN (Convolutional Neural Network)을 사용합니다. 임의 길이의 텍스트는 일련의 문자이며 이러한 문제는 RNN을 사용하여 해결되며 LSTM은 널리 사용되는 RNN 형식입니다. 이 게시물을 읽고 자세히 알아보십시오 LSTM.


기술 – 작동 방식

LSTM은 학습 순서는 훌륭하지만 상태 수가 너무 많으면 속도가 느려집니다. LSTM에 여러 클래스의 짧은 시퀀스보다 긴 시퀀스를 배우도록 요청하는 것이 더 낫다는 경험적 결과가 있습니다. Tesseract는 Python의 OCRopus 모델에서 개발되었으며 CLS에서 CLSTM이라는 LSMT의 포크였습니다. CLSTM은 수치 계산에 Eigen 라이브러리를 사용하여 C ++로 LSTM 반복 신경망 모델을 구현 한 것입니다.

Tesseract 3 OCR 프로세스 종이

레거시 Tesseract 3.x는 단계를 차별화 할 수있는 다단계 프로세스에 의존했습니다.

  • 단어 찾기
  • 줄 찾기
  • 문자 분류

텍스트 줄을 얼룩으로 구성하여 단어 찾기를 수행했으며 줄과 영역을 고정 피치 또는 비례 텍스트로 분석했습니다. 문자 간격은 문자 간격의 종류에 따라 단어로 다르게 나뉩니다. 그런 다음 인식은 XNUMX 단계 과정으로 진행됩니다. 첫 번째 단계에서는 각 단어를 차례로 인식하려고 시도합니다. 만족스러운 각 단어는 학습 데이터로 적응 분류 자로 전달됩니다. 그러면 적응 분류 기가 페이지 아래의 텍스트를보다 정확하게 인식 할 수 있습니다.

Tesseract 툴의 현대화는 코드 청소 및 새로운 LSTM 모델 추가에 대한 노력이었습니다. 입력 이미지는 LSTM 모델에 라인 피드하여 박스 (직사각형)로 처리됩니다. 아래 이미지에서 작동 방식을 시각화 할 수 있습니다.

Tesseract가 LSTM 모델을 사용하는 방법 프레젠테이션

Tesseract는 새로운 교육 도구를 추가하고 많은 데이터와 글꼴로 모델을 교육 한 후 성능을 향상시킵니다. 여전히 필기체 텍스트와 이상한 글꼴로 작업하기에는 충분하지 않습니다. 실험을 위해 상단 레이어를 미세 조정하거나 재교육 할 수 있습니다.


Tesseract 설치

사전 컴파일 된 바이너리를 사용하여 Windows에 tesseract를 쉽게 설치할 수 있습니다. 여기에서 지금 확인해 보세요.. “path”환경 변수를 편집하고 tesseract 경로를 추가하는 것을 잊지 마십시오. Linux 또는 Mac 설치의 경우 다음과 함께 설치됩니다. 몇 가지 명령.

설치 후 터미널 또는 cmd에 command를 입력하여 모든 것이 작동하는지 확인하십시오.

$ tesseract --version

그리고 당신은 다음과 유사한 출력을 볼 수 있습니다 :

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

pip를 사용하여 tesseract 용 Python 래퍼를 설치할 수 있습니다.
$ pip install pytesseract

Tesseract 라이브러리는 tesseract라는 편리한 명령 행 도구와 함께 제공됩니다. 이 도구를 사용하여 이미지에서 OCR을 수행 할 수 있으며 출력은 텍스트 파일에 저장됩니다. Tesseract를 C ++ 또는 Python 코드에 통합하려면 Tesseract의 API를 사용합니다.


CLI로 Tesseract 실행

다음과 같이 이미지에서 Tesseract 엔진을 호출하십시오. 이미지 _ 경로 다음을 입력하여 명령 프롬프트에서 한 줄씩 작성된 이미지를 텍스트로 변환하십시오.

$ tesseract image_path stdout

출력 텍스트를 파일에 쓰려면 :

$ tesseract image_path text_result.txt

언어 모델 이름을 지정하려면 다음에 언어 바로 가기를 작성하십시오. -l 기본적으로 영어가 필요합니다.

$ tesseract image_path text_result.txt -l eng

기본적으로 Tesseract는 이미지를 분할 할 때 텍스트 페이지를 예상합니다. 작은 지역을 OCR하려는 경우에는 다음을 사용하여 다른 세그먼테이션 모드를 시도하십시오. -psm 논의. 사용 가능한 14 가지 모드가 있습니다 여기에서 지금 확인해 보세요.. 기본적으로 Tesseract는 페이지 분할을 완전히 자동화하지만 방향 및 스크립트 감지는 수행하지 않습니다. 매개 변수를 지정하려면 다음을 입력하십시오.

$ tesseract image_path text_result.txt -l eng --psm 6

OCR 엔진 모드 (oem)라는 중요한 인수가 하나 더 있습니다. Tesseract 4에는 레거시 Tesseract 엔진과 LSTM 엔진의 두 가지 OCR 엔진이 있습니다. –oem 옵션을 사용하여 선택한 XNUMX 가지 작동 모드가 있습니다.
0 레거시 엔진 만 해당.
1 신경망 LSTM 엔진 전용.
레거시 + LSTM 엔진 2 개.
3 사용 가능한 항목에 따라 기본값입니다.

Tesseract OCR 엔진의 결과

Pytesseract 및 OpenCV가 포함 된 OCR

Pytesseract 또는 Python-tesseract는 Tesseract-OCR 엔진의 래퍼 역할도 하는 Python용 OCR 도구입니다. 이미지의 텍스트를 읽고 인식할 수 있으며 일반적으로 python ocr 이미지 대 텍스트 사용 사례에서 사용됩니다.

jpeg, png, gif, bmp, tiff 등을 포함하여 Pillow 및 Leptonica 이미징 라이브러리에서 지원하는 모든 이미지 유형을 읽을 수 있으므로 tesseract에 대한 독립 실행형 호출 스크립트로도 유용합니다.

Python 접근 방식에 대한 추가 정보 읽기 여기에서 지금 확인해 보세요.. 이 튜토리얼의 코드는 다음에서 찾을 수 있습니다. 저장소.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Tesseract의 전처리

테서 랙트 출력 정확도가 떨어질 수있는 모든 방법을 피하려면 이미지가 적절하게 있는지 확인해야합니다 전처리.

여기에는 크기 조정, 이진화, 노이즈 제거, 왜곡 보정 등이 포함됩니다.

OCR 이미지를 사전 처리하려면 다음 파이썬 함수 중 하나를 사용하거나 OpenCV 설명서.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

더 나은 것을보기 위해 예를 들어 보자. 이것이 원래 이미지의 모습입니다 –

Aurebesh 작문 시스템

다음 코드로 전처리 한 후

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

결과 이미지를 플로팅하면 다음과 같은 결과가 나타납니다.

전처리 후 이미지

원본 이미지의 출력은 다음과 같습니다.

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

다른 전처리 이미지의 출력 결과는 다음과 같습니다.

캐니 가장자리 이미지 (너무 좋지 않음)-

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im

임계 값 이미지 –

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

이미지 열기 –

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH

텍스트 주위에 상자 얻기

Pytesseract를 사용하면 다음을 사용하여 OCR 결과에 대한 경계 상자 정보를 얻을 수 있습니다. 암호.

아래 스크립트는 OCR 중에 tesseract가 감지 한 각 문자에 대한 경계 상자 정보를 제공합니다.

import cv2
import pytesseract

img = cv2.imread('image.jpg')

h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) 
for b in boxes.splitlines():
    b = b.split(' ')
    img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

문자 대신 단어 주위에 상자를 원하면 함수 image_to_data 편리하게 올 것이다. 당신은 사용할 수 있습니다 image_to_data pytesseract로 지정된 출력 유형의 함수 Output.


OCR 문제가 있습니까? 송장, PDF 또는 번호판을 디지털화하고 싶습니까? 향하다 나노 넷 건축하다 무료 온라인 OCR 무료 모델!


위의 샘플 송장 이미지를 사용하여 tesseract 출력을 테스트합니다.

import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')

d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

결과는 다음과 같습니다.
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

이 사전을 사용하여 각 단어를 감지하고 해당 경계 상자 정보, 텍스트 및 각 단어에 대한 신뢰 점수를 얻을 수 있습니다.

아래 코드를 사용하여 상자를 그릴 수 있습니다.

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

샘플 인보이스 이미지의 모습은 다음과 같습니다.


텍스트 템플릿 일치

이미지에서 날짜가있는 위치를 찾으려고하는 예를 들어보십시오. 여기서 템플릿은 OCR 결과와 일치하여 적절한 경계 상자를 찾는 정규식 패턴입니다. 우리는 regex 모듈과 image_to_data 이것에 대한 기능.

import re
import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys())

date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$'

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
    	if re.match(date_pattern, d['text'][i]):
	        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
	        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

예상대로 이미지의 송장 날짜 주위에 상자가 하나 있습니다.


페이지 분할 모드

텍스트 페이지를 분석하는 방법에는 여러 가지가 있습니다. tesseract API는 작은 영역에서만 또는 다른 방향으로 OCR을 실행하려는 경우 여러 페이지 분할 모드를 제공합니다.

다음은 tesseract가 지원하는 페이지 세분화 모드 목록입니다.

0 방향 및 스크립트 감지 (OSD) 전용.
1 OSD를 통한 자동 페이지 분할.
2 자동 페이지 분할 (OSD 또는 OCR 없음).
3 완전 자동 페이지 분할, OSD 없음. (기본)
4 다양한 크기의 텍스트 열 하나를 가정합니다.
5 세로로 정렬 된 텍스트의 단일 블록을 가정합니다.
6 단일 텍스트 블록을 가정합니다.
7 이미지를 단일 텍스트 줄로 처리합니다.
8 이미지를 한 단어로 취급합니다.
9 이미지를 원 안의 한 단어로 취급합니다.
10 이미지를 단일 문자로 취급합니다.
11 희소 한 텍스트. 특정 순서없이 가능한 한 많은 텍스트를 찾습니다.
12 OSD가있는 희소 텍스트.
13 원시 라인. 이미지를 하나의 텍스트 줄로 처리하고 Tesseract 고유의 해킹을 우회합니다.

페이지 세분화 모드를 변경하려면 --psm 위에서 언급 한 모드 코드 중 하나에 대한 사용자 정의 구성 문자열의 인수.


오리엔테이션 및 스크립트 감지

이미지에서 텍스트의 방향과 이미지가 작성된 스크립트를 감지 할 수 있습니다. 다음 이미지 –
영상
다음 코드를 실행 한 후 –

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

다음 출력을 인쇄합니다.

angle: 90
script: Latin

숫자 만 감지

이 이미지를 예로 들어 보겠습니다.
영상
이 이미지에서 추출 된 텍스트는 다음과 같습니다.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

구성을 다음과 같이 변경하면 숫자 만 인식 할 수 있습니다.

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

출력은 다음과 같습니다.

--

. 43876324
172018
0 76496234

허용 목록 문자

주어진 이미지에서 특정 문자 만 감지하고 나머지는 무시한다고 가정하십시오. 다음 구성을 사용하여 화이트리스트 문자를 지정할 수 있습니다 (여기서는 a에서 z까지의 모든 소문자 만 사용했습니다).

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

출력 –

customername
roject
tnvoleeno
ated

alliumenergyservices
e
thovo

블랙리스트 문자

일부 문자 또는 표현식이 텍스트에 확실히 나타나지 않을 경우 (OCR이 블랙리스트 문자 대신 잘못된 텍스트를 반환 함) 다음 구성을 사용하여 해당 문자를 블랙리스트에 추가 할 수 있습니다.

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

출력 –

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

여러 언어로 감지

터미널에 이것을 입력하여 사용 가능한 언어를 확인할 수 있습니다

$ tesseract --list-langs

특정 언어 사용을 위해 tesseract를 다운로드하려면

$ sudo apt-get install tesseract-ocr-LANG

여기서 LANG는 필요한 언어의 세 글자 코드입니다. LANG 값을 찾을 수 있습니다 여기에서 지금 확인해 보세요..

당신은 다운로드 할 수 있습니다 .traindata 필요한 언어 파일 여기에서 지금 확인해 보세요. 그리고 그것을 넣어 $TESSDATA_PREFIX 디렉토리 (이것은 tessdata 디렉토리가 설치되었으며 사용할 준비가되었습니다.

주의 사항 – 언어가있는 언어 만 .traineddata 파일 형식은 tesseract에서 지원됩니다.

OCR 출력이 필요한 언어를 지정하려면 -l LANG LANG는 사용하려는 언어의 3 문자 코드입니다.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

이 이미지를 예로 들어 보겠습니다.
영상
LANG 매개 변수를 다음과 같이 변경하여 여러 언어로 작업 할 수 있습니다.

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

다음과 같은 결과가 나옵니다.

Here’s some Greek:

Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ.

6 Thai

Here’s some Thai: ν᾿

ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

주의 사항 – 처음에 지정된 언어 -l 매개 변수는 기본 언어입니다.

불행히도 tesseract에는 이미지의 텍스트 언어를 자동으로 감지하는 기능이 없습니다. 다른 솔루션은라는 다른 파이썬 모듈에 의해 제공됩니다 langdetect pip를 통해 설치할 수 있습니다.

$ pip install langdetect

이 모듈은 다시 이미지를 사용하여 텍스트 언어를 감지하지 않지만 언어를 감지하려면 문자열 입력이 필요합니다. 이를 수행하는 가장 좋은 방법은 먼저 tesseract를 사용하여 사용중인 언어에 관계없이 OCR 텍스트를 얻는 것입니다. langdetect OCR 텍스트에 포함 된 언어를 찾은 다음 찾은 언어로 OCR을 다시 실행하십시오.

영어와 포르투갈어로 된 텍스트가 있다고 가정 해 봅시다.

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

from langdetect import detect_langs
detect_langs(txt)

텍스트와 그 언어의 언어 목록을 출력해야합니다.

[en:0.714282468983554, es:0.2857145605644145]

사용되는 언어 코드 langdetect ISO 639-1 코드를 따르십시오. 비교하려면 확인하십시오 . 우리는 본문에 사용 된 언어가 영어와 스페인어라는 것을 알게되었습니다.

구성을 다음과 같이 변경하여 텍스트를 다시 얻습니다.

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

주의 사항 – 여러 언어의 이미지에서 구성에 지정된 언어가 잘못되었거나 전혀 언급되지 않은 경우 Tesseract가 제대로 작동하지 않습니다. 이로 인해 langdetect 모듈도 상당히 오해 될 수 있습니다.


tessdata_fast 사용

속도가 중요한 문제인 경우, tessdata 언어 모델을 8 비트 정수 버전의 tessdata 모델 인 tessdata_fast 모델로 대체 할 수 있습니다.

tessdata_fast에 따르면 github -

이 저장소에는 빠른 정수 버전의 학습 모델이 포함되어 있습니다. Tesseract 오픈 소스 OCR 엔진.

이 모델은 Tesseract 4의 LSTM OCR 엔진에서만 작동합니다.

  • 이것은 속도 대 정확도에서 최고의 "돈을위한 가치"를 제공 한 것에 대한 속도 / 정확성 타협입니다.
  • 일부 언어의 경우 이것이 가장 좋지만 대부분은 그렇지 않습니다.
  • 그런 다음 "최상의 비용 대비 가치"네트워크 구성을 추가 속도로 정수화했습니다.
  • 대부분의 사용자는 이러한 훈련 된 데이터 파일을 사용하여 OCR을 수행하려고하며 Linux 배포판의 일부로 제공됩니다. 우분투 18.04.
  • 미세 조정 / 증분 교육은 않습니다. 이것들로부터 가능하다 fast 모델은 8 비트 정수이므로
  • 이 저장소에서 모델을 사용하는 경우 새 LSTM 기반 OCR 엔진 만 지원됩니다. 유산 tesseract 이러한 파일에서는 엔진이 지원되지 않으므로 Tesseract의 OEM 모드 '0'및 '2'는 작동하지 않습니다.

사용 tessdata_fast 대신 모델 tessdata, 필요한 것은 tessdata_fast 언어 데이터 파일 여기에서 지금 확인해 보세요. 그리고 당신의 내부에 배치 $TESSDATA_PREFIX 디렉토리.


문서, 영수증 또는 송장을 디지털화해야하는데 너무 게으르다? 향하다 나노 넷 무료로 OCR 모델을 구축하십시오!


사용자 정의 데이터에 대한 Tesseract 교육

Tesseract 4.00에는 문서 이미지에서 훨씬 높은 정확도를 제공하는 새로운 신경망 기반 인식 엔진이 포함되어 있습니다. 신경망은 기본 Tesseract보다 훨씬 더 많은 훈련 데이터를 필요로하고 훨씬 느리게 훈련합니다. 라틴어 기반 언어의 경우 제공되는 기존 모델 데이터는 약 400000 개의 글꼴에 걸쳐 약 4500 개의 텍스트 라인에 대해 학습되었습니다.

Tesseract 4.0 LSTM 교육 튜토리얼을 성공적으로 실행하려면 Tesseract 4 및 Tesseract 4 교육 도구가 설치되어 있어야하며 특정 디렉토리에 교육 스크립트 및 필요한 훈련 된 데이터 파일이 있어야합니다. 방문 깃 허브 레포 파일 및 도구 용.

Tesseract 4.00은 처음부터 훈련하는 데 며칠에서 몇 주가 걸립니다. 이러한 모든 새로운 교육 데이터를 사용하더라도 교육을위한 몇 가지 옵션이 있습니다.

  • 미세 조정 – 기존의 훈련 된 언어로 시작하여 특정 추가 데이터를 훈련시킵니다. 필기 데이터 집합 및 일부 추가 글꼴에 대한 교육을 예로들 수 있습니다.
  • 상단 레이어를 잘라 – 네트워크에서 새로운 데이터를 사용하여 새로운 최상위 계층을 재교육합니다. 미세 조정이 작동하지 않으면 다음으로 가장 적합한 옵션 일 것입니다. 이것이 왜 유용한 지 유추하여 ImageNet 데이터 세트에 대해 훈련 된 인스턴스 모델을 사용하십시오. 목표는 고양이 또는 개 분류기를 구축하는 것입니다. 모델의 하위 레이어는 모서리, 수평 및 수직선과 같은 낮은 수준의 추상화에 적합하지만 모델의 상위 레이어는 이러한 기능을 결합하고 고양이 또는 개 귀, 눈, 코를 감지합니다. 등등. 최상위 레이어 만 재교육함으로써 하위 레이어의 지식을 사용하고 새로운 데이터 세트와 결합합니다.
  • 처음부터 다시 훈련 – 문제에 대해 매우 대표적이고 충분히 큰 훈련을 설정하지 않은 경우 매우 느린 방법입니다. 처음부터 훈련에 가장 적합한 리소스는 다음과 같습니다. 깃 허브 레포.

사용자 정의 데이터를 교육하고 작성하는 방법에 대한 안내서 .traineddata 파일을 찾을 수 있습니다 여기에서 지금 확인해 보세요., 여기에서 지금 확인해 보세요.여기에서 지금 확인해 보세요..

이 블로그 게시물에서 Tesseract를 사용한 교육 코드는 다루지 않습니다.

테서 랙트의 한계

Tesseract는 배경에서 전경 텍스트를 깨끗하게 분할 한 경우에 가장 효과적입니다. 실제로 이러한 유형의 설정을 보장하는 것은 매우 어려운 일입니다. 이미지에 배경 노이즈가있는 것처럼 Tesseract에서 좋은 품질의 출력을 얻지 못할 수있는 여러 가지 이유가 있습니다. 이미지 품질 (크기, 대비, 번개)이 좋을수록 인식 결과가 좋아집니다. OCR 결과를 개선하려면 약간의 사전 처리가 필요하고 이미지의 크기를 적절하게 조정하고 이미지 대비를 최대한 많이 유지해야하며 텍스트를 가로로 정렬해야합니다. Tesseract OCR은 매우 강력하지만 다음과 같은 제한이 있습니다.

목록에 Tesseract 제한 사항이 요약되어 있습니다.

  • OCR은 우리가 이용할 수있는 일부 상용 솔루션만큼 정확하지 않습니다.
  • 부분 폐색, 왜곡 된 원근 및 복잡한 배경을 포함한 아티팩트의 영향을받는 이미지에는 적합하지 않습니다.
  • 필기를 인식 할 수 없습니다.
  • 그것은 횡설수설을 찾아 이것을 OCR 출력으로보고 할 수 있습니다.
  • 문서에 -l LANG 인수에 지정된 언어 이외의 언어가 포함 된 경우 결과가 좋지 않을 수 있습니다.
  • 문서의 자연스러운 읽기 순서를 분석하는 것이 항상 좋은 것은 아닙니다. 예를 들어, 문서에 두 개의 열이 포함되어 있음을 인식하지 못하고 여러 열에서 텍스트를 결합하려고 할 수 있습니다.
  • 품질이 좋지 않은 스캔은 품질이 낮은 OCR을 생성 할 수 있습니다.
  • 어떤 글꼴 패밀리 텍스트가 속하는 지에 대한 정보는 공개하지 않습니다.

물론 OCR 작업을 수행하는 데 더 좋고 훨씬 간단하고 직관적 인 방법이 있습니다.


나노 넷을 사용한 OCR

  나노 넷 OCR API OCR 모델을 쉽게 만들 수 있습니다. OCR 모델의 정확성을 높이기 위해 이미지 전처리에 대해 걱정하거나 템플릿 일치 또는 규칙 기반 엔진 구축에 대해 걱정할 필요가 없습니다.

데이터를 업로드하고 주석을 달며 모델을 설정하여 한 줄의 코드를 작성하거나 GPU에 대해 걱정하거나 딥 러닝 모델에 적합한 아키텍처를 찾지 않고도 브라우저 기반 UI를 통해 예측을 기다릴 수 있습니다. 또한 각 예측의 JSON 응답을 획득하여 자체 시스템과 통합하고 최신 알고리즘과 강력한 인프라를 기반으로 구축 된 머신 러닝 기반 앱을 구축 할 수 있습니다.

GUI 사용 : https://app.nanonets.com/

아래 단계에 따라 Nanonets-OCR API를 사용할 수도 있습니다 .‌

1 단계 : Repo 복제, 종속성 설치

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

2 단계 : 무료 API 키 받기
에서 무료 API 키 받기 https://app.nanonets.com/#/keys

번호판 감지 GIF

3 단계 : API 키를 환경 변수로 설정

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

4 단계 : 새 모델 생성

python ./code/create-model.py

참고 : 다음 단계에 필요한 MODEL_ID가 생성됩니다.

5 단계 : 환경 변수로 모델 ID 추가

export NANONETS_MODEL_ID=YOUR_MODEL_ID

참고 : 이전 단계에서 YOUR_MODEL_ID를받습니다.

6 단계 : 교육 데이터 업로드
훈련 데이터는 images (이미지 파일) 및 annotations (이미지 파일의 주석)

python ./code/upload-training.py

7 단계 : 모델 훈련
이미지가 업로드되면 모델 교육을 시작하십시오.

python ./code/train-model.py

8 단계 : 모델 상태 얻기
이 모델은 훈련하는 데 ~ 2 시간이 걸립니다. 모델이 훈련되면 이메일을 받게됩니다. 그 동안 모델의 상태를 확인하십시오

python ./code/model-state.py

9 단계 : 예측하기
모델이 훈련되면 모델을 사용하여 예측할 수 있습니다

python ./code/prediction.py ./images/151.jpg

루프에서 나노 넷과 인간

‌‌ '보통'화면은 수정 및 입력 프로세스를 돕고 수동 검토 자의 작업량을 거의 90 % 줄이고 조직의 비용을 50 % 줄입니다.

기능 포함

  1. 올바른 예측 추적
  2. 어느 것이 잘못되었는지 추적
  3. 부정확 한 것을 수정하십시오
  4. 잘못된 것을 삭제하십시오
  5. 누락 된 예측 채우기
  6. 날짜 범위로 이미지 필터링
  7. 조정되지 않은 이미지에 대한 조정 된 이미지 수 얻기

모든 필드는 사용하기 쉬운 GUI로 구성되어있어 사용자가 코드를 입력하거나 기술의 작동 방식을 이해할 필요없이 OCR 기술을 활용하고 더 나은 방식으로 사용할 수 있도록 지원합니다.


OCR 문제를 염두에두고 있습니까? 조직의 데이터 입력 비용을 줄이고 싶으십니까? 에 머리 나노 넷 OCR 모델을 구축하여 이미지에서 텍스트를 추출 or PDF에서 데이터 추출!


결론

딥 러닝이 컴퓨터 비전의 거의 모든 측면에 영향을 미친 것처럼 문자 인식 및 필기 인식도 마찬가지입니다. 딥 러닝 기반 모델은 기존의 것을 훨씬 능가하는 전례 없는 텍스트 인식 정확도를 달성했습니다. 정보 추출머신 러닝 이미지 처리 구혼.

문서 이미지가 다음 지침을 따르는 경우 Tesseract가 잘 작동합니다.

  • 배경에서 전경 텍스트를 깨끗하게 분할
  • 적절하게 수평으로 정렬 및 확장
  • 흐릿함과 노이즈가없는 고품질 이미지

Tesseract 4.0의 최신 릴리스는 훨씬 더 정확한 딥 러닝 기반 OCR을 지원합니다. OCR 엔진 자체는 일종의 RNN (Recurrent Neural Network) 인 LSTM (Long Short-Term Memory) 네트워크를 기반으로합니다.

Tesseract는 깨끗한 문서를 스캔하는 데 적합하며 교육이 포괄적이기 때문에 매우 높은 정확도와 글꼴 가변성을 제공합니다. 나는 당신의 작업이 깨끗한 흰색 배경에 책, 문서 및 인쇄 텍스트를 스캔하는 경우 Tesseract가 가기 도구라고 말합니다.


추가 읽기

업데이트 :
많은 사람들이 텍스트 형식으로 날짜를 가져오는 방법이나 날짜 또는 기타 특정 데이터를 감지할 때 목록에 추가할 수 있는 방법을 묻습니다.
답은 다음과 같습니다.
날짜 상자 주위에 경계 상자를 그리는 코드에서 정규식 패턴과 일치하는 선을 볼 수 있습니다. d['text']. 패턴이 일치하는 경우에만 상자를 그립니다. 다음에서 값을 간단히 추출할 수 있습니다. d['text'] 패턴이 일치하면 목록에 추가합니다.

업데이트 2 :
영어 이외의 OCR에 대한 질문을 해결하기 위해 추가 읽기 목록을 업데이트했습니다.

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?