스캔 OCR 실패 원인과 이미지 전처리로 텍스트 추출 성공하는 법
스캔한 종이 문서에서 OCR이 텍스트를 제대로 인식하지 못한다면 원인은 보통 이미지 품질입니다. 해상도가 낮거나 기울어져 있거나 배경 노이즈가 많으면 OCR 엔진이 글자를 판독할 수 없습니다.
OCR이 실패하는 주요 조건
OCR 엔진은 스캔 이미지에서 글자의 윤곽을 찾아 패턴을 분석합니다. 다음 조건에서 인식률이 급격히 떨어집니다.
해상도 부족: 300 DPI 미만으로 스캔하면 글자의 세부 형태가 뭉개집니다. 특히 한글처럼 획이 복잡한 문자는 200 DPI 이하에서 거의 인식되지 않습니다. 72 DPI나 96 DPI는 화면 표시용이므로 OCR에는 부적합합니다.
기울기와 왜곡: 문서가 2도 이상 기울어져 있으면 텍스트 라인 검출이 실패합니다. 스캐너 유리면에 종이를 제대로 정렬하지 않았거나 사진으로 찍은 경우 이 문제가 발생합니다. 원근 왜곡(책을 펼쳐 찍었을 때 가운데가 휘는 현상)도 같은 결과를 만듭니다.
배경 노이즈: 종이가 오래되어 누렇거나 얼룩이 있으면 OCR 엔진이 그것을 글자로 오인합니다. 형광펜이나 밑줄, 여백의 손글씨도 노이즈로 작용합니다. 스캔할 때 밝기를 너무 높이거나 낮추면 글자와 배경의 대비가 사라져 판독이 불가능해집니다.
압축 손실: JPEG로 저장하면 압축 과정에서 글자 경계가 흐려집니다. 특히 JPEG 품질을 70% 이하로 설정하면 글자 주변에 블록 노이즈가 생겨 인식률이 떨어집니다.
전처리로 인식률을 높이는 방법
OCR 실행 전에 이미지를 보정하면 대부분의 문제를 해결할 수 있습니다. 사용하는 도구에 따라 방법이 다릅니다.
해상도 조정: 원본을 300 DPI 이상으로 다시 스캔합니다. 이미 스캔한 파일은 소프트웨어로 해상도를 올려도 효과가 없습니다. 리샘플링은 존재하지 않는 정보를 만들어낼 수 없기 때문입니다. 처음부터 300~400 DPI로 스캔해야 합니다.
기울기 보정(deskew): 대부분의 OCR 프로그램은 자동 기울기 보정 기능을 제공합니다. Adobe Acrobat Pro에서는 '도구 > 스캔 및 OCR > 텍스트 인식 > 이 파일에서'를 선택하면 자동으로 보정됩니다. Python을 사용한다면 OpenCV의 getRotationMatrix2D로 각도를 계산해 회전시킬 수 있습니다. Tesseract OCR은 최신 버전에서 자동 보정을 지원하지만 왜곡이 심하면 수동으로 먼저 처리해야 합니다.
이진화(binarization): 이미지를 흑백 두 가지 색으로만 변환하면 배경 노이즈가 제거됩니다. ImageMagick에서는 명령어 convert input.jpg -threshold 50% output.png로 처리합니다. Photoshop에서는 '이미지 > 조정 > 임계값'을 사용합니다. 임계값은 보통 40~60% 사이에서 문서마다 조정해야 합니다. 너무 낮으면 글자가 끊기고 너무 높으면 배경이 남습니다.
노이즈 제거: 얼룩이나 점을 제거하려면 median filter를 적용합니다. GIMP에서는 '필터 > 잡티 제거 > 중간값'을 선택하고 반경을 1~2픽셀로 설정합니다. Python OpenCV에서는 cv2.medianBlur(image, 3)을 사용합니다. 반경을 너무 크게 하면 글자 자체가 뭉개지므로 주의해야 합니다.
대비 향상: 흐릿한 스캔본은 대비를 높여야 합니다. ImageMagick에서 convert input.jpg -normalize -contrast output.png 명령으로 처리합니다. Acrobat에서는 '도구 > 인쇄 제작 > 이미지 편집'에서 대비를 조정할 수 있습니다.
포맷별 처리 방법
PDF 파일: 이미 PDF로 저장되어 있다면 Acrobat Pro나 온라인 도구로 직접 OCR을 실행합니다. 무료 도구로는 OCRmyPDF를 사용할 수 있습니다. 명령어는 ocrmypdf --deskew --clean input.pdf output.pdf입니다. 여러 페이지가 있으면 일괄 처리가 가능합니다.
이미지 파일(JPG, PNG): 단일 페이지라면 Tesseract를 직접 사용합니다. tesseract input.png output -l kor로 한글 인식을 실행합니다. 여러 장이면 ImageMagick으로 전처리 후 PDF로 결합한 다음 OCR을 적용하는 것이 효율적입니다.
TIFF 파일: 스캐너가 생성한 다중 페이지 TIFF는 압축 설정을 확인해야 합니다. LZW나 ZIP 압축은 무손실이므로 OCR에 적합하지만 JPEG 압축이 적용된 TIFF는 다시 무손실 포맷으로 변환해야 합니다.
워크플로에서 피해야 할 실수
중복 압축: 스캔 후 JPEG로 저장하고 다시 PDF로 변환하면 압축이 두 번 적용되어 품질이 크게 떨어집니다. 스캐너 설정에서 처음부터 PDF나 PNG로 저장하도록 해야 합니다.
과도한 보정: 샤프닝 필터를 여러 번 적용하거나 대비를 극단적으로 높이면 글자 주변에 헤일로 효과가 생겨 오히려 인식률이 떨어집니다. 전처리는 한 가지씩 적용하고 결과를 확인하면서 진행해야 합니다.
언어 설정 누락: Tesseract나 Acrobat에서 OCR 언어를 지정하지 않으면 영어로 인식을 시도합니다. 한글 문서는 반드시 언어 팩을 설치하고 -l kor 옵션을 지정해야 합니다.
자주 묻는 질문
Q: 300 DPI로 스캔했는데도 인식이 안 됩니다 A: 스캔 해상도뿐 아니라 원본 인쇄 품질도 영향을 줍니다. 복사본을 다시 복사한 문서나 팩스 수신본은 글자가 이미 흐릿하므로 OCR이 어렵습니다. 이진화 임계값을 조정하거나 원본을 다시 확보해야 합니다.
Q: 손글씨도 OCR로 인식할 수 있나요 A: 일반적인 OCR 엔진은 인쇄된 글자만 인식합니다. 손글씨는 필적 인식(handwriting recognition) 전용 엔진이 필요하며 인쇄물보다 정확도가 낮습니다. Google Cloud Vision API나 Azure Computer Vision이 손글씨를 지원합니다.
Q: 여러 파일을 한 번에 전처리할 수 있나요 A: ImageMagick이나 Python 스크립트로 일괄 처리가 가능합니다. ImageMagick에서는 mogrify -path output/ -threshold 50% *.jpg 명령으로 폴더 안의 모든 파일을 처리합니다.
문서 관리 효율화
전처리와 OCR을 반복하는 작업은 시간이 많이 듭니다. 대량의 스캔 문서를 다룬다면 자동화 도구를 고려해야 합니다. OmniDesk는 업로드한 파일의 포맷을 자동으로 분석하고 최적화된 변환 경로를 제공하므로 수동 전처리 단계를 줄일 수 있습니다. 다양한 파일 형식 간 변환에 대한 자세한 정보는 포맷 가이드에서 확인할 수 있습니다. 가장 확실한 방법은 처음부터 적절한 설정으로 스캔하고 무손실 포맷으로 보관하는 것입니다.