Skip to main content

광학 문자 인식: 과거와 현재

이 글에서는 광학 문자 인식(OCR)을 살펴보고, 사전 학습된 텍스트 위치 지정 및 인식 모델을 활용해 이미지에서 텍스트를 찾아 추출합니다. 이 글은 AI 번역본입니다. 오역 가능성이 있다면 댓글에서 자유롭게 알려주세요.
Created on September 12|Last edited on September 12
오늘 우리는 탐구해보겠습니다 광학 문자 인식(OCR)—컴퓨터 비전 모델을 사용해 이미지 속에서 텍스트를 찾아내고 식별하는 과정—과 함께, 널리 쓰이는 딥러닝 기반 OCR 라이브러리와 그 모델 아키텍처를 심층적으로 이해합니다.
잘 알려진 ‘역사적’ OCR 도구인 Tesseract도 함께 살펴보며, 최신 OCR 모델들과 어떻게 비교되는지 확인해 보겠습니다. 사실, 그 이야기는 간단한 역사부터 시작하는 것이 좋겠습니다.
다음 내용을 다룰 예정입니다:

목차




OCR의 간략한 역사

심지어 1980년대, 인공지능에 대한 연구 자금과 관심이 줄어들던 시기에도 (일명 AI 침체기), 당시에는 여전히 OCR의 실용적 적용에서도 진전이 있었습니다. 바코드는 개별 우편물을 자동으로 분류하는 데 사용되었고, 팩스(팩시밀리) 기기는 정보를 먼 거리로 신속하게 전송하는 데 활용되었습니다.
오늘날 우리가 알고 있는 OCR 기술은 AI 침체기 당시에는 존재하지 않았습니다. 그러나 1980년대 후반, 휴렛팩커드는 돌파구를 마련했습니다. 그들의 OCR 엔진은 매우 제한된 용례, 즉 OCR을 수행하기 위한 용도로 설계되었는데 인쇄된 HP의 독점 플랫베드 스캐너로 스캔한 텍스트에서 유망한 결과가 나타나기 시작했습니다. 실제로 1990년대 중반에는 UNLV 연례 OCR 정확도 테스트 그 도구, 즉 Tesseract는 창작자들의 기대를 훨씬 뛰어넘는 성능을 보이기 시작했습니다.
다음 내용을 다룰 예정입니다:

오늘날의 OCR 도구와 과거의 OCR 도구

오늘날의 OCR 도구들은 딥러닝 기반 아키텍처에 의존합니다(자세한 내용은 뒤에서 살펴보겠습니다). 반면 Tesseract는 이진화된(흑백) 텍스트에서 연결 성분을 탐지하며 작동했고, 먼저 각 단어를 식별한 뒤 올바르게 식별된 단어를 적응형 분류기에 전달하는 2단계 과정을 사용했습니다.
Tesseract가 ''읽기’ 페이지를 내려가며 더 많은 단어를 인식할수록, 해당 페이지에서의 단어 인식 성능이 점점 향상될 수 있었습니다. 적응형 분류기가 페이지의 하단부에서야 유용한 패턴을 학습하는 등 ‘너무 늦게’ 배운 경우를 보완하기 위해, Tesseract는 페이지를 다시 읽어 처음에 충분히 인식하지 못한 단어들에 대해 두 번째 패스를 수행했습니다. 마지막 단계에서는 ‘모호한 공백’ 처리나 소문자보다 작은 대문자 텍스트 같은 요소들을 다루었습니다.
다른 초기 OCR 도구들도 비슷한 절차를 따랐습니다:
  • 텍스트 이미지가 전처리되었습니다: 예를 들어 기울기 보정, 대비 조정 (오츠 방법등), ‘snow’ 제거 등
  • 객체 위치 지정: 우리 사례에서는 텍스트 위치 지정입니다. 기본적으로 텍스트가 있을 것으로 판단되는 관심 영역 주위에 경계 상자를 그리라는 의미입니다.
  • 문자 분할문자 글리프 분할이라고도 하며, 인접한 문자들로부터 개별 문자를 식별하는 과정을 말합니다.
  • 문자 또는 글리프 인식: 모르는 글자 하나와 영어의 알려진 모든 글자/글리프 모음이 주어졌을 때, 이 미지의 글자는 어떤 글자와 가장 가깝게 대응되는가?
  • 후처리: 페이지 이미지에서 추출한 텍스트를 후처리할 때 사전이나 단어 목록 같은 도구를 사용할 수 있습니다
