감사 추적이 가능한 문서 OCR
대부분의 OCR은 그냥 믿을 수밖에 없는 텍스트만 돌려줍니다. space-ocr는 모든 값을 검증된 페이지 위치 정보 — 바운딩 박스, 꼭짓점, 매칭 비율 — 와 함께 반환하므로, 어떤 필드든 그 값이 나온 픽셀까지 거슬러 추적할 수 있습니다.
문서에서 데이터를 뽑아내는 건 데모로 보여주기는 쉽지만 신뢰하기는 어렵습니다. 모델이 청구서를 읽고 total: 2,045 를 돌려주면, 그 어떤 신뢰도 점수로도 시원하게 답이 안 나오는 질문 하나가 남죠. 이게 정말 페이지에 인쇄된 숫자일까, 아니면 모델이 만들어낸 값일까? 한 번 슬쩍 조회하는 정도라면 상관없습니다. 하지만 회계, 보험 청구 처리, 컴플라이언스처럼 나중에 감사를 받게 되는 업무라면 "모델을 믿어라"는 건 통제 수단이 아닙니다.
감사 추적(audit trail) 이 이 문제를 해결합니다. 값만 덜렁 돌려주는 게 아니라, 모든 필드가 검증된 페이지 위치와 함께 돌아옵니다. 그래서 사람이든 다른 시스템이든 그 값이 읽힌 정확한 픽셀로 바로 이동해 직접 확인할 수 있죠. 이게 바로 그냥 답과, 근거를 댈 수 있는 답의 차이입니다.
직접 확인해 보세요: 모든 값이 원본으로 거슬러 갑니다
아래 필드 위에 마우스를 올려 보세요. 영수증에 표시되는 박스가 바로 그 값이 읽힌 위치이며, 각 필드는 자기만의 매칭 비율을 가지고 있습니다.

Each value with a box carries a verified on-page location — bbox + 4-point vertices + match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.
"검증된 위치"란 실제로 무슨 뜻인가
space-ocr는 추출된 모든 값과 함께 세 가지를 반환합니다.
bbox—{ xmin, ymin, xmax, ymax }형태의 축 정렬 사각형으로, 0–1000 normalized 격자(0,0 = 좌상단, 1000,1000 = 우하단) 위에 표현되어 이미지의 픽셀 크기와 무관합니다.vertices— 순서가 정해진 네 개의 점{x, y}(좌상단 → 우상단 → 우하단 → 좌하단)로, 문서의 기울기를 따라가는 방향이 있는 박스를 이룹니다. 그래서 비스듬히 찍은 휴대폰 사진도 깔끔하게 박스가 잡힙니다.match_ratio— 그 값의 글자 중 실제로 페이지에서 위치가 확인된 글자의 비율(0–1)입니다. 0.85 이상이면 확실하게 매칭된 필드로 간주하며,1.0은 모든 글자가 발견됐다는 뜻입니다.
위치 정보가 값과 함께 따라다니기 때문에 결과는 블랙박스가 아닙니다. 박스를 그려서 보여주거나, 좌표를 인용하거나, 표시된 필드를 OCR 재실행 없이 다시 확인할 수 있습니다.
좌표는 모델 말만 믿고 정하지 않습니다. 언어 모델은 각 값의 텍스트와, 어떤 단어 토큰을 사용했는지에 대한 힌트만 반환할 뿐 박스 자체는 절대 내놓지 않습니다. 그러면 엔진이 그 텍스트를 비전 OCR이 페이지에서 실제로 검출한 심볼과 글자 단위로 대조합니다. 그래서 박스는 그 글자들이 실제로 발견된 진짜 픽셀 위에 떨어지고, 각 값에는 매칭 비율(match ratio) — 글자 중 실제로 위치가 확인된 비율 — 이 매겨집니다. 모델의 토큰 힌트는 노이즈가 섞일 수 있어서(반복되는 행끼리 힌트가 뒤바뀌기도 합니다) 무턱대고 믿지 않고, 열·행 일관성 검사로 검증합니다. 핵심은 AI가 틀릴 수 없다는 게 아니라, 모든 값을 페이지에 대조해 다시 확인하고, 얼마나 잘 매칭됐는지 알려주는 점수까지 함께 준다는 것입니다.
값을 클릭하면 픽셀로 바로 이동
앱에서는 이게 하나의 상호작용이 됩니다. 셀을 클릭하면 원본 이미지에서 그 값이 나온 정확한 박스가 강조되고, 확대된 크롭과 연결선이 함께 표시되죠. 배치 작업을 빠르게 점검하기에 이만한 방법이 없습니다. 문서 전체를 훑을 필요 없이 시선이 곧장 해당 지점으로 향하니까요.
수정 내역도 감사할 수 있습니다
감사 추적은 기계가 내놓은 출력만의 이야기가 아닙니다. 사람이 무엇을 바꿨는지도 포함됩니다. 셀을 수정하면 space-ocr는 여러분의 수정 내용을 원본 OCR 값과 별도로 저장합니다. Original 툴팁이 엔진이 처음 읽은 값을 항상 보여주므로, 검토자는 기계가 읽은 값과 사람이 덮어쓴 값을 나란히 비교할 수 있습니다.
API에서도, 모든 값에 들어 있습니다
이건 UI에만 있는 기능이 아닙니다. POST /ocr/fields 는 추출된 모든 값에 동일한 bbox, vertices, match_ratio, bbox_source 를 반환하며, field_bboxes 맵이 필드별 좌표를 제공합니다. 저장된 시트를 GET /view 로 조회하면 박스가 기본으로 함께 따라옵니다. 더 가벼운 페이로드를 원할 때만 boxes=0 을 붙이면 됩니다.
{
"status": "success",
"data": {
"total": "2,045",
"field_bboxes": {
"total": {
"bbox": { "xmin": 595, "ymin": 974, "xmax": 781, "ymax": 1000 },
"vertices": [
{ "x": 594, "y": 975 }, { "x": 781, "y": 972 },
{ "x": 781, "y": 998 }, { "x": 595, "y": 1000 }
],
"match_ratio": 0.93,
"bbox_source": "vision_symbol_match"
}
}
}
}bbox_source 는 각 좌표가 어떻게 도출됐는지 알려줍니다. vision_symbol_match 는 일반적인 글자 매칭 경로(실제 match_ratio 를 가짐)이고, token_id 는 단어 토큰 힌트가 사용됐다는 뜻이며, low_confidence 는 한 번 들여다볼 만한 약한 매칭을 표시합니다. 로그로 남기거나, 필터링하거나, 검토자에게 노출할 수 있는 메타데이터입니다.
실무에서 값을 검증하는 방법
- 추출 결과 열기시트를 열거나 GET /view 를 호출하세요. 각 값에는 bbox, vertices, match_ratio 가 함께 들어 있습니다.
- 값 클릭하기셀을 클릭하면 그 값이 읽힌 원본 이미지의 정확한 영역이 강조됩니다.
- 매칭 비율 확인하기match_ratio 가 1.0이면 모든 글자의 위치가 확인됐다는 뜻이고, 0.85 미만이면 좀 더 자세히 들여다볼 만한 값으로 표시됩니다.
- 필요하면 수정하기셀을 수정해 값을 덮어쓰세요. 원본 OCR 값은 감사 추적을 위해 Original 툴팁 아래에 그대로 보존됩니다.