space ocr
가이드아티클요금문서

감사 추적이 가능한 문서 OCR

대부분의 OCR은 그냥 믿을 수밖에 없는 텍스트만 돌려줍니다. space-ocr는 모든 값을 검증된 페이지 위치 정보 — 바운딩 박스, 꼭짓점, 매칭 비율 — 와 함께 반환하므로, 어떤 필드든 그 값이 나온 픽셀까지 거슬러 추적할 수 있습니다.

문서에서 데이터를 뽑아내는 건 데모로 보여주기는 쉽지만 신뢰하기는 어렵습니다. 모델이 청구서를 읽고 total: 2,045 를 돌려주면, 그 어떤 신뢰도 점수로도 시원하게 답이 안 나오는 질문 하나가 남죠. 이게 정말 페이지에 인쇄된 숫자일까, 아니면 모델이 만들어낸 값일까? 한 번 슬쩍 조회하는 정도라면 상관없습니다. 하지만 회계, 보험 청구 처리, 컴플라이언스처럼 나중에 감사를 받게 되는 업무라면 "모델을 믿어라"는 건 통제 수단이 아닙니다.

감사 추적(audit trail) 이 이 문제를 해결합니다. 값만 덜렁 돌려주는 게 아니라, 모든 필드가 검증된 페이지 위치와 함께 돌아옵니다. 그래서 사람이든 다른 시스템이든 그 값이 읽힌 정확한 픽셀로 바로 이동해 직접 확인할 수 있죠. 이게 바로 그냥 답과, 근거를 댈 수 있는 답의 차이입니다.

직접 확인해 보세요: 모든 값이 원본으로 거슬러 갑니다

아래 필드 위에 마우스를 올려 보세요. 영수증에 표시되는 박스가 바로 그 값이 읽힌 위치이며, 각 필드는 자기만의 매칭 비율을 가지고 있습니다.

Receipts with extracted-field bounding boxes
Verified fields
KINSHO · 合計 2,045
ライフ · 合計 4,286

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 재실행 없이 다시 확인할 수 있습니다.

✓ Verified

좌표는 모델 말만 믿고 정하지 않습니다. 언어 모델은 각 값의 텍스트와, 어떤 단어 토큰을 사용했는지에 대한 힌트만 반환할 뿐 박스 자체는 절대 내놓지 않습니다. 그러면 엔진이 그 텍스트를 비전 OCR이 페이지에서 실제로 검출한 심볼과 글자 단위로 대조합니다. 그래서 박스는 그 글자들이 실제로 발견된 진짜 픽셀 위에 떨어지고, 각 값에는 매칭 비율(match ratio) — 글자 중 실제로 위치가 확인된 비율 — 이 매겨집니다. 모델의 토큰 힌트는 노이즈가 섞일 수 있어서(반복되는 행끼리 힌트가 뒤바뀌기도 합니다) 무턱대고 믿지 않고, 열·행 일관성 검사로 검증합니다. 핵심은 AI가 틀릴 수 없다는 게 아니라, 모든 값을 페이지에 대조해 다시 확인하고, 얼마나 잘 매칭됐는지 알려주는 점수까지 함께 준다는 것입니다.

값을 클릭하면 픽셀로 바로 이동

앱에서는 이게 하나의 상호작용이 됩니다. 셀을 클릭하면 원본 이미지에서 그 값이 나온 정확한 박스가 강조되고, 확대된 크롭과 연결선이 함께 표시되죠. 배치 작업을 빠르게 점검하기에 이만한 방법이 없습니다. 문서 전체를 훑을 필요 없이 시선이 곧장 해당 지점으로 향하니까요.

아무 셀이나 클릭 → 원본 이미지에서 해당 영역이 환하게 강조됩니다.

수정 내역도 감사할 수 있습니다

감사 추적은 기계가 내놓은 출력만의 이야기가 아닙니다. 사람이 무엇을 바꿨는지도 포함됩니다. 셀을 수정하면 space-ocr는 여러분의 수정 내용을 원본 OCR 값과 별도로 저장합니다. Original 툴팁이 엔진이 처음 읽은 값을 항상 보여주므로, 검토자는 기계가 읽은 값과 사람이 덮어쓴 값을 나란히 비교할 수 있습니다.

