# Show HN: LLM-Aided OCR – LLM으로 Tesseract OCR 오류 수정

> Clean Markdown view of GeekNews topic #16253. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16253](https://news.hada.io/topic?id=16253)
- GeekNews Markdown: [https://news.hada.io/topic/16253.md](https://news.hada.io/topic/16253.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-10T09:43:56+09:00
- Updated: 2024-08-10T09:43:56+09:00
- Original source: [github.com/Dicklesworthstone](https://github.com/Dicklesworthstone/llm_aided_ocr)
- Points: 5
- Comments: 1

## Topic Body

- 광학 문자 인식(OCR) 출력의 품질을 크게 향상시키기 위해 설계  
- 최신 자연어 처리 기술과 대형 언어 모델(LLM)을 활용하여 원시 OCR 텍스트를 매우 정확하고 잘 형식화된 읽기 쉬운 문서로 변환  
  
#### 기능  
- PDF를 이미지로 변환  
- Tesseract를 사용한 OCR  
- LLM(로컬 또는 API 기반)을 사용한 고급 오류 수정  
- 효율적인 처리를 위한 스마트 텍스트 청킹  
- Markdown 형식 옵션  
- 헤더 및 페이지 번호 억제(선택 사항)  
- 최종 출력의 품질 평가  
- 로컬 LLM 및 클라우드 기반 API 제공자(OpenAI, Anthropic) 지원  
- 성능 향상을 위한 비동기 처리  
- 프로세스 추적 및 디버깅을 위한 상세 로깅  
- 로컬 LLM 추론을 위한 GPU 가속  
  
#### 요구 사항  
- Python 3.12+  
- Tesseract OCR 엔진  
- PDF2Image 라이브러리  
- PyTesseract  
- OpenAI API(선택 사항)  
- Anthropic API(선택 사항)  
- 로컬 LLM 지원(선택 사항, 호환 GGUF 모델 필요)  
  
#### 사용 방법  
1. 프로젝트 디렉토리에 PDF 파일을 배치  
2. `main()` 함수의 `input_pdf_file_path` 변수를 PDF 파일명으로 업데이트  
3. 스크립트 실행:  
   ```python  
   python llm_aided_ocr.py  
   ```  
4. 스크립트는 최종 후처리 텍스트를 포함한 여러 출력 파일을 생성  
  
#### 작동 방식  
LLM-Aided OCR 프로젝트는 원시 OCR 출력을 고품질의 읽기 쉬운 텍스트로 변환하기 위해 다단계 프로세스를 사용:  
1. **PDF 변환**: `pdf2image`를 사용하여 입력 PDF를 이미지로 변환  
2. **OCR**: Tesseract OCR을 적용하여 이미지에서 텍스트 추출  
3. **텍스트 청킹**: 원시 OCR 출력을 관리 가능한 청크로 분할  
4. **오류 수정**: 각 청크는 LLM 기반 처리를 통해 OCR 오류를 수정하고 가독성을 향상  
5. **Markdown 형식화**(선택 사항): 수정된 텍스트를 깨끗하고 일관된 Markdown으로 재형식화  
6. **품질 평가**: LLM 기반 평가를 통해 최종 출력 품질을 원래 OCR 텍스트와 비교  
  
### GN⁺의 정리  
- LLM-Aided OCR 프로젝트는 최신 자연어 처리 기술과 대형 언어 모델을 활용하여 OCR 출력의 품질을 크게 향상시키는 시스템임  
- PDF를 이미지로 변환하고, Tesseract를 사용하여 텍스트를 추출한 후, LLM을 통해 오류를 수정하고 Markdown 형식으로 재구성함  
- 로컬 및 클라우드 기반 LLM을 모두 지원하며, 비동기 처리를 통해 성능을 최적화함  
- 이 프로젝트는 OCR 출력의 정확성과 가독성을 높이기 위해 다양한 고급 기능을 제공하며, 특히 대형 문서 처리에 유용함  
- 유사한 기능을 제공하는 프로젝트로는 ABBYY FineReader, Adobe Acrobat OCR 등이 있음

## Comments



### Comment 27909

- Author: neo
- Created: 2024-08-10T09:43:56+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41203306) 
- 새로운 schnell 모델 출시로 SOTA 비전 모델을 생산할 수 있는 데이터셋 확보 가능성 있음
  - 현재 대부분의 비전 모델은 오래된 CLIP/BLIP 캡션에 기반하고 있음
  - LLAVA나 phi-llava 같은 모델도 여전히 사전 학습된 비전 컴포넌트에 의해 제한받고 있음
  - Tessy와 LLM의 파이프라인이 효과적이며, 다국어 모델이 디지털화된 작업을 읽고 번역할 수 있는 가능성 열림
  - LLAVA-PHI3는 히브리어를 일관되게 전사할 수 있지만 환각 문제 있음
  - 새로운 SOTA 비전 모델이 나오면 품질이 크게 향상될 것으로 기대됨

- 과학 논문에서는 meta의 nougat 모델이 가장 적합함
  - 청구서와 기록에서는 donut 모델이 더 나음
  - 두 모델 모두 일부 경우 실패할 수 있으며, LLM을 사용해 문제를 해결해야 함
  - OCR 과정에서 세부 사항이 손실되므로 표와 차트를 정확히 처리하기 어려움
  - Google Gemini가 이미지에 대한 미세 조정 기능을 제공하지만 시도해보지 않음
  - 몇 번의 샷 프롬프트가 LLM의 환각을 방지하고 요청된 형식에 맞추는 데 도움됨

- 과거에 시도해본 결과, 90%의 경우 잘 작동함
  - 임대 계약서와 같은 문서에서는 숫자와 이름(사람이나 장소의 이름/주소)에서 어려움이 있음
  - LLM이 정확히 임대료를 알거나 특정 사람의 이름을 알 수 없음

- PDF 페이지를 PNG로 변환하고 gpt4에 이미지를 전사하도록 요청하면 매우 정확함
  - Tesseract나 고전적인 OCR보다 더 정확함

- 10년 전 Tesseract를 사용해 중국어를 OCR로 인식하려고 시도했음
  - 영어 텍스트 인식 후 정리하기 쉬움
  - 중국어는 글자 하나가 잘못 인식되면 오류를 감지하기 어려움
  - 이미지 마법을 사용해 이미지를 변형하고 Tesseract에 보내 인식된 문장의 통계적 빈도를 기반으로 승자를 투표함
  - 정확도가 크게 향상됨

- PaddlePaddle을 사용해 더 나은 결과를 얻었음
  - PPOCRv3를 사용해 단어 수준으로 책을 자르는 Python 구현을 작성함
  - PPOCRv4는 픽셀 크기 제한이 없으므로 "바로 사용할 수 있음"
  - PPOCRv3 탐지 모델이 더 잘 작동했음

- 다른 OCR 패키지를 사용해보았는지 질문함
  - Tesseract가 "77"을 "7"로 읽는 문제를 겪었음

- 프롬프트를 조정해 모델이 더 명확하게 이해하도록 하는 것이 중요함
  - LLM과 문서에 대해 많은 생각을 함
  - OCR이 곧 완전히 해결될 문제라고 생각함
  - 복잡한 문서의 모호성과 세부 사항을 AI 모델에 효과적으로 설명하는 것이 도전 과제임

- rubrics와 학생 제출물을 파싱하는 유사한 작업을 하고 있음
  - GPT-4V와의 통합에 관심 있음
  - 이메일로 연락을 원함

- "fix this text" 프롬프트를 사용해 OCR 오류를 수정하는 접근 방식에 대해 질문함
  - 채팅 모델 대신 완성 모델을 사용해 토큰별로 입력하고 다음 토큰 확률을 얻는 방법을 제안함
  - 이 방법이 환각을 크게 줄일 수 있을 것이라고 생각함
