소개
인간의 내용을 이해할 수 있는 이미지를 단순히 찾고 있습니다. 우리는 이미지의 텍스트를 텍스트로 인식하고 읽을 수 있습니다.컴퓨터가 같은 방식으로 작동하지 않습니다. 그들은 이해할 수있는 방식으로 조직 된 좀 더 구체적인 것이 필요합니다.
광학 문자 인식(OCR)이 시작되는 곳입니다. 카메라에서 자동차 판을 인식하든 디지털 사본으로 변환해야하는 손으로 쓴 문서이든이 기술은 매우 유용합니다. 항상 완벽하지는 않지만 매우 편리하며 일부 사람들이 작업을 수행하는 것이 훨씬 쉽고 빠릅니다.
이 기사에서는 광학 문자 인식의 깊이와 그 적용 영역을 탐구 할 것입니다. 우리는 것도 간단한 스크립트에서는 파이썬 도움이 될 것입니다 우리가 감지 캐릭터의 이미지와 노출 이를 통한 플라스크 응용 프로그램을 위해 더 편리한 상호작용 매체입니다.
광학 문자 인식이란 무엇입니까?
광학 문자 인식을 포함 감지의 텍스트의 콘텐츠에 이미지와 번역의 이미지를 인코딩되는 텍스트를 컴퓨터가 쉽게 이해할 수 있습니다. 텍스트가 포함 된 이미지는 그 안에있는 문자를 식별하기 위해 스캔되고 분석됩니다. 식별시 문자는 기계로 인코딩 된 텍스트로 변환됩니다.
어떻게 실제로 달성됩니까? 우리에게,텍스트,이미지는 쉽게 식별 할 수있는 우리는 할 수 있을 감지하는 문자와 텍스트를 읽지만,컴퓨터,그것은 모든 일련의 점입니다.
이미지 처음 검색 및 텍스트와 그래픽 요소는 변환된 비트맵으로,기본적으로 매트릭스의 검은색 및 흰 점이 있습니다. 그러면 이미지의 밝기와 대비가 조정되어 프로세스의 정확성이 향상되는 곳에서 사전 처리됩니다.
이미지가 지금으로 분할 지역의 영역을 식별자와 같은 이미지 또는 텍스트 및 이 킥오프 추출하는 과정입니다. 지역을 포함하는 텍스트할 수 있습 좀 더 세분화로 라인 단어와 문자와 지금은 소프트웨어에 할 수 있는 문자와 일치 비교를 통해 다양한 탐지 알고리즘이 있습니다. 최종 결과는 우리가 주어진 이미지의 텍스트입니다.프로세스가 100%정확하지 않을 수 있으며 올바르게 스캔되지 않은 일부 요소를 수정하려면 사람의 개입이 필요할 수 있습니다. 오류 수정은 사전 또는 Nlp(Natural Language Processing)를 사용하여 달성 할 수도 있습니다.
출력할 수 있습으로 변환을 다른 매체 와 같은 단어는 문서,Pdf,심지어 오디오 콘텐츠를 텍스트-음성-기술입니다.
OCR 의 사용
이전에는 수동으로 컴퓨터에 텍스트를 입력하여 문서의 디지털화를 수행했습니다. 을 통해 OCR,이 프로세스는 쉽게 만들어로 문서를 검색할 수 있고,가공되며 추출한 텍스트에 저장하고 편집 가능한 형태와 같은 단어는 문서입니다.
Adobe Scan 과 같이 휴대 전화에 문서 스캐너가있는 경우 사용중인 OCR 기술이 발생했을 것입니다.
공항은 또한 OCR 을 사용하여 여권 인식 및 정보 추출 프로세스를 자동화 할 수 있습니다.
OCR 의 다른 용도로는 데이터 입력 프로세스의 자동화,자동차 번호판의 탐지 및 인식이 있습니다.
무엇을 사용하겠
이 OCR 프로젝트,우리가 사용하는 파이썬-큐브,또는 단순히 PyTesseract,라이브러리는 래퍼에 대한 구글의 큐브-OCR Engine.
나는 완전히 오픈 소스이며 구글 인 거인에 의해 개발되고 유지되고 있기 때문에 이것을 선택했다. PyTesseract 에 의존하기 때문에 다음 지침에 따라 컴퓨터에 Tesseract 를 설치하십시오.
우리는 것도를 사용하여 플라스크 웹 프레임워크를 만들의 간단한 OCR 서버는 우리가 사진을 찍을 수 있는 웹캠을 통해 또는 사진을 업로드한 문자 인식의 목적이다.또한 가상 환경 설정 및 요구 사항 관리도 처리하기 때문에 Pipenv 를 사용할 예정입니다.
그 외에도 Python Imaging Library(PIL)의 포크 인 Pillow 라이브러리를 사용하여 Python 에서 많은 형식의 이미지 열기 및 조작을 처리 할 것입니다.
이 게시물에,우리는 우리 것에 집중 PyTesseract 이 있지만 다른 파이썬은 라이브러리가 당신을 도울 수 있는 텍스트를 추출과 같은 이미지에서
- Textract:할 수 있는 데이터를 추출에서 Pdf 파일로 무거운 패키지입니다.
- Pyocr:문장,숫자 또는 단어와 같은 더 많은 감지 옵션을 제공합니다.
Setup
Pip 를 통해 다음 명령을 사용하여 Pipenv 를 설치하여 시작하십시오(설정해야하는 경우이를 참조하십시오).
$ pip install pipenv
프로젝트 디렉토리를 만들고 다음 명령을 실행하여 프로젝트를 시작하십시오:
$ mkdir ocr_server && cd ocr_server && pipenv install --three
우리는 이제 활성화는 우리의 가상환경과 설치를 시작하의 의존성:
$ pipenv shell$ pipenv install pytesseract Pillow
경우에 당신을 사용하지 않 Pipenv,당신은 항상 사용할 수 있습니다 Pip 고 가상환경 접근 방식이다. 따라 공식 문서를 시작하는 데 도움이 Pip 및 가상 환경:
참고:는 경우,대신pipenv install Pillow
pip install Pillow
.
구현
우리는이 프로젝트를 2 단계로 구현할 것입니다. 첫 번째에서는 스크립트를 만들고 다음에서는 인터페이스 역할을하는 플라스크 응용 프로그램을 빌드합니다.
OCR 스크립트
설치 완료를 작성할 수 있습니다 간단한 함수는 이미지 및 텍스트를 반환합에서 감지된 이미지-이의 핵심이 될 것입니다 우리의 프로젝트:
try: from PIL import Imageexcept ImportError: import Imageimport pytesseractdef ocr_core(filename): """ This function will handle the core OCR processing of images. """ text = pytesseract.image_to_string(Image.open(filename)) # We'll use Pillow's Image class to open the image and pytesseract to detect the string in the image return textprint(ocr_core('images/ocr_example_1.png'))
기능이 매우 간단합니다, 처음에 5 선 우리 가져오기Image
Pillow
PyTesseract
라이브러리입니다.
우리는 우리를 만들고ocr_core
함수에서 파일 이름을 반환합 텍스트에 포함된 이미지입니다.
자 스크립트 요금 간단한 이미지 포함된 텍스트:
고 실행되는 조각의 코드,우리가 맞이:
우리의 간단한 OCR 스크립트 작동합니다! 분명히 이것은 필기와 달리 완벽하고 정확한 디지털 텍스트이기 때문에 다소 쉬웠습니다. 우리가 PyTesseract 라이브러리와 함께 할 수있는 더 많은,하지만 나중에 게시물에 이것에 대한 자세한 내용이있다.
이 스크립트를 먼저 Flask 응용 프로그램에 통합하여 이미지를 업로드하고 문자 인식 작업을보다 쉽게 수행 할 수있게합시다.
Flask 웹 인터페이스
우리의 스크립트를 사용할 수 있는 명령을 통해 줄지만,플라스크 응용 프로그램은 그것이 더 많은 사용자 친화적이고 다양한 있습니다. 예를 들어,우리가 사진을 업로드 할 수 있습니다 웹 사이트를 통해 얻을 추출한 텍스트에 표시되는 사이트나 우리가 사진을 캡처 할 수 있습 웹을 통해 카메라 및 수행 문자 인식들입니다.
당신이 플라스크 프레임 워크에 익숙하지 않은 경우,이 속도와 갈 당신을 얻을 수있는 좋은 튜토리얼입니다.
을 시작하자에 의해 설치하면 플라스크 패키지:
$ pipenv install Flask
지금의 정의는 기본 경로.
from flask import Flaskapp = Flask(__name__)@app.route('/')def home_page(): return "Hello World!"if __name__ == '__main__': app.run()
파일을 저장하고 실행:
$ python3 app.py
경우에 당신은 당신의 브라우저를 열고 헤드 위에127.0.0.1:5000
localhost:5000
야 합”안녕하세요!”페이지에. 이것은 우리의 플라스크 응용 프로그램은 다음 단계에 대한 준비가 의미합니다.
이제 HTML 파일을 호스팅 할templates
index.html
<!DOCTYPE html><html> <head> <title>Index</title> </head> <body> Hello World. </body></html>
우리는 또한 우리의 조정할app.py
를 렌더링하는 우리의 새로운 템플릿:
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def home_page(): return render_template('index.html')if __name__ == '__main__': app.run()
통지 우리는 지금 수입render_template
고 그것을 사용하여 렌더링 HTML 파일을. 플라스크 앱을 다시 시작하면 여전히”안녕하세요 세상!”홈 페이지에.
그 플라스크 충돌 과정에 충분하다,우리가 지금 웹 응용 프로그램에 우리의 OCR 스크립트를 통합 할 수 있습니다.
먼저 플라스크 앱에 이미지를 업로드하고 위에서 쓴ocr_core
기능으로 전달하는 기능을 추가하겠습니다. 우리는 그 이미지를 렌더링 옆에서 추출한 텍스트에 우리의 웹 응용 프로그램으로 결과:
import osfrom flask import Flask, render_template, request# import our OCR functionfrom ocr_core import ocr_core# define a folder to store and later serve the imagesUPLOAD_FOLDER = '/static/uploads/'# allow files of a specific typeALLOWED_EXTENSIONS = set()app = Flask(__name__)# function to check the file extensiondef allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1).lower() in ALLOWED_EXTENSIONS# route and function to handle the home [email protected]('/')def home_page(): return render_template('index.html')# route and function to handle the upload [email protected]('/upload', methods=)def upload_page(): if request.method == 'POST': # check if there is a file in the request if 'file' not in request.files: return render_template('upload.html', msg='No file selected') file = request.files # if no file is selected if file.filename == '': return render_template('upload.html', msg='No file selected') if file and allowed_file(file.filename): # call the OCR function on it extracted_text = ocr_core(file) # extract the text and display it return render_template('upload.html', msg='Successfully processed', extracted_text=extracted_text, img_src=UPLOAD_FOLDER + file.filename) elif request.method == 'GET': return render_template('upload.html')if __name__ == '__main__': app.run()
으로 우리는 볼 수 있습니다 우리upload_page()
기능을,우리는 이미지를 받을 통해 게시하고 렌더링하는 업로드 HTML 을 요청할 경우를 얻을.
우리는지 여부를 확인 사용자는 정말로 업로드한 파일을 사용하여 기능을allowed_file()
는지 확인하려면 파일이의 허용되는 유형입니다.
이미지가 필요한 유형인지 확인하면 이전에 만든 문자 인식 스크립트에 전달합니다.이 함수는 이미지의 텍스트를 감지하여 반환합니다. 마지막으로 이미지 업로드에 대한 응답으로 사용자가 결과를 볼 수 있도록 감지 된 텍스트를 이미지와 함께 렌더링합니다.
upload.html
파일을 처리하 게시의 이미지를 렌더링의 결과로의 도움 템플릿자 엔진,선박과 플라스크에 의해 기본:
<!DOCTYPE html><html> <head> <title>Upload Image</title> </head> <body> {% if msg %} <h1>{{ msg }}</h1> {% endif %} <h1>Upload new File</h1> <form method=post enctype=multipart/form-data> <p><input type=file name=file> <input type=submit value=Upload> </form> <h1>Result:</h1> {% if img_src %} <img src="{{ img_src }}"> {% endif %} {% if extracted_text %} <p> The extracted text from the image above is: <b> {{ extracted_text }} </b></p> {% else %} The extracted text will be displayed here {% endif %} </body></html>
신사 템플릿 생성할 수 있 디스플레이 텍스트에서 특정 시나리오를 통해{% if %} {% endif %}
{{ }}
태그가 있습니다. 우리는 우리의 플라스크 응용 프로그램에 이미지를 업로드하는 양식을 사용합니다.
결과:
경우,지금 우리가 가서 우리의 이미지를 업로드에서 이전:
Yes! 우리의 플라스크 응용 프로그램은 OCR 기능을 통합하고 브라우저에 텍스트를 표시 할 수있었습니다. 이렇게하면 처리 할 새 이미지가있을 때마다 CLI 에서 명령을 실행하는 대신 이미지를 처리하는 것이 더 쉬워집니다.
모든 상황에서 작동하지 않기 때문에 간단한 OCR 스크립트의 한계를 더 탐구하기 위해 더 많은 이미지를 첨부 해 보겠습니다.
예를 들어 다음 이미지에서 텍스트를 추출 해보고 결과가 이미지에서 강조 표시되었습니다:
이 증거로 OCR 은 항상 100%정확한 필요할 수 있는 인간의 개입니다.
I 도 테스트 OCR 스크립트에 필기하는 방법을 볼 수행하고 결과물은 다음과 같습니다.
당신이 볼 수 있듯이,그것은 확실히 추출물에서 텍스트 필드 그랬던 것처럼 다른 이미지는 우리가 볼 수 있다. 나는 그것을 또 다른 시도를 제공하기로 결정,이 소스에서 이미지 이번에는,이러한 결과였다:
문자 인식에 이 이미지는 많은 것보다 더 나은 곳 내가 사용하는 내 자신이 있습니다. 당신이 볼 수있는 라인에서 다운로드 이미지가 두꺼운이 더 좋은 대비 사이에 텍스트와 배경과 이에 대한 이유가 될 수 있는 가난한 탐지 내에 있습니다.
이것은 지역을 탐험을 추가,당신이 얻을 수 있는 손으로 쓴 메모를 친구에게나 동료들과 얼마나 잘 볼 스크립트를 검출 할 수 있다. 심지어 이벤트에 포스터를 얻을 하 고 텍스트에 대 한 그들을 스캔 하려고 할 수 있습니다.,가능성은 많이.
기타 PyTesseract 옵션
Python-Tesseract 에는 탐색 할 수있는 더 많은 옵션이 있습니다. 예를 들어 지정할 수 있습니다 언어를 사용하여lang
플래그:
pytesseract.image_to_string(Image.open(filename), lang='fra')
이 결과의 스캔 이미지 없이lang
국기:
그리고 지금lang
플래그:스크린 샷에서 볼 수 있듯이 프레임 워크는 언어를 더 잘 감지하도록 최적화되어 있습니다. (이미지 소스).
지 않고lang
플래그,스크립트를 놓친 몇 가지 프랑스어 단어지만,을 소개 한 후 플래그 할 수 있었을 감지하는 모든 프랑스 내용입니다. 번역은 불가능하지만 이것은 여전히 인상적입니다. Tesseract 의 공식 문서에는이 섹션에서 지원되는 언어가 포함되어 있습니다.
오리엔테이션 및 스크립트 감지는 PyTesseract 의 기능 중 하나이며이 사용 된 글꼴 및 주어진 이미지에서 텍스트의 방향을 감지하는 데 도움이됩니다. 만약 우리를 참조할 수도 있습니다 손으로 쓴 이미지 우리는 앞서 다운로드:
print(pytesseract.image_to_osd(Image.open('downloaded_handwritten.png')))
없었 페이지 수에 정보는 이미지 그래서 이 되지 않았습니다. Tesseract 엔진은 이미지 및 회전에서 텍스트의 방향에 대한 정보를 추출 할 수 있습니다. 방향을 자신의 그림을 보증인의 엔진에 대한 방향을 감지하는 법적으로 안내하고도 아니라는 것을 보여주는 항상 100%정확합니다. 스크립트 섹션은 텍스트에 사용 된 쓰기 시스템을 나타내며,이 또한 신뢰 마커 뒤에.
우리가 인식 된 문자와 그 상자 경계 뒤에 있다면 PyTesseract 는pytesseract.image_to_boxes(Image.open('downloaded_handwritten.png'))
를 통해이를 달성합니다.
이들은 추출 된 텍스트를 검색 가능한 PDF 또는 HOCR 출력으로 변환하는 것과 같은 PyTesseract 의 기능 중 일부입니다.
우리는 무엇을 하지 않았
우리가 달성해야에서 많은이 포스트,하지만 여전히 많이 할 수정 우리의 프로젝트를 준비한다. 먼저 웹 사이트에 스타일을 추가하고 css 를 사용하여 최종 사용자에게 더 매력적으로 만들 수 있습니다. 우리는 또한 추가 옵션을 업로드 및 검사 한 번에 여러 이미지를 표시의 모든 출력을 한 번에. 이렇게하면 여러 문서를 스캔하는 것이 더 편리하지 않을까요?
브라우저는 물론 사용자의 허가를 받아 기계의 카메라를 활용하고 이미지를 캡처 할 수 있습니다. 이는 특히 모바일 장치에서 큰 도움이 될 수 있습니다. 대신 사용자는 캡처하고 이미지를 저장한 후 업로드 웹사이트에서 그는 경우에,우리는 추가로 카메라 기능을,우리는 허용할 수 있는 사용자 작업을 수행하는 직접에서 플라스크 웹 응용 프로그램입니다. 이렇게하면 스캔 프로세스가 빨라집니다.
플라스크 응용 프로그램이 OCR 스캐너를 노출하려는 의도가 아니라고 가정하면 CLI 도구를 만들 수도 있습니다. 이 도구를 실행할 수 있도록 명령을 포함한 이미지의 위치 및 그를 인쇄 출력하의 스캐너 터미널 또는 전송 데이터베이스 또는 API 입니다. 이 경로를 선택한 경우 Docopt 는 Python 을 사용하여 명령 줄 도구를 작성하는 환상적인 도구입니다.
결론
Tesseract 와 Python-Tesseract 라이브러리를 통해 이미지를 스캔하고 그로부터 텍스트를 추출 할 수있었습니다. 이것은 광학 문자 인식이며 많은 상황에서 큰 사용이 될 수 있습니다.
할 수 있는 기능이 내장되어 있어 스캐너에서는 이미지 및 텍스트를 반환합니다 이미지에 포함된 통합 플라스크 응용 프로그램으로 인터페이스입니다. 이를 통해보다 친숙한 매체와 동시에 여러 사람에게 서비스를 제공 할 수있는 방식으로 기능을 노출 할 수 있습니다.