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

텍스트 더미가 아니라 구조화 필드를 돌려주는 이미지 OCR

space-ocr로 JPEG·PNG 등 이미지를 OCR하세요. 필요한 필드를 선언하면 값마다 box·quad 좌표가 붙고, 확인이 필요한 값은 data.review.flagged 목록으로 돌아옵니다.

대부분의 이미지 OCR은 평범한 텍스트 덩어리를 던져주고 거기서 멈춥니다. 영수증을 찍어 돌려도 돌아오는 건 줄들의 묶음이라, 결국 읽고, 나누고, 맞는 열에 다시 입력하게 됩니다. 페이지에서는 한눈에 들어오던 구조가 사라져 버리죠.

space-ocr는 이미지를 구조화 필드로 읽어냅니다 — 상호는 여기, 날짜는 저기, 합계는 저쪽, 품목은 행으로. 값에는 이미지에서 읽어낸 정확한 위치가 함께 옵니다. 축에 정렬된 box 와 네 점짜리 quad 가 data.cells[path] 에 담기기 때문입니다. 그리고 지면과 대조가 어긋난 값은 사유와 함께 data.review.flagged 에 올라옵니다. 그냥 믿어야 하는 숫자가 아니라, 확인할 작업 목록이 돌아오는 셈입니다.

직접 검증할 수 있는 실제 추출 결과

이건 한 장의 이미지 — 영수증 두 개를 찍은 사진 — 를 필드로 읽은 것입니다. 아래 어느 값이든 마우스를 올리면, 이미지 위의 박스가 그 값을 읽어낸 지점입니다. 여기 있는 숫자·박스·문자 일치율은 모두 실제 파싱 결과에서 읽어온 것으로, 목업이 아닙니다. 일치율은 값의 문자를 지면에서 얼마나 찾아냈는지 보여 주는 보조 근거이며, 합격·불합격을 가르는 기준값이 아닙니다.

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

Each value with a box carries a verified on-page location — in data.cells[path], that is box + 4-point quad + evidence.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.

세 가지 형태, 같은 계약
같은 한 장을 이름 붙은 필드로, 레이아웃을 살린 마크다운으로(POST /ocr/markdown), 또는 읽기 순서를 정리한 원문 텍스트로(POST /ocr/text) 받을 수 있습니다. 셋 다 values / cells / review / image 라는 같은 그릇으로 답하므로, 어느 형태를 골라도 좌표와 verified 판정은 같은 방식으로 다룹니다.
텍스트 더미가 아니라 구조화 필드
이미지는 data.values 아래에 상호·날짜·합계·품목 같은 이름 붙은 값과 행으로 돌아옵니다. 요청한 스키마 그대로의 모양이라, 직접 잘라야 하는 긴 한 줄짜리 문자열이 아닙니다.
모든 값에 위치 정보
data.cells[path] 에는 축에 정렬된 box(xmin/ymin/xmax/ymax)와 네 점짜리 quad 가 들어 있고, 둘 다 0–1000 정규화 좌표입니다. 픽셀 환산에 쓰는 크기는 data.image 가 알려 줍니다(x = box.xmin / 1000 × width).
휴대폰 사진도 OK
EXIF 방향은 판독 전에 반영되므로 반환 좌표가 화면에 보이는 사진과 일치합니다. 기울기 보정은 하지 않아 quad 는 손으로 찍은 사진의 기울기를 따라가고, 아주 큰 사진은 먼저 축소될 수 있습니다. 좌표의 기준은 보낸 파일이 아니라 data.image 입니다.
필요한 필드를 선언
fields 배열에 name 과 type 을 적고, 필요하면 required·pattern·min/max·enum·label·near 를 덧붙여 보냅니다. 문서 쪽에서 시작하고 싶다면 autoFields 를 true 로 두면 서류에서 뽑은 필드 이름이 돌아옵니다.
합계만이 아니라 품목까지
children 을 가진 array 필드는 반복 행으로 돌아오고, 셀마다 자기 경로와 위치를 유지합니다. items[0].amount 는 셀 하나를, items[0] 은 그 행 전체를 가리킵니다.
깔끔한 내보내기
UTF-8 BOM CSV(Excel·한중일 안전, 품목 펼침)와, 비동기 작업(POST /upload → GET /jobs/{jobId})·HMAC 서명 웹훅을 갖춘 REST API의 JSON.

space-ocr의 이미지 OCR 작동 방식

이미지를 URL 또는 순수 base64로 /ocr/fields 에 보냅니다 — JPEG·PNG·GIF·BMP·TIFF·WebP 가 그대로 읽힙니다. EXIF orientation 은 판독 전에 반영되고, 아주 큰 사진은 긴 변 4000px 까지 축소될 수 있습니다. 실제로 읽은 지면의 크기는 data.image 가 돌려주므로 좌표는 이 크기를 기준으로 환산합니다.

원하는 결과는 fields 배열로 기술합니다. 필드마다 name 과 type(string / number / integer / date / array / object)을 주고, 품목 표에는 children 을 가진 array 필드를 쓰며, 필요하면 required·pattern·min/max·enum 을 선언합니다. 문서에서 출발하고 싶다면 autoFields: true 를 보내고 돌아온 필드 이름부터 쓰면 됩니다. 선언은 모델에 전달되지 않아 판독 자체를 유도하지 않습니다. 선언이 정하는 것은 data.review.flagged 에 무엇이 오르는지, 그리고 결정론적인 data.normalized 층이 무엇을 해석하는지입니다. (PDF 는 웹 앱을 거쳐 각 페이지를 먼저 이미지로 렌더링합니다. API 자체는 이미지를 읽습니다.)