셀을 수정해도 원본 OCR 값은 Original 툴팁 아래에 그대로 보존됩니다.

API에서도, 모든 값에 들어 있습니다

이건 UI에만 있는 기능이 아닙니다. POST /ocr/fields 는 추출된 모든 값에 동일한 bbox, vertices, match_ratio, bbox_source 를 반환하며, field_bboxes 맵이 필드별 좌표를 제공합니다. 저장된 시트를 GET /view 로 조회하면 박스가 기본으로 함께 따라옵니다. 더 가벼운 페이로드를 원할 때만 boxes=0 을 붙이면 됩니다.

POST /ocr/fields → 응답 (일부 생략)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "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 는 한 번 들여다볼 만한 약한 매칭을 표시합니다. 로그로 남기거나, 필터링하거나, 검토자에게 노출할 수 있는 메타데이터입니다.

실무에서 값을 검증하는 방법

  1. 추출 결과 열기
    시트를 열거나 GET /view 를 호출하세요. 각 값에는 bbox, vertices, match_ratio 가 함께 들어 있습니다.
  2. 값 클릭하기
    셀을 클릭하면 그 값이 읽힌 원본 이미지의 정확한 영역이 강조됩니다.
  3. 매칭 비율 확인하기
    match_ratio 가 1.0이면 모든 글자의 위치가 확인됐다는 뜻이고, 0.85 미만이면 좀 더 자세히 들여다볼 만한 값으로 표시됩니다.
  4. 필요하면 수정하기
    셀을 수정해 값을 덮어쓰세요. 원본 OCR 값은 감사 추적을 위해 Original 툴팁 아래에 그대로 보존됩니다.
OCR 감사 추적(audit trail)이란 무엇인가요?
감사 추적이란 추출된 모든 값을 원본 문서 위의 정확한 위치까지 거슬러 추적할 수 있다는 뜻입니다. space-ocr에서는 각 값이 바운딩 박스, 방향이 있는 네 개의 꼭짓점, 그리고 매칭 비율과 함께 제공됩니다. 그래서 결과를 그냥 믿는 게 아니라 인용하고 다시 확인할 수 있습니다.
AI가 바운딩 박스를 그냥 지어낼 수도 있지 않나요?
모델은 좌표를 반환하지 않습니다. 값의 텍스트와, 어떤 단어를 사용했는지에 대한 힌트만 줄 뿐입니다. 그러면 엔진이 그 텍스트를 비전 OCR이 페이지에서 실제로 검출한 심볼과 글자 단위로 대조하고, 그중 얼마나 발견됐는지를 match_ratio로 보고합니다. 모델의 토큰 힌트 역시 무턱대고 믿지 않고 열·행 일관성으로 교차 검증합니다. 그래서 박스는 모델이 '그럴 것이라 생각하는' 위치가 아니라, 값의 글자들이 실제로 발견된 위치를 반영합니다. 페이지에 없는 값은 높은 match_ratio를 얻을 수 없습니다.
좌표는 픽셀 단위로 반환되나요?
API는 0–1000 normalized 격자(0,0 좌상단부터 1000,1000 우하단까지)로 반환하며, 이미지 해상도와 무관합니다. 픽셀로 변환하려면 pixel_x = bbox_x / 1000 × image_width 를 사용하세요.
검증에 추가 비용이 들거나 OCR이 다시 실행되나요?
아니요. 박스는 표준 응답의 일부이며, 저장된 시트를 GET /view 로 조회해도 OCR이 다시 실행되거나 비용이 청구되지 않습니다. 박스가 필요 없을 때는 boxes=0 으로 더 가벼운 페이로드를 받을 수 있습니다.

여러분의 문서로 직접 써보세요

무료 플랜 — 월 100회 스캔, 신용카드 불필요. 모든 값이 페이지 위치 정보와 함께 돌아옵니다.

관련