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

확인할 수 있는 데이터로 바꾸는 PDF OCR

space-ocr로 PDF 페이지에서 구조화 데이터를 추출합니다. 필요한 필드를 선언하면 각 값이 data.cells의 좌표와 함께 반환되고, 확인할 항목은 data.review.flagged에 모입니다.

PDF는 데이터가 숨어버리는 곳입니다. 세금계산서, 영수증 더미, 납품서 — 숫자는 분명 페이지에 있는데, 스프레드시트로 옮기려면 결국 다시 입력하게 됩니다. PDF OCR은 이를 해결하겠다고 약속합니다. 문서를 읽어 구조화된 필드를 돌려준다는 거죠. 문제는 대부분의 도구가 그럴듯한 추측에서 멈추고, 나머지는 그냥 믿으라고 한다는 점입니다.

space-ocr는 더 엄격한 질문에 답합니다. 필요한 필드를 선언하면 각 값이 읽어낸 페이지 영역 — data.cells 의 box 와 quad — 과 함께 돌아오고, 대조가 통과하지 못한 경로는 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/fields), 레이아웃을 살린 마크다운으로(POST /ocr/markdown), 또는 읽기순서를 정리한 원문 텍스트로(POST /ocr/text) 받을 수 있습니다. 세 경로 모두 values·cells·review·image 라는 같은 봉투로 응답하므로 검증 코드는 한 벌이면 됩니다. 마크다운은 요소 단위 cells 를 기본으로 주고, 텍스트는 includeBlocks: true 로 요청합니다.
모든 값에 위치 정보
data.cells 의 각 경로는 box(0–1000 정규화 그리드의 xmin/ymin/xmax/ymax)와 페이지 기울기를 따르는 네 점의 quad 를 가집니다. 좌표의 기준이 되는 폭·높이는 data.image 가 알려 주므로 픽셀 환산은 곱셈 한 번입니다.
합계만이 아니라 품목까지
type 이 array 인 필드에 children 을 선언하면 각 행이 items[0].amount 같은 색인 경로에 놓이고 셀도 따로 가집니다. 행 자체도 외접 박스를 가지므로 줄바꿈되거나 병합된 행도 추적됩니다.
고정 스키마가 아니라 직접 정의한 필드
실제로 저장할 필드를 보냅니다. name 과 type 에 더해 필요하면 required·pattern·min/max·enum·label·near 를 선언합니다. 처음 보는 양식이라면 autoFields: true 를 보내 스키마를 제안받으세요. 선언은 모델에 전달되지 않으며, 읽는 방식이 아니라 무엇을 검토 대상으로 세울지를 정합니다.
깔끔한 내보내기
UTF-8 BOM CSV(Excel·한중일 안전, 품목 펼침)와 REST API 의 JSON. 비동기 작업은 GET /jobs/{jobId}, ocr.completed 는 HMAC 서명 웹훅으로 받습니다.
언어는 자동
일본어·한국어·중국어·영어를 한 엔진에서 — 고를 언어 설정 자체가 없고, 혼합 스크립트도 처리합니다.
휴대폰 사진도 비뚤어진 스캔도
판독 전에 EXIF 회전이 픽셀에 반영되고, 기울기 보정은 하지 않습니다. quad 가 문서 기울기를 따라가므로 그려 넣은 윤곽이 인쇄된 위치에 그대로 겹칩니다.

space-ocr의 PDF OCR 작동 방식

앱에 PDF를 끌어다 놓으면 각 페이지가 브라우저에서 PNG로 렌더링되고, 읽혀서 구조화된 필드가 됩니다 — 여러 페이지 PDF는 정렬·필터·내보내기가 가능한 행의 모음이 됩니다.

공개 API는 더 엄격해서 래스터 이미지만 읽고 PDF 바이트는 읽지 않습니다. POST /upload 는 PDF를 그 자리에서 거절하며 페이지를 먼저 이미지로 만들라고 알려 줍니다. API를 쓸 때는 직접 래스터화한 페이지 이미지를 보내세요. 어느 경로든 1페이지가 1크레딧입니다.

/ocr/fields 응답은 다음과 같습니다.

  • data.values — 선언한 스키마 그대로의 업무 데이터.
  • data.cells[path] — 그 경로의 box·quad·verified·review·evidence.
  • data.review — declared·returned·boxed·verified, 그리고 작업 목록인 flagged.
  • data.normalized — number·integer·date 를 선언한 필드의 파싱된 값.
  • data.image — 모든 좌표의 기준이 되는 폭과 높이.

verified 는 글자 일치 결과가 아니라 판정입니다. review 에 사유가 서면 false, 대조가 돌았는데 아무것도 서지 않으면 true, 대조할 대상이 없으면 null 입니다. 글자 대조 자체는 evidence.text_match 에 있고, evidence.match_ratio 는 그 옆의 보조 근거입니다.

페이지를 이미지로 만든 뒤 필드 추출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# API가 읽는 것은 이미지이지 PDF 바이트가 아니다 — 페이지를 먼저 이미지로 만든다
pdftoppm -r 200 -jpeg invoice.pdf page

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/page-1.jpg",
    "imageType": "url",
    "fields": [
      { "name": "invoice_no", "type": "string", "required": true },
      { "name": "issue_date", "type": "date", "required": true },
      { "name": "total", "type": "number", "required": true, "min": 0 },
      { "name": "items", "type": "array", "children": [
        { "name": "description", "type": "string" },
        { "name": "quantity", "type": "number" },
        { "name": "amount", "type": "number" }
      ] }
    ]
  }'