이미지에서 필드 추출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
curl -s https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer $SPACE_OCR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/receipt-photo.jpg",
    "imageType": "url",
    "fields": [
      { "name": "store_name", "type": "string", "required": true },
      { "name": "date", "type": "date", "required": true },
      { "name": "total", "type": "number", "required": true, "min": 0 },
      {
        "name": "items",
        "type": "array",
        "children": [
          { "name": "name", "type": "string" },
          { "name": "price", "type": "number" }
        ]
      }
    ]
  }'

이미지를 OCR하는 방법

  1. 이미지 보내기
    JPEG·PNG·GIF·BMP·TIFF·WebP를 /ocr/fields에 URL 또는 순수 base64로 보내거나, 앱에 끌어다 놓습니다. EXIF 방향은 판독 전에 반영됩니다.
  2. 필드 선언하기
    값마다 name 과 type 을 적은 fields 배열을 보냅니다 — 품목 표에는 children 이 있는 array 필드를 씁니다. autoFields 를 true 로 두고 돌아온 필드 이름부터 시작해도 됩니다.
  3. 구조화 결과 읽기
    업무 데이터는 data.values 에 담깁니다. data.cells 는 경로마다 box·quad 와 verified 판정, evidence 를 돌려주고, data.image 가 그 좌표를 픽셀로 환산하는 기준이 됩니다.
  4. 검토 목록 처리하기
    data.review.flagged 를 순회합니다. 항목마다 path 와 reasons 가 있으니 cells[path] 를 열어 이미지 위에 box 를 그리고, 인쇄된 글자와 값을 맞춰 봅니다. 수정 사항은 원본 OCR 값 옆에 저장됩니다.
  5. 내보내기 또는 조회
    CSV(UTF-8 BOM, 품목 펼쳐짐)를 다운로드하거나, 저장된 시트를 GET /view로 where·sort·select를 써서 조회합니다 — 저장된 행을 읽는 것만으로는 OCR 재실행도 과금도 없습니다.

단순하고 예측 가능한 가격

이미지당 ₩100(부가세 포함), 신용카드 없이 매월 100크레딧 무료입니다. 실패는 과금하지 않습니다. 정액 플랜은 월 크레딧 수·시트·저장공간을 추가합니다.

Free
₩0
  • 100 크레딧/월
  • 3 시트
  • 1 GB 저장공간
무료 — 카드 불필요
Starter
₩39,800/월
  • 500 크레딧/월
  • 15 시트
  • 10 GB 저장공간
무료로 시작
가장 인기
Pro
₩69,800/월
  • 1,100 크레딧/월
  • 시트 무제한
  • 100 GB 저장공간
무료로 시작
space-ocr는 어떤 이미지 포맷을 OCR할 수 있나요?
공개 API는 래스터 이미지를 그대로 읽습니다 — JPEG·PNG·GIF·BMP·TIFF·WebP. 이미지는 자동으로 RGB로 변환됩니다. PDF는 웹 앱을 거쳐 각 페이지를 이미지로 렌더링한 뒤 OCR합니다.
이미지 OCR은 구조화 필드를 주나요, 아니면 그냥 텍스트인가요?
구조화 필드입니다. 이미지는 data.values 아래에 상호·날짜·합계·품목 같은 이름 붙은 값과 행으로, 선언한 스키마 그대로 읽힙니다. 직접 파싱해야 하는 긴 텍스트 덩어리가 아닙니다.
휴대폰으로 찍은 사진도 OCR할 수 있나요?
네. EXIF orientation 은 판독 전에 반영되므로 반환 좌표가 표시되는 사진과 일치합니다. 기울기 보정은 하지 않아 네 점짜리 quad 는 손으로 찍은 사진의 기울기를 따라가고, 그 좌표가 속한 지면 크기는 data.image 가 알려 줍니다.
이미지 OCR이 각 값의 위치를 보존하나요?
네. data.cells 의 경로마다 0–1000 정규화 그리드의 box(xmin/ymin/xmax/ymax)와 네 점짜리 quad 가 붙고, 픽셀 환산에 필요한 크기는 data.image 가 돌려줍니다. cells[path].evidence 에는 대조 근거가 담기며 match_ratio 와, 이 엔드포인트에서는 printed_text(그 좌표에서 읽어낸 원문 글자)도 포함됩니다.
어떤 값을 확인해야 하는지는 어떻게 아나요?
data.review.flagged 를 읽으면 됩니다. 각 항목은 path 와 순위가 매겨진 reasons 배열(text_mismatch·missing·pattern_mismatch·out_of_range 등 문서화된 사유 코드)을 갖고, 검토 건수는 flagged.length 입니다. path 로 cells[path] 를 열어 값 옆에 box 를 그려 대조하세요. 독립적인 두 판독이 같은 오독에 합의할 수도 있으므로 업무 규칙 검증은 그대로 유지하는 편이 좋습니다.
이미지는 API에 어떻게 보내나요?
POST /ocr/fields에 URL(imageType 'url') 또는 순수 base64(imageType 'base64', data-URI 접두사 없음)로 보냅니다. 인증은 Bearer 토큰이며 키는 spocr_로 시작합니다. 필요한 항목을 적은 fields 배열을 넘기거나 autoFields 를 true 로 두면 됩니다.
이미지 OCR 비용은 얼마인가요?
이미지당 ₩100(부가세 포함)이며, 신용카드 없이 매월 100크레딧 무료이고 실패는 과금하지 않습니다. 정액 플랜(Starter·Pro)은 월 크레딧 수·시트·저장공간을 추가합니다 — 위 요금표를 참고하세요.

내 이미지를 직접 확인 가능한 데이터로

무료 플랜 — 월 100크레딧, 신용카드 불필요. 모든 값이 이미지 내 위치와 함께 돌아옵니다.

관련