현대 OCR 도구는 심층 신경망에 기반하며, 먼저 텍스트 검출���“이 이미지에 텍스트가 있는가? 있다면 어디에 있는가?”—을 수행한 뒤 텍스트 인식 모델이 이미 지정한 영역에서 어떤 문자나 글자가 나타나는지를 식별하는 과정입니다 감지됨 텍스트
텍스트 검출은 다음과 같이 생각할 수도 있습니다 객체 위치 지정; 익숙하다면 YOLO(You Only Look Once) 이미 객체 위치 지정 과정에 익숙할 ���입니다. 간단히 말해, 객체 위치 지정은 이미지에서 객체가 존재하는 영역을 촘촘하게 잘라낸 경계 상자로 표시하는 것으로 이해할 수 있습니다. 텍스트는 인식 이러한 딥러닝 모델 덕분에 인식 성능이 훨씬 견고해져, 사전 대조 같은 비용이 큰 연산을 수반하는 후처리 단계를 생략하는 것도 종종 가능해졌습니다. 지난 10여 년간 신경망 성능이 급격히 향상되면서, 새로운 모델 아키텍처의 등장으로 과거의 ‘오래된’ 다단계 OCR 방식은 더 이상 필요하지 않을 뿐만 아니라 최신 OCR 기법과 견줄 만한 성능도 내기 어렵게 되었습니다.
객체 위치 지정 박스가 표시된 고양이


기성 OCR 도구 비교

기성 OCR 도구를 비교하기 위해, 널리 사용되는 세 가지 라이브러리를 모아놓았습니다 이 노트북: 파인튜닝 keras-ocr Weights & Biases와 함께다음으로 살펴보겠습니다 PaddleOCR 모델 파인튜닝PaddlePaddle 생태계의 작업 특화 모델입니다. 그리고 세 번째 OCR 파인튜닝 과제에서는, 여러분이 따라 할 수 있도록 단계별로 안내하겠습니다 OCR 파인튜닝 인식 모델 PaddlePaddle 생태계의 모듈형 구성 요소인 PaddleOCR 라이브러리를 사용하여.

프레임워크와 모델 소개

이제 노트북에서 도구들을 살펴보기 전에, 각 라이브러리에 대해 간단히 알아보겠습니다.
keras-ocr 는 널리 사용되는 딥러닝 프레임워크 위에 구축된 OCR 라이브러리입니다. 케라스이는 CRAFT: Character-Region Awareness for Text detection 알고리즘을 사용하며, VGG 모델 백본으로서
CRAFT이미지에서 텍스트 데이터를 강조하는 살리언시 맵을 생성했습니다
PaddleOCR 는 Baidu Research가 만든 도구로, 다수 언어를 지원하며 EasyOCR과 달리 중국어 문자 OCR이 가능합니다. PaddlePaddle – 랄렐 분산러닝 생태계—PaddlePaddle 프레임워크와 함께 일반적인 딥러닝 작업을 위한 수백 개의 프로덕션급 엔드 투 엔드 모델로 구성되어 있으며, 이는 다음에서 이용할 수 있습니다 PaddleHub.
다른 일부 OCR 라이브러리가 비라틴 문자권에서 성능이 떨어지는 반면, PaddleOCR은 다양한 문자권 전반에서 매우 우수한 성능을 보입니다 영어, 중국어, 프랑스어, 독일어, 아랍어 및 그 외 다수의 언어기본 설정만으로도 PaddleOCR는 일부 클라우드 제공업체의 컴퓨터 비전 API에 필적하는 성능을 보입니다. 클라우드 제공업체의 컴퓨터 비전 API 수준의 성능은 원하지만 클라우드 비용은 지불하고 싶지 않은 엔지니어에게 PaddleOCR는 훌륭한 대안입니다.

EasyOCR 은 CNN+BiLSTM+CTC (커넥셔니스트 템포럴 분류 손실) 기본적으로 딥 뉴럴 네트워크를 사용하지만, 파인튜닝할 때 몇 가지 대체 아키텍처로 약간 실험해 볼 수도 있습니다 EasyOCR 모델: 학습 중 아키텍처를 시도해 볼 때 어텐션 메커니즘, VGG 등 다양한 구성을 사용할 수 있습니다. 이 도구가 제공하는 디코더 옵션은 그리디, 빔 서치, 워드 빔 서치입니다.
EasyOCR 텍스트가 포함된 장면처럼 더 ‘지저분한’ 데이터까지 처리할 수 있어, 종종 Tesseract가 어려워하는 경우에도 잘 작동합니다. EasyOCR 비라틴 문자 체계를 포함해 80개 이상의 언어를 지원합니다. 아랍어, 키릴 문자, 중국어, 한국어, 일본어, 텔루구어, 칸나다어 등. 이 문서에서 사용된 CRAFT 모델은 keras-ocr 라이브러리로, 다시 한 번 등장하며 텍스트 감지에 사용되는 EasyOCR 라이브러리, 이는 본 튜토리얼의 일부가 아닙니다.

