ReadDocumentAdvanced를 사용하여 점선 테두리 테이블 감지
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")

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


