ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 합성 PDF를 PNG로 바꾼 Tesseract 숫자 검증 — PSM 11 94.17%, 전체 일치 11/30
    AI Agent 2026. 8. 26. 09:00
    728x90
    반응형

    합성 PDF 표 30개를 300 DPI PNG로 바꾼 뒤 Tesseract PSM 6·11이 숫자 항목을 얼마나 맞히는지 비교한 결과입니다.
    PSM 11은 숫자 452/480과 합계 30/30을 맞췄지만, 숫자 전체 exact 문서는 11/30개였습니다.

    이 글은 PDF를 엑셀로 “변환하는 법”이 아니라, PDF 표에서 뽑은 숫자를 다음 데이터 처리 단계에 넘겨도 되는지 확인하는 실험입니다. 합성 한·영 PDF 표 30개에서 Tesseract의 페이지 분할 설정인 PSM 11은 숫자 452/480개를 맞췄지만, 숫자 필드가 전부 맞은 문서는 11/30개뿐이었습니다. PSM 6은 159/480개였습니다. 이 결과가 주는 판단은 하나입니다. 중요한 숫자를 OCR 출력만 보고 자동 입력으로 넘기면 안 됩니다.

    표가 들어간 PDF 30개를 Tesseract에 직접 넣은 첫 실행은 숫자를 읽기 전에 멈췄습니다. PSM 6과 PSM 11 모두 Leptonica의 Pdf reading is not supported 오류로 30개 파일에서 실패했습니다. 이 실패는 별도 기록으로 남기고, 같은 합성 PDF를 300 DPI PNG로 래스터화한 별도 실험을 새로 실행했습니다.

    이 글의 숫자는 실제 청구서나 영수증에서 나온 값이 아닙니다. 공개 가능한 한국어·영어 혼합 표를 자체 생성한 30개 image-only PDF에서만 측정했습니다. PDF를 CSV나 XLSX로 안전하게 바꿀 수 있다는 주장은 여기서 하지 않습니다.

    무엇을 확인하려 했나

    OCRmyPDF 공식 문서는 스캔 PDF에 검색 가능한 OCR 텍스트 레이어를 더한다고 설명합니다. 이번에는 OCRmyPDF를 실행하지 않았고, 그 텍스트 레이어의 표 행 구조나 숫자 정확도도 검증하지 않았습니다. Ghostscript로 PDF를 PNG로 바꾼 뒤 Tesseract의 평문 출력에 남은 숫자 토큰만 셌습니다.

    Tesseract 공식 문서는 PSM 6을 단일 균일 텍스트 블록, PSM 11을 순서가 정해지지 않은 sparse text로 설명합니다. 사전 가설은 규칙선이 있는 표 10개에서 PSM 6의 숫자 정확도가 PSM 11보다 5%p 이상 높고, 전체 코퍼스에서는 적어도 한 설정에 오류가 남는다는 것이었습니다. 문서 확인일은 2026-08-25입니다.

    어떻게 돌렸나

    이번 비교는 PDF를 300 DPI PNG로 바꾼 뒤 PSM 6과 PSM 11로 숫자를 추출한 결과에 한정했습니다.

    항목 고정 조건
    입력 문서 이미지로만 만든 합성 PDF 30개. 문서마다 숫자 16개와 합계 1개가 있으며, 실제 청구서·영수증은 포함하지 않았습니다.
    사전 확인 구간 규칙선이 있는 표 10개, 숫자 필드 160개
    래스터화 Ghostscript 10.07.0으로 300 DPI PNG를 만들고, 첫 페이지를 한 장씩 처리
    OCR 설정 Tesseract 5.5.2, 한국어·영어, 페이지 분할 모드 PSM 6과 PSM 11
    숫자 비교 OCR 결과에서 숫자만 꺼내 미리 적어 둔 정답표와 순서대로 대조했습니다. 문자나 숫자를 손으로 고치지 않았습니다.
    환경 Apple M4 Max, 통합 메모리 64GB, macOS 26.6.2 (25G83), Python 3.14.6
    반복 첫 실행은 예열로 빼고, 설정별로 30문서를 5회 처리했습니다. 같은 30문서를 반복한 것이므로 150개 문서의 독립 표본은 아닙니다.
    난수 명시적 seed 없음. 실행 중 새 표본 추출은 하지 않았습니다.

    실무에서는 중요한 숫자를 원본과 직접 대조하고, 숫자가 전부 맞은 문서 비율을 먼저 봐야 합니다. 이번처럼 11/30이면 OCR 출력을 자동 입력으로 넘기면 안 됩니다.

    합성 PDF 30개, 정답표, 실행 코드와 새 실행 결과는 공개 재현 저장소의 PDF OCR 실험에 있습니다. 이 글의 수치와 같은 452/480, 11/30을 다시 얻은 첫 공개 실행은 재실행 기록에서 볼 수 있습니다.

    결과

    Ghostscript는 30개 PDF를 300 DPI PNG로 7.049567초에 렌더했고 실패는 0개였습니다. 이 한 번의 래스터화 시간은 아래의 반복 OCR 시간에 넣지 않았습니다.

    숫자 일치율의 단위는 PDF 30개와 숫자 항목 480개입니다. 예열 뒤 다섯 번의 결과는 설정별로 모두 같았습니다. 따라서 PSM 6은 33.12% ± 0.00%p, PSM 11은 94.17% ± 0.00%p였습니다. 같은 입력을 다섯 번 반복한 결과일 뿐, 문서 150개의 독립 표본은 아닙니다.

    설정 숫자 일치 숫자 일치율 합계 일치 빠진 숫자 추가 숫자 모든 숫자가 맞은 PDF
    PSM 6 159/480 33.12% 10/30 321 31 0/30
    PSM 11 452/480 94.17% 30/30 28 52 11/30

    사전에 따로 본 규칙선 표 10개에서는 PSM 6이 0/160(0.00%), PSM 11이 160/160(100.00%)이었습니다.

    시간은 첫 예열 실행을 뺀 뒤, 30문서를 다섯 번 처리한 결과의 표본 표준편차입니다.

    설정 30문서 평균 시간 표본 표준편차 문서당 평균 시간
    PSM 6 13.620999초 0.151351초 0.454033초
    PSM 11 14.504418초 0.269535초 0.483481초

    합성 PDF 표 30개를 300 DPI PNG로 바꾼 뒤 Tesseract PSM 6·11이 숫자 항목을 얼마나 맞히는지 비교한 세로 결과 요약입니다.
    PSM 11은 숫자 452/480과 합계 30/30을 맞췄지만, 숫자 전체 exact 문서는 11/30개였습니다.

    뭐가 달랐나

    사전에 예상한 방향은 나오지 않았습니다. 규칙선 표 10개에서 PSM 6은 PSM 11보다 100.00%p 낮았고, 전체 30개 문서에서는 두 설정 모두 숫자 오류가 남았습니다. 사전 가설은 지지되지 않았습니다.

    초기 direct-PDF 실패와 여기의 숫자 정확도는 다른 질문입니다. 전자는 이 장비의 Tesseract 5.5.2·Leptonica 입력 경로가 PDF를 읽지 못했다는 실행 사실이고, 후자는 Ghostscript로 래스터화한 뒤 두 PSM이 이 합성 코퍼스에서 남긴 숫자 토큰을 비교한 결과입니다. 앞 실험의 실패 출력을 성공률이나 속도에 섞지 않았습니다.

    PSM 11이 이 조건에서 더 높은 숫자 일치율을 보였지만, 이 실험은 이유를 분리하지 않았습니다. 페이지 분할 방식, 표의 규칙선, 글자 크기, 기울어짐, 노이즈 중 무엇이 차이를 만들었는지는 아직 모릅니다. OCRmyPDF, Power Query PDF 연결, 상용 OCR의 결과도 이번 표에 없습니다.

    남은 것

    이 결과는 이미지로만 만든 합성 PDF, 300 DPI, Apple M4 Max 한 대, 한국어·영어, PSM 6·11 두 설정에 한정됩니다. 실제 청구서·영수증, 손글씨, 여러 페이지 PDF, 다른 글꼴, 자동 CSV 행 복원, XLSX 작성은 측정하지 않았습니다. PSM 11이 합계를 30/30 맞췄어도 모든 숫자가 맞은 PDF는 11/30이므로, 이 결과만으로 표를 그대로 옮길 수 있다고 판단할 수 없습니다.

    다섯 번의 결과는 설정별로 모두 같았습니다. 이 0 분산은 같은 문서와 같은 설정을 반복했을 때의 일관성일 뿐, 다른 PDF에서도 같은 정확도가 나온다는 뜻은 아닙니다.

    합성 입력·실행 코드·새 실행 결과는 공개했습니다. 다만 이 글의 원래 로컬 실행보다 먼저 가설이 Git에 기록됐다는 증거는 남아 있지 않습니다.

    다음 비교는 동의를 받은 비식별 실제 문서와 사전에 고정한 기준을 별도 실험으로 준비한 뒤에 하겠습니다.

    OCR 결과를 CSV로 복원하는 단계는 별도입니다. CSV가 생긴 뒤에는 Excel 직접 열기 경계가 또 남습니다. 이번 실험은 CSV를 만들지 않았습니다.

    728x90
    반응형
Designed by Tistory.