Tesseract

Tesseract는 C/C++ 기반이며, 기능이 다소 제한적인 Python 래퍼가 있더라도, 대부분의 독자가 C/C++ 배경을 갖추지 않았다고 예상하기 때문에 미세 조정은 이 글의 범위를 벗어납니다. 또한 Tesseract의 CLI 버전은 ‘관찰 가능한’ 방식으로 학습시킬 수 없습니다. PyTesseract Python의 ‘변형’으로 볼 수 있는 Tesseract (C/C++로 작성되어 있지만) 그러나 PyTesseract 제공하는 것으로 간주되어서는 안 됩니다 Python 바인딩은 단지 인터페이스만 제공하기 때문에 Tesseract 이진
더 많은 기능을 갖춘 Python용 Tesseract 구현이 필요하다면 다음을 확인해 보세요 tesserocr. PyTesseract는 임시 파일에서 OCR 작업을 수행해야 합니다따라서 이러한 입출력이 걱정된다면, 다른 OCR 라이브러리를 선택하거나 C/C++ 버전을 사용하는 것이 좋습니다 Tesseract.
2018년 Tesseract 와 함께 제공되기 시작했고 엘에스티엠-기반 OCR ‘엔진’으로, 이는 Tesseract 버전 4.0. 이는 성능을 끌어올렸지만, 가려진 문자나 흐릿한 문자, 곡선 형태의 문자 등에서는 여전히 한계가 있었다. Tesseract 여전히 다소 버거웠습니다. 다음 글에서는 성능을 비교해 보겠습니다. Tesseract 5.0으로, ‘지저분한’ 텍스트 데이터에서의 성능이 향상되었습니다. 우리의 경험으로는 Tesseract의 성능을 극적으로 끌어올릴 수 있다 없이 이 페이지에서 다룬 다른 도구들과 달리 모델을 미세 조정할 수 있습니다. 이를 통해 성능을 개선할 수 있습니다. Tesseract의 성능을 다음과 같은 방법으로
  • 제대로 입력 데이터를 전처리하기기울기 보정, 노이즈 제거, 임계값/명암 대비 조정
  • 실행 tesseract 올바른 언어 팩이 설치됨 영어가 아닌 텍스트를 OCR해야 한다면
  • 가지고 있는 tesseract PNG나 기타 압축 형식 이미지 대신 TIFF 파일로 작업하십시오. 부득이하게 PNG를 사용해야 한다면, 성능 저하를 막기 위해 알파(투명) 채널이 설정되지 않았는지 반드시 확인하세요.
  • 올바른 페이지 분할 방식 선택하기 (psm 매개변수)
  • 후처리 기법, 사전 기반 후처리를 포함하여

노트북

Weights & Biases의 도움을 받아 여러 OCR 라이브러리의 텍스트 감지 또는 텍스트 인식 모델을 미세 조정하세요.
  • keras-ocr 코랩 노트북 CRAFT 모델을 가져와 ICDAR 2013 데이터로 미세 조정하세요. 이 데이터는 아래에서 사용하는 ICDAR 2015 데이터에 비해 확실히 ‘더 쉬운’ 직선 텍스트 이미지로, 블러가 적고 가림(occlusion)이 없다는 등의 특징이 있습니다.
  • PaddleOCR 미세 조정 코랩 노트북 - PaddleOCR 프레임워크를 사용하고 백본 모델로 MobileNetV3를 채택하여, 텍스트가 포함된 장면 이미지로 이루어진 ICDAR 2015 데이터셋에서 모델을 미세 조정하세요. 작은 크기와 빠른 속도가 요구될 때는, 더 크고 느린 ResNet 백본보다 MobileNet이 선호되는 경우가 많습니다.
  • EasyOCR 미세 조정 코랩 노트북 - 우리는 다음 중 하나를 미세 조정하는 방법을 살펴봅니다 인식 EasyOCR가 광학 문자 인식에 사용할 수 있는 모델 아키텍처를 소개하고, 그라디언트 로깅 예시도 함께 보여줍니다. 모델을 미세 조정한 후에는 BYOM(Bring Your Own Model) 방식으로 해당 모델을 EasyOCR 도구 체인에 가져와, 직접 학습한 모델로 OCR 예측을 수행할 수 있습니다. https://github.com/JaidedAI/EasyOCR#trainuse-your-own-model

