최적의 파이썬 OCR 라이브러리 비교
요약
본 글은 Tesseract, EasyOCR, PaddleOCR 세 가지 주요 파이썬 OCR 라이브러리를 비교 분석합니다. 깨끗한 이미지에서는 모두 좋은 성능을 보이지만, 낮은 해상도나 노이즈가 있는 어려운 입력의 경우 각 라이브러리별 강점과 약점을 제시하며 최적의 선택 기준을 안내합니다.
핵심 포인트
- OCR은 픽셀 형태의 텍스트를 프로그램 데이터로 변환하는 기술입니다.
- 깨끗한 인쇄물에서는 세 라이브러리가 모두 높은 정확도를 보였습니다.
- 노이즈나 회전 등 어려운 조건에서는 각 라이브러리별 성능 차이가 발생합니다.
- Tesseract는 방향 감지 기능이 우수하며, 전처리 과정(deskewing)을 거치면 성능 향상이 기대됩니다.
가장 좋은 파이썬 OCR 라이브러리는 이미지의 종류에 따라 다릅니다. 깨끗하고, 똑바로 서 있으며, 고해상도의 인쇄된 텍스트의 경우, Tesseract, EasyOCR, PaddleOCR 모두 테스트에서 본질적으로 완벽한 텍스트를 반환했습니다. 따라서 이 경우 선택은 설치 크기와 속도에 관한 것입니다. 입력이 더 어려워지면 라이브러리들이 차이를 보입니다: 낮은 해상도, 회전, 노이즈 또는 두 개의 열 구조.
OCR(Optical Character Recognition)은 텍스트 사진을 프로그램이 사용할 수 있는 텍스트로 변환하는 기술입니다. 원하는 단어가 문자가 아니라 픽셀인 경우에 필요합니다: 스캔된 계약서, 영수증 사진, 스크린샷 또는 스캔본으로 만들어진 PDF가 예시입니다. 만약 PDF에서 텍스트를 선택하고 복사할 수 있다면, 이미 텍스트 레이어를 가지고 있으므로 파서를 통해 그 레이어를 직접 읽어오기 때문에 OCR이 전혀 필요하지 않습니다. 사람들은 스캔을 검색 가능하게 만들거나, 언어 모델에 텍스트를 공급하거나, 송장 및 양식에서 값을 추출하기 위해 OCR을 실행합니다.
본 페이지에서는 이 세 가지 라이브러리를 동일한 합성 이미지로 실행하고 코드를 보여주며, 무엇을 측정했고 무엇을 측정하지 않았는지 설명합니다.
준비물
- Python 3.10 이상 버전.
- 본인이 직접 찍은 몇 장의 이미지, 가급적 허구적이거나 샘플 이미지가 좋습니다. 예시 코드가 인식된 텍스트를 출력하기 때문에 실제 고객 문서의 텍스트가 터미널이나 작업 로그에 남을 수 있습니다. 가장 보기 싫은 이미지까지 포함하세요. 깨끗한 이미지는 모든 라이브러리를 좋게 보이게 만듭니다.
- 각 라이브러리별로 별도의 가상 환경이 필요합니다. EasyOCR과 PaddleOCR 각각 큰 프레임워크(PyTorch 및 PaddlePaddle)를 가져오기 때문입니다.
- Tesseract의 경우, 파이썬 래퍼(wrapper)뿐만 아니라 Tesseract 프로그램 자체도 필요합니다. macOS의 경우:
brew install tesseract
pip install pytesseract pillow # 환경 1, 그리고 Tesseract 프로그램
pip install easyocr # 환경 2
pip install paddlepaddle paddleocr # 환경 3
단계 1. 각 라이브러리를 하나의 이미지에 실행하기
Tesseract를 그 파이썬 래퍼 pytesseract를 통해 사용합니다:
import pytesseract
from PIL import Image
...
EasyOCR는 첫 호출 시 약 108 MB의 모델을 다운로드합니다:
import easyocr
reader = easyocr.Reader([
회전 각도 15도와 심한 노이즈 및 블러 조건에서 Tesseract는 유의미한 결과(0.000)를 반환했고, DPI 50에서는 0.505점을 기록했습니다. 반면 PaddleOCR은 동일 이미지에 대해 각각 1.000점, 0.851점, 0.957점을 기록했습니다. Tesseract 자체 문서에서도 같은 내용을 언급합니다. 즉, 300 DPI 이상에서 가장 잘 작동하며, 기울어짐(skew)이 라인 분할 품질을 크게 저하시킨다는 것입니다. 저희는 문서의 권장 사항대로 디스큐잉(deskewing)이나 업스케일링(upscaling)과 같은 전처리 과정을 시도하지 않았기 때문에, 제시된 수치는 원본 입력에 대한 점수입니다. Tesseract는 방향 감지 기능을 통해 90도 회전까지 정확하게 보고했으므로, 회전 단계만 추가하면 해당 케이스를 해결할 수 있습니다.
### EasyOCR은 노이즈가 있는 라인에서 읽기 순서를 잃음
EasyOCR은 약간 회전되고 블러 처리된 단락에 대해 0.479점을 기록했는데, 이는 내용을 잘못 읽었기 때문이라기보다는 라그먼트(fragment)를 잘못된 순서로 반환했기 때문입니다. 또한 DPI 50에서는 0.245점, 심한 노이즈 조건에서는 0.202점을 기록했습니다. 작성 시점 기준으로 가장 최신 버전은 2024년 9월에 출시되었습니다.
### 어느 것도 레이아웃을 해결하지 못함
세 라이브러리 모두 두 열 전체를 라인별로 읽어 왼쪽과 오른쪽 텍스트가 번갈아 나오게 합니다. 따라서 내용은 완전했지만 순서가 잘못되었습니다(세 라이브러리 모두 0.489점). 어느 것도 테이블 구조는 반환하지 않고 텍스트만 반환합니다. Tesseract의 기본 모드는 테이블을 단일 행으로 반환했습니다. 만약 작업이 테이블이나 다중 열 문서라면, 이 라이브러리들은 구조가 아닌 텍스트를 제공할 뿐입니다.
### 스페인어는 설정이 필요함
Tesseract의 Homebrew 빌드는 영어만 포함하고 있습니다. 영어만 사용했을 때 스페인어 단락에 대해 0.967점을 기록했지만, 그중 n√∫mero, M√°laga, direcci√≥n 등 악센트가 있는 단어 9개를 누락하는 실패를 보였고, 이 점수는 전체 평균 점수에 가려졌습니다. 스페인어 언어 파일(`spa.traineddata`, tessdata_fast 저장소에서 약 2.3 MB)을 추가하자 0.993점을 기록하며 악센트가 있는 단어를 놓치는 일이 없었습니다. PaddleOCR과 EasyOCR은 각각 아무것도 놓치지 않았습니다.
### 테스트하지 않은 것
### 테스트하지 않은 것
실제 손글씨는 테스트하지 않았습니다. 사용된 두 폰트는 손으로 쓴 것처럼 보일 뿐이므로 결론을 내릴 수 없습니다. Tesseract의 FAQ에 따르면, 이 프로그램은 인쇄된 텍스트를 위해 설계되었기 때문에 손글씨에는 그다지 잘 작동하지 않을 것이라고 합니다. EasyOCR의 README에는 손글씨가 향후 항목으로 나열되어 있습니다. 우리는 실제 스캔본, 전처리 과정, GPU 속도 또는 비(非)라틴 문자 스크립트는 테스트하지 않았습니다.
## 자체 이미지 확인하기
예상하는 텍스트를 직접 작성하고 자신의 파일에 동일한 점수를 계산해 보세요. 이 함수는 이미지당 하나의 숫자만 보고하며 텍스트를 절대 출력하지 않으므로, 결과는 로그로 기록해도 안전합니다.
def edit_distance(a: str, b: str) -> int:
prev = list(range(len(b) + 1))
for i, ca in enumerate(a, start=1):
...
## 설치 및 라이선스 참고 사항
세 라이브러리 모두 Apache 2.0 라이선스를 따릅니다. PaddleOCR 3.7.0은 2026년 6월에 출시되었고, EasyOCR 1.7.2는 2024년 9월에 출시되었습니다. EasyOCR은 80개 이상의 언어를 나열하며 GPU가 필수는 아니라고 권장하고, PaddleOCR의 README에는 100개 이상의 언어와 CPU 및 GPU 지원이 나열되어 있습니다. Tesseract는 100개 이상의 언어를 지원하며 GPU가 필요하지 않습니다.
이러한 라이브러리들을 비용 측면에서 관리형 OCR API와 비교하려면 [OCR API 대 오픈 소스](https://anyformat.ai/blog/ocr-api-vs-open-source-self-hosted)를 참조하세요. 자신의 파일에 대한 정확도를 테스트하려면 [Tesseract가 프로덕션에 충분히 정확한가요?](https://anyformat.ai/blog/is-tesseract-accurate-enough-for-production)를 참조하세요.
## 이러한 라이브러리가 부족할 때: anyformat
이들은 텍스트만 반환합니다. 송장 번호, 총액과 같은 타이핑된 필드, 표 구조 또는 조치 가능한 신뢰 점수가 필요하다면, 상위 계층(layer)이 필요합니다. 즉, 자체 추출 코드나 문서 처리 서비스가 필요한 것입니다. anyformat은 후자에 속하며, 신뢰 점수와 원본 텍스트 및 페이지와 함께 타이핑된 필드를 반환합니다. 우리는 이 비교에서 it을 실행하지 않았으므로, 이 페이지는 이 이미지들에 대한 점수 산정에 대해 어떠한 주장도 하지 않습니다.
## 자주 묻는 질문
## 자주 묻는 질문
**최적의 Python OCR 라이브러리는 무엇인가요?**
이미지에 따라 다릅니다. 깨끗한 300 DPI 인쇄 텍스트에서는 Tesseract, EasyOCR, PaddleOCR 모두 테스트에서 동등하게 정확했으며, Tesseract가 가장 가볍고 빨랐습니다. 회전되거나 노이즈가 많거나 해상도가 낮은 이미지의 경우, 전처리 없이 PaddleOCR이 테스트에서 가장 높은 점수를 받았습니다.
**Tesseract가 EasyOCR보다 더 나은가요?**
깨끗한 텍스트에서는 비슷했습니다. Tesseract는 더 빠르고 가벼웠으며, EasyOCR은 작은 표를 텍스트로 읽는 것에서 더 좋았지만, 회전되거나 흐릿한 문단에서는 읽기 순서를 놓쳤습니다. 둘 다 표 구조는 반환하지 않습니다.
**Python에서 OCR을 위해 GPU가 필요한가요?**
아니요. 저희는 세 가지 모두 CPU로 실행했습니다. EasyOCR은 GPU를 권장하지만 필수는 아니라고 하며, PaddleOCR은 둘 다 지원합니다. 저희는 GPU 속도를 측정하지 않았습니다.
**Tesseract가 스페인어에서 악센트를 누락하는 이유는 무엇인가요?**
기본 Homebrew 설치에는 영어만 포함되어 있습니다. 스페인어 언어 파일을 추가하고 `lang="spa"`를 전달하세요.
**이 라이브러리들이 필기체를 읽을 수 있나요?**
실제 필기체는 테스트하지 않았습니다. Tesseract의 FAQ에 따르면 인쇄된 텍스트용으로 설계되었다고 합니다.
_원래 [anyformat.ai/blog/best-python-ocr-library](https://anyformat.ai/blog/best-python-ocr-library)에서 게시됨._
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기