ReadDocumentAdvanced를 사용하여 점선 테두리 테이블 감지

This article was translated from English: Does it need improvement?
Translated
View the article in English

ReadDocumentAdvanced는 셀별로 테이블 데이터를 추출하지만, 테두리가 점선 또는 대시로 이루어진 테이블(예: border: 1px dotted black)은 감지할 수 없습니다. 페이지의 텍스트는 여전히 읽을 수 있지만, 엔진이 테이블을 인식하지 못하면 테이블 객체에 접근하는 것도 실패합니다.

점선 테이블이 있는 문서에 대해 ReadDocumentAdvanced를 호출하고 그 셀을 읽으면 다음과 같이 예외가 발생합니다:

Unhandled exception. System.InvalidOperationException: Sequence contains no elements

점 사이의 간격이 테두리를 불연속적인 세그먼트로 나누기 때문에, OCR 엔진은 테이블 경계로 취급할 일관된 윤곽선을 볼 수 없습니다. Tables가 감지되지 않으면 Tables.First()는 반환할 것이 없습니다.

해결책

처리 전에 Dilate() 필터를 적용하십시오. 팽창은 이미지의 어두운 픽셀을 확장하여 점들 사이의 간격을 메워 테두리가 하나의 고체 선으로 읽히도록 합니다. 그러면 엔진이 테이블 객체를 감지하고 그 셀을 반환할 수 있습니다.

1. 테이블 읽기를 활성화하고 입력 불러오기

엔진이 구조화된 테이블 출력을 구축하도록 ReadDataTables를 켜고, 그런 다음 이미지를 불러오십시오.

var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
Imports IronTesseract

Dim ocr As New IronTesseract()
ocr.Configuration.ReadDataTables = True
Dim input As New OcrInput()
input.Load("image-20250408-144240.png")
$vbLabelText   $csharpLabel

점선 테두리가 있는 입력 테이블, OCR이 감지하지 못함

2. 읽기 전에 팽창

점선 테두리를 연속적인 윤곽선으로 병합하기 위해 입력에 Dilate()를 호출한 다음 ReadDocumentAdvanced을 실행하십시오.

input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(res.Tables.First().CellInfos.First().CellText);
input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(res.Tables.First().CellInfos.First().CellText);
Dim res = ocr.ReadDocumentAdvanced(input)
input.Dilate()
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png)
Console.WriteLine(res.Tables.First().CellInfos.First().CellText)
$vbLabelText   $csharpLabel

Dilate()는 엔진이 추적할 수 있는 고체 테두리로 시각적 점선을 변환하므로 res.Tables가 이제 채워지고 셀 텍스트가 깨끗하게 읽힙니다. SaveAsImages 호출은 선택 사항입니다; 그것은 팽창된 이미지를 검사하여 테두리가 예상대로 닫히는지 확인할 수 있게 합니다.

Dilate() 후 점선이 연결된 테이블

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

시작할 준비 되셨나요?
Nuget 다운로드 6,136,090 | 버전: 2026.7 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronOcr
샘플을 실행하세요 이미지가 검색 가능한 텍스트로 바뀌는 것을 확인해 보세요.