마무리

위의 세 개 노트북에서 프레임워크를 실험해 보고, 어쩌면 이미 Tesseract 시도도 해 보셨다면, 다음과 같은 결론에 도달했을 수도 있습니다:
  • 가려지거나 모션 블러가 있거나 곡선 혹은 왜곡된 텍스트처럼 ‘읽기 어려운’ 경우에는, 세 가지 라이브러리 중 어느 하나가 다른 것들을 능가하는 모습을 종종 확인하게 될 것입니다 Tesseract
  • 스캔본이나 인쇄 매체를 촬영한 이미지처럼 ‘깨끗한’ 텍스트의 경우, Tesseract 여전히 강력하며, 페이지 분할 방식을 조정하면 성능을 더욱 높일 수 있고, Tesseract 텍스트가 어느 언어인지 등. 더 최신 버전의 Tesseract예를 들어 5.0 버전처럼, 성능 향상을 위해 배정밀도 대신 ‘빠른 부동소수점’을 사용하며 s에서 실행됩니다Tesseract 4.0에서 처음 도입된 LSTM 모델의 두 번째 버전으로, 원래 모델보다 성능이 더 뛰어납니다.
머신러닝 시스템이 처리해야 할 텍스트 데이터 이미지의 다양성에 따라, 파인튜닝을 하지 않은 기성 모델만으로도 OCR 신경망 모델이 매우 높은 성능을 낼 수 있습니다. 다음과 같은 다단계 아키텍처들, 예를 들어 다음에서 소개하는 아키텍처들은 PaddleOCR 도구나 VGG 백본을 사용하는 CRAFT 모델은, 컴퓨터 비전과 OCR 과제에서 흔히 쓰이던 10년 전의 합성곱 신경망과 비교하면 비약적으로 발전한 수준입니다.
여러 OCR 라이브러리를 시험해 보고, 각 라이브러리 안에서도 다양한 모델 아키텍처를 함께 실험해 보면서 여러분의 텍스트 인식 요구에 가장 잘 맞는 것을 찾아보세요. 테스트하는 동안 이미지 증강을 적극적으로 활용해, 다양한 ‘텍스트 조건’에서도 선택한 OCR이 충분한 성능을 내는지 확인하세요. 예를 들어, 다음과 같은 도구로 학습 이미지를 증강해 보십시오. 알뷰멘테이션즈.
마지막으로, 위에서 소개한 OCR 도구들은 모두 Github에서 활발한 개발 커뮤니티를 운영하고 있습니다. 각 프로젝트의 커뮤니티에 질문을 올려 보세요. 수십 년 동안 OCR에 종사해 온 엔지니어와 연구자들뿐만 아니라 OCR과 딥러닝에 이제 막 입문한 사람들로부터도 많은 것을 배울 수 있습니다. 딥러닝 기반 OCR 파이프라인을 최적화하고 구축하는 과정에서 익히게 되는 기술들은 다른 컴퓨터 비전 과제에도 손쉽게 적용할 수 있으니, 저희의 다른 컴퓨터 비전 모델 리포트도 함께 확인해 보세요!

부록

다음에 대한 흥미로운 분석으로는 Tesseract 클라우드 제공업체의 OCR 도구(아마존, 구글)와의 비교에 대해서는 다음 스프링거 페어락 웹사이트에 실린 논문을 확인해 보세요: Tesseract, Amazon Textract, Google Document AI를 활용한 OCR: 벤치마킹 실험
클라우드 제공업체의 OCR 모델은 항상 파인튜닝할 수 있는 것은 아니지만, 방대한 양의 다양한 데이터로 학습되었기 때문에 파인튜닝 가능한 딥러닝 기반 OCR 라이브러리보다 성능이 더 잘 나오는 경우가 있습니다. 또한 파인튜닝 과정에서 신경망 기반 OCR 모델에 투입할 라벨링된 학습 데이터를 직접 마련하는 비용이 과도할 때, 클라우드 OCR 도구는 특히 유용합니다.

추가로 읽을거리:



이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인하실 수 있습니다: 원문 보고서 보기