Show HN: Llama2를 사용하여 OCR 오류 수정하기
요약
본 프로젝트는 OCR 텍스트의 품질을 향상시키기 위해 LLM을 활용하는 고급 시스템입니다. PDF 변환, Tesseract 기반 OCR 및 전처리 과정을 거친 후, 핵심적으로 LLM이 OCR 오류를 수정하고 마크다운 형식으로 구조화합니다. OpenAI와 Anthropic 등 다양한 LLM 지원과 로컬 GPU 가속화 기능을 제공하여 높은 유연성을 자랑합니다.
핵심 포인트
- LLM을 활용한 OCR 오류 수정 및 텍스트 품질 향상
- PDF 변환, Tesseract OCR, 청킹(chunking) 등 전처리 과정 포함
- OpenAI/Anthropic API와 llama_cpp를 이용한 로컬 LLM 모두 지원
- 마크다운 형식 지정, 중복 콘텐츠 제거 등 후처리 기능 제공
LLM 기반 OCR 프로젝트는 광학 문자 인식(OCR) 출력의 품질을 획기적으로 향상시키도록 설계된 고급 시스템입니다. 최첨단 자연어 처리 기술과 대규모 언어 모델(LLMs)을 활용하여, 이 프로젝트는 원본 OCR 텍스트를 매우 정확하고, 잘 형식화되었으며, 읽기 쉬운 문서로 변환합니다.
LLM 기반 OCR 프로젝트가 무엇을 할 수 있는지 확인하려면 다음 예시 출력을 살펴보세요:
-
PDF를 이미지로 변환
-
Tesseract를 사용한 OCR
-
LLMs를 이용한 고급 오류 수정 (로컬 또는 API 기반)
-
효율적인 처리를 위한 스마트 텍스트 청킹(chunking)
-
Markdown 형식 지정 옵션
-
헤더 및 페이지 번호 제거 (선택 사항)
-
최종 출력 품질 평가
-
로컬 LLM과 클라우드 기반 API 제공업체 모두 지원 (OpenAI, Anthropic)
-
성능 향상을 위한 비동기 처리(Asynchronous processing)
-
프로세스 추적 및 디버깅을 위한 상세 로깅
-
로컬 LLM 추론을 위한 GPU 가속화
PDF를 이미지로 변환 (PDF to Image Conversion)- 함수: convert_pdf_to_images()
-
pdf2image라이브러리를 사용하여 PDF 페이지를 이미지로 변환합니다.max_pages및skip_first_n_pages매개변수를 통해 일부 페이지 처리가 가능합니다. -
함수:
OCR 처리 (OCR Processing)- 함수: ocr_image()
-
텍스트 추출을 위해
pytesseract를 활용합니다. 다음 기능을 포함하여 이미지 전처리(preprocessing)가 이루어집니다:- 이미지를 그레이스케일로 변환
- Otsu의 방법을 사용하여 이진 임계값 처리(binary thresholding) 적용
- 텍스트 명료도 향상을 위해 팽창(dilation) 수행
-
함수:
청크 생성 (Chunk Creation)- process_document() 함수는 전체 텍스트를 관리 가능한 청크로 분할합니다. 자연스러운 분리를 위해 문장 경계(sentence boundaries)를 사용하며, 컨텍스트 유지를 위해 청크 간 중첩(overlap)을 구현합니다.
- 다음-
오류 수정 및 형식 지정 (Error Correction and Formatting)- 핵심 함수: process_chunk()
-
2단계 프로세스:
a. OCR 오류 수정:- LLM을 사용하여 OCR로 인해 발생한 오류를 수정합니다.
- 원본 구조와 내용을 유지합니다.
b. Markdown 형식 지정 (선택 사항): - 텍스트를 적절한 마크다운 형식으로 변환합니다.
- 제목, 목록, 강조 등 다양한 요소를 처리합니다.
-
핵심 기능:
중복 콘텐츠 제거 (Duplicate Content Removal) - 마크다운 형식 지정 단계에서 구현됩니다.
-
정확하거나 거의 동일하게 반복되는 단락을 식별하고 제거합니다.
-
고유한 콘텐츠를 보존하고 텍스트 흐름을 유지합니다.
-
헤더 및 페이지 번호 억제 (Header and Page Number Suppression) (선택 사항) - 헤더, 푸터, 페이지 번호를 제거하거나 명확하게 형식 지정하도록 구성할 수 있습니다.
-
유연한 LLM 지원 (Flexible LLM Support) - 로컬 LLM과 클라우드 기반 API 제공업체(OpenAI, Anthropic)를 모두 지원합니다.
-
환경 변수를 통해 구성 가능합니다.
-
로컬 LLM 처리 (Local LLM Handling) - 함수:
generate_completion_from_local_llm() -
로컬 LLM 추론을 위해
llama_cpp라이브러리를 사용합니다. - 구조화된 출력을 위한 사용자 정의 문법(custom grammars)을 지원합니다. -
함수:
API 기반 LLM 처리 (API-based LLM Handling) - 함수:
generate_completion_from_claude()와 generate_completion_from_openai()
-
적절한 오류 처리 및 재시도 로직을 구현합니다.
-
토큰 제한을 관리하고 요청 크기를 동적으로 조정합니다.
-
함수:
비동기 처리 (Asynchronous Processing) - API 기반 LLM 사용 시 asyncio를 사용하여 청크의 동시 처리를 수행합니다. - 처리된 청크의 순서를 유지하여 일관된 최종 출력을 만듭니다.
-
사용:
-
토큰 추정 (Token Estimation) - 함수:
estimate_tokens() -
사용 가능한 경우 모델별 토크나이저를 사용합니다. - 빠른 추정을 위해
approximate_tokens()로 대체됩니다. -
함수:
동적 토큰 조정 (Dynamic Token Adjustment) - 프롬프트 길이와 모델 제한에 따라 max_tokens 매개변수를 조정합니다. - 안전한 토큰 관리를 위해 TOKEN_BUFFER와 TOKEN_CUSHION을 구현합니다.
- 조정:
출력 품질 평가 (Output Quality Evaluation) - 함수:
assess_output_quality()
-
원본 OCR 텍스트를 처리된 출력과 비교합니다.
-
LLM을 사용하여 품질 점수와 설명을 제공합니다.
-
함수:
-
코드베이스 전반에 걸쳐 포괄적인 로깅을 수행합니다.
-
디버깅을 위한 상세한 오류 메시지와 스택 트레이스를 제공합니다.
-
노이즈를 줄이기 위해 HTTP 요청 로그는 억제됩니다.
프로젝트는 .env 파일을 사용하여 쉬운 구성을 합니다. 주요 설정에는 다음이 포함됩니다:
프로젝트는 .env 파일을 사용하여 쉬운 구성을 지원합니다. 주요 설정에는 다음이 포함됩니다:
- LLM 선택 (로컬 또는 API 기반)
- API 제공업체 선택
- 다양한 제공업체별 모델 선택
- 토큰 제한 및 버퍼 크기
- 마크다운 서식 옵션
Raw OCR Output: {base_name}__raw_ocr_output.txt로 저장됨
LLM Corrected Output: {base_name}_llm_corrected.md 또는 .txt로 저장됨
이 스크립트는 타이밍 정보와 품질 평가를 포함하여 전체 프로세스에 대한 상세한 로그를 생성합니다.
-
Python 3.12+
-
Tesseract OCR 엔진
-
PDF2Image 라이브러리
-
PyTesseract
-
OpenAI API (선택 사항)
-
Anthropic API (선택 사항)
-
로컬 LLM 지원 (선택 사항, 호환되는 GGUF 모델 필요)
-
Pyenv 및 Python 3.12 설치 (필요한 경우):
# 필요한 경우 Pyenv와 python 3.12를 설치하고 이를 사용하여 venv 생성:
if ! command -v pyenv &> /dev/null; then
sudo apt-get update
...
- 프로젝트 설정:
# pyenv를 사용하여 가상 환경을 생성합니다:
git clone https://github.com/Dicklesworthstone/llm_aided_ocr
cd llm_aided_ocr
...
-
Tesseract OCR 엔진 설치 (아직 설치되지 않은 경우):
-
Ubuntu의 경우:
sudo apt-get install tesseract-ocr -
macOS의 경우:
brew install tesseract -
Windows의 경우: GitHub에서 다운로드하여 설치합니다.
-
Ubuntu의 경우:
-
환경 변수를
.env파일에 설정합니다:
USE_LOCAL_LLM=False API_PROVIDER=OPENAI OPENAI_API_KEY=your_openai_api_key ANTHROPIC_API_KEY=your_anthropic_api_key -
PDF 파일을 프로젝트 디렉터리에 배치합니다.
-
main()함수 내의input_pdf_file_path변수를 PDF 파일 이름으로 업데이트합니다. - -
스크립트를 실행합니다:
python llm_aided_ocr.py -
스크립트는 최종적으로 후처리된 텍스트를 포함하여 여러 개의 출력 파일을 생성합니다.
LLM 기반 OCR 프로젝트는 원시 OCR 출력을 고품질의 가독성 높은 텍스트로 변환하기 위해 다단계 프로세스를 사용합니다:
-
PDF 변환:
pdf2image를 사용하여 입력 PDF를 이미지로 변환합니다. -
OCR: Tesseract OCR을 적용하여 이미지에서 텍스트를 추출합니다.
-
Text Chunking: 원본 OCR 출력을 처리 가능한 청크(chunk)로 분할합니다.
-
Error Correction: 각 청크는 LLM 기반 처리를 거쳐 OCR 오류를 수정하고 가독성을 향상시킵니다.
-
Markdown Formatting(선택 사항): 수정된 텍스트를 깨끗하고 일관성 있는 Markdown 형식으로 재구성합니다.
-
Quality Assessment: LLM 기반 평가가 최종 출력 품질을 원본 OCR 텍스트와 비교합니다.
동시 처리(Concurrent Processing): API 기반 모델을 사용할 때, 속도 향상을 위해 청크를 동시에 처리합니다. 문맥 유지(Context Preservation): 각 청크는 이전 청크와 약간의 중복(overlap)을 포함하여 문맥을 유지합니다. 적응형 토큰 관리(Adaptive Token Management): 시스템은 입력 크기와 모델 제약 조건에 따라 LLM 요청에 사용되는 토큰 수를 동적으로 조정합니다.
프로젝트는 설정 파일로 .env를 사용합니다. 주요 설정 항목은 다음과 같습니다:
USE_LOCAL_LLM: 로컬 LLM을 사용할지 여부를 True로, API 기반 LLM을 사용할지 여부를 False로 설정합니다.
API_PROVIDER:
제 오픈 소스 프로젝트에 관심을 가져주셔서 감사합니다! 유용하게 사용하시기를 바랍니다. 또한 제 상업 웹 앱들도 도움이 될 수 있으니 확인해 주시면 정말 감사하겠습니다:
YoutubeTranscriptOptimizer.com은 YouTube 비디오 URL을 붙여넣기만 하면 매우 정확한 직접 전사(direct transcription)는 물론, 영상과 독립적으로 사용할 수 있는 매우 세련되고 아름답게 포맷된 문서까지 자동으로 생성하여 빠르고 쉽게 만들어 줍니다.
이 문서는 기본적으로 영상에서 논의된 자료와 동일하지만, 단순한 전사본이라기보다는 실제 글쓰기처럼 들립니다. 또한 문서 내용을 기반으로 퀴즈를 선택적으로 생성할 수도 있는데, 이는 객관식(multiple choice) 또는 단답형(short-answer) 퀴즈일 수 있으며, 객관식 퀴즈는 호스팅하고 쉽게 공유할 수 있는 인터랙티브 HTML 파일로 변환됩니다. 사용자가 실제로 퀴즈를 풀고 정답을 채점하며 점수를 받을 수 있습니다.
FixMyDocuments.com에서는 PDF(OCR이 필요한 스캔된 PDF 포함), MS Word 및 Powerpoint 파일, 이미지, 오디오 파일(mp3, m4a 등) 등 모든 종류의 문서를 제출하고, 이를 보기 좋은 마크다운(markdown) 형식으로 고도로 최적화된 버전으로 변환할 수 있으며, 이로부터 HTML 및 PDF 버전이 자동으로 생성됩니다. 한 번 변환되면 내장된 마크다운 편집기를 사용하여 사이트에서 직접 편집할 수도 있으며, 여기서는 실행 중인 수정 기록을 저장하고 PDF/HTML 버전을 재생성합니다.
문서를 최적화된 버전으로 얻는 것 외에도, 원본에서 다양한 종류의 '파생 문서(derived documents)'를 생성할 수 있습니다. 실제로 응시하고 채점받을 수 있는 인터랙티브 객관식 퀴즈; PDF 또는 HTML 형식의 세련된 프레젠테이션 슬라이드 (LaTeX 및 Reveal.js 사용); 심층 요약본; 개념 마인드맵(Mermaid 다이어그램 사용)과 개요; 대상 청중을 선택할 수 있는 맞춤형 학습 계획서; 가독성 분석 및 원본 문서의 학년별 버전 (학생들을 위해 개념을 단순화하는 데 유용함); Anki 앱에 직접 가져오거나 사이트의 멋진 인터페이스에서 사용할 수 있는 Anki 플래시카드 등 더 많은 것들이 가능합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Code Generation의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기