PDF를 OCR하는 방법

  1. 페이지를 이미지로 만들기
    웹 앱에서는 PDF를 끌어다 놓으면 각 페이지가 브라우저에서 PNG로 렌더링됩니다. API를 직접 호출한다면 페이지를 직접 래스터화해 url 또는 base64로 POST /ocr/fields 에 보내거나, POST /upload 로 시트에 올립니다.
  2. 필드 선언하기
    필요한 fields 를 나열합니다. name 과 type 에 더해 상황에 맞게 required·pattern·min/max·enum·label·near 를 선언합니다. 품목 표에는 children 이 있는 array 필드를 쓰고, 양식이 낯설면 autoFields: true 로 스키마를 제안받습니다.
  3. 구조화 결과 읽기
    업무 데이터는 선언한 스키마 그대로 data.values 에, 경로별 box·quad·verified·review·evidence 는 data.cells[path] 에, number·integer·date 를 선언한 필드의 파싱 값은 data.normalized 에 담깁니다.
  4. review.flagged 처리하기
    data.review.flagged 를 순회합니다. 각 항목은 path 와 랭킹 순 reasons 배열이며 0번이 대표 사유입니다. data.cells[path] 를 열어 box 또는 quad 를 data.image 기준으로 그리고, 값을 읽어낸 영역 옆에서 바로 고칩니다.
  5. 내보내기 또는 조회
    CSV(UTF-8 BOM, 품목 펼쳐짐)를 다운로드하거나, 저장된 시트를 GET /view 로 where·sort·select·boxes 를 써서 조회합니다 — 이 조회는 무료이며 OCR을 다시 돌리지 않습니다.

단순하고 예측 가능한 가격

1크레딧이 1페이지, ₩100(부가세 포함)입니다. 모든 계정에 매월 100크레딧 무료 제공, 카드 등록 없이 시작하고 실패는 과금하지 않습니다. 정액 플랜은 월 크레딧·시트·저장공간을 추가합니다.

Free
₩0
  • 100 크레딧/월
  • 3 시트
  • 1 GB 저장공간
무료 — 카드 불필요
Starter
₩39,800/월
  • 500 크레딧/월
  • 15 시트
  • 10 GB 저장공간
무료로 시작
가장 인기
Pro
₩69,800/월
  • 1,100 크레딧/월
  • 시트 무제한
  • 100 GB 저장공간
무료로 시작
space-ocr로 PDF를 OCR할 수 있나요?
됩니다. 다만 한 단계가 사이에 있습니다. 웹 앱은 PDF를 직접 받아 각 페이지를 브라우저에서 PNG로 렌더링한 뒤 OCR하므로, 여러 페이지 PDF가 구조화된 행이 됩니다. 공개 API는 래스터 이미지만 읽고, POST /upload 는 PDF를 거절하면서 페이지를 먼저 이미지로 만들어 보내라고 안내합니다.
PDF OCR이 각 값의 위치를 보존하나요?
네. data.cells 의 각 경로는 box(0–1000 정규화 그리드의 xmin/ymin/xmax/ymax)와 문서 기울기를 따르는 네 점의 quad 를 반환하며, 둘 다 data.image 를 기준으로 측정됩니다. 검토 대상인지는 셀의 verified 가 알려 주고 사유는 review.reasons 에, evidence.match_ratio·evidence.printed_text 같은 보조 신호는 evidence 에 들어갑니다.
PDF에서 표와 품목을 추출할 수 있나요?
네. 품목을 type이 'array'인 필드로 요청하고, 그 children이 한 행(품명·수량·금액 등)을 정의합니다. 각 셀은 items[2].amount 같은 색인 경로를 유지하고 행 자체도 외접 박스를 가지므로, 줄바꿈되거나 병합된 품목도 위치까지 추적할 수 있습니다.
어떤 값을 확인해야 하는지 어떻게 아나요?
data.review.flagged 를 읽습니다. 각 항목은 path 와 랭킹 순 reasons 배열(missing·text_mismatch·type_mismatch·out_of_range·pattern_mismatch·nobox 등)로 이루어지고, 검토 건수는 그 배열의 길이 그 자체입니다. path 로 data.cells[path] 를 열면 그 값을 읽어낸 영역을 그대로 보여 줄 수 있습니다. 고정 점수 임계값을 구현할 필요가 없습니다.
PDF OCR 결과는 무엇으로 내보낼 수 있나요?
UTF-8 BOM이 있는 CSV(Excel이 한·중·일 텍스트를 올바르게 열고, 품목은 하위 행으로 펼쳐짐)와 REST API의 JSON입니다. 저장된 시트는 GET /view로 where·sort·select·boxes를 써서 서버 측에서 조회할 수 있고, 이 조회는 무료이며 OCR을 다시 돌리지 않습니다.
PDF OCR 비용은 얼마인가요?
크레딧당 ₩100(부가세 포함)이고 1크레딧이 1페이지입니다. 모든 계정에 매월 100크레딧 무료 제공, 카드 등록이 필요 없고 실패는 과금하지 않습니다. Starter·Pro는 월 크레딧·시트·저장공간을 추가합니다 — 위 요금표를 참고하세요.
어떤 언어를 지원하나요?
언어 감지는 완전 자동입니다 — 일본어·한국어·중국어·영어를 한 엔진에서 처리하며, 혼합 스크립트와 전각·반각도 함께 다룹니다. 고를 언어 설정 항목 자체가 없습니다.

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

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

관련