- 인쇄
- PDF
Template OCR
- 인쇄
- PDF
Classic/VPC 환경에서 이용 가능합니다.
네이버 클라우드 플랫폼 콘솔에서 이미지의 판독 영역을 직접 지정한 템플릿(Template)을 기반으로 텍스트를 인식하고 추출합니다.
요청
요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.
메서드 | URI |
---|---|
POST | /infer |
요청 헤더
CLOVA OCR API에서 공통으로 사용하는 헤더에 대한 정보는 CLOVA OCR 요청 헤더를 참조해 주십시오.
요청 바디
요청 바디에 대한 설명은 다음과 같습니다.
Content-Type: application/json
인 경우
요청 헤더 Content-Type
이 application/json
인 경우의 요청 바디에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
version | String | Required | 버전 정보
|
requestId | String | Required | 임의의 API 호출 UUID |
timestamp | Integer | Required | 임의의 API 호출 시각(Timestamp) |
lang | String | Optional | OCR 인식 요청 언어 정보
|
images | Array | Required | images 세부 정보
|
enableTableDetection | Boolean | Optional | 문서 이미지 내 표(Table) 영역 인식 및 구조화된 형태 제공 여부
|
Content-Type: multipart/form-data
인 경우
요청 헤더 Content-Type
이 multipart/form-data
인 경우의 요청 바디에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
message | Object | Required | 요청 데이터 정보 |
message.version | String | Required | 버전 정보
|
message.requestId | String | Required | 임의의 API 호출 UUID |
message.timestamp | Integer | Required | 임의의 API 호출 시각(Timestamp) |
message.lang | String | Optional | OCR 인식 요청 언어 정보
|
message.images | Array | Required | images 세부 정보
|
message.enableTableDetection | Boolean | Optional | 문서 이미지 내 표(Table) 영역 인식 및 구조화된 형태 제공 여부
|
file | File | Required | OCR 인식 이미지 파일 |
images
images
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
format | String | Required | 이미지 형식
|
name | String | Required | 이미지 이름
|
url | String | Conditional | 이미지 URL 주소
|
data | String | Conditional | Base64 인코딩된 이미지 데이터
|
templateIds | Integer | Optional | 템플릿 아이디
|
요청 예시
요청 예시는 다음과 같습니다.
Content-Type: application/json
인 경우
요청 헤더 Content-Type
이 application/json
인 경우의 요청 예시는 다음과 같습니다.
curl --location --request POST 'https://*****.apigw.ntruss.com/custom/v1/33661/f5d739754b0ed5bdaa51365b7d**********a5bbdd069e0db430d5f5adb490b/infer' \
--header 'Content-Type: application/json' \
--header 'X-OCR-SECRET: {앱 등록 시 발급받은 Secret Key}' \
--data '{
"version": "V2",
"requestId": "string",
"timestamp": 0,
"lang":"ko",
"images": [
{
"format": "pdf",
"name": "test 1",
"url": "{url}",
"templateIds":[31677]
}
],
"enableTableDetection": true
}'
Content-Type: multipart/form-data
인 경우
요청 헤더 Content-Type
이 multipart/form-data
인 경우의 요청 예시는 다음과 같습니다.
curl --location --request POST 'https://*****.apigw.ntruss.com/custom/v1/33661/f5d739754b0ed5bdaa51365b7d**********bbdd069e0db430d5f5adb490b/infer' \
--header 'Content-Type: multipart/form-data' \
--header 'X-OCR-SECRET: {앱 등록 시 발급받은 Secret Key}' \
--form '{file}.jpg"' \
--form 'message="{\"version\": \"V1\", \"requestId\": \"1234\", \"timestamp\": 1724832750462, \"images\": [{\"format\": \"jpg\", \"name\": \"hello\"}]}"'
응답
응답 형식을 설명합니다.
V2
버전으로 요청 시에는 응답 결과 값에 bounding
및 boundingPoly
정보가 표시됩니다.
응답 바디
응답 바디에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
version | String | - | 버전 정보
|
requestId | String | - | API 호출 UUID |
timestamp | Integer | - | API 호출 시각(Timestamp) |
images | Array | - | images 세부 정보 |
images
images
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
uid | String | - | 이미지 UID
|
name | String | - | 이미지 이름
|
inferResult | String | - | 이미지 추론 결과
|
message | String | - | 결과 메시지 |
matchedTemplate | Object | - | 템플릿 정보
|
matchedTemplate.id | Integer | - | 템플릿 아이디 |
matchedTemplate.name | String | - | 템플릿 이름 |
validationResult | Object | - | 유효성 검사 결과 정보 |
validationResult.result | String | - | 유효성 검사 결과 코드
|
validationResult.message | String | - | 유효성 검사 결과 세부 메시지
|
convertedImageInfo | Object | - | 변환 이미지 정보
|
convertedImageInfo.width | Integer | - | 변환 이미지 가로 길이 |
convertedImageInfo.height | Integer | - | 변환 이미지 세로 길이 |
convertedImageInfo.pageIndex | Integer | - | 변환 이미지 페이지 인덱스 |
convertedImageInfo.longImage | Boolean | - | 변환 이미지 길이 Long 여부
|
combineResult | Object | - | 이미지 인식 결과 결합 정보 |
combineResult.name | String | - | 이미지 결합 필드 이름 |
combineResult.text | String | - | 각 이미지 필드별 출력값 및 고정 텍스트 |
tables | Array | - | Tables 세부 정보 |
fields | Array | - | Fields 세부 정보 |
title | Object | - | 이미지 타이틀 세부 정보 |
title.name | String | - | 템플릿 대표 샘플 필드 이름
|
title.boundingPoly | Object | - | Bounding Poly 정보
|
title.boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
title.inferText | String | - | 인식된 텍스트
|
title.inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
title.subFields | Array | - | subFields 세부 정보 |
tables
images.tables
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
cells | Array | - | Cells 세부 정보 |
inferText | String | - | 인식된 텍스트 |
inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
boundingPoly | Object | - | Bounding Poly 정보
|
boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
fields
fields
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
name | String | - | 템플릿 필드 이름
|
valueType | String | - | 입력값 유형
|
boundingPoly | Object | - | Bounding Poly 정보
|
boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
inferText | String | - | 인식된 텍스트
|
inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
type | String | - | 인식된 이미지 유형
|
subFields | Array | - | subFields 세부 정보 |
checked | Boolean | - | 체크박스 선택 여부
|
subFields
fields.subFields
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
boundingPoly | Object | - | Bounding Poly 정보
|
boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
inferText | String | - | 인식된 텍스트
|
inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
lineBreak | Boolean | - | 인식된 텍스트의 마지막 줄 여부 표시
|
cells
tables.cells
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
boundingPoly | Object | - | Bounding Poly 정보
|
boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
cellTextLines | Array | - | cellTextLines 세부 정보 |
inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
rowSpan | Integer | - | 표의 셀이 차지하는(Span) 가로열의 수 |
rowIndex | Integer | - | 표 내 해당 가로열의 위치값 |
columnSpan | Integer | - | 표의 셀이 차지하는(Span) 세로행의 수 |
columnIndex | Integer | - | 표 내 해당 세로행의 위치값 |
cellTextLines
cellTextLines
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
boundingPoly | Object | - | Bounding Poly 정보
|
boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
cellWords | Array | - | 셀의 텍스트 세부 정보 |
cellWords
cellWords
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
boundingPoly | Object | - | Bounding Poly 정보
|
boundingPoly.vertices | Array | - | Bounding Poly Vertices 세부 정보 |
inferConfidence | Float | - | 인식된 텍스트의 신뢰도
|
inferText | String | - | 인식된 텍스트 |
vertices
boundingPoly.vertices
에 대한 설명은 다음과 같습니다.
필드 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
x | Float | - | Bounding Poly X축 좌표 값 |
y | Float | - | Bounding Poly Y축 좌표 값 |
응답 상태 코드
CLOVA OCR API에서 공통으로 사용하는 응답 상태 코드에 대한 정보는 CLOVA OCR 공통 응답 상태 코드를 참조해 주십시오.
응답 예시
응답 예시는 다음과 같습니다.
성공
호출이 성공한 경우의 응답 예시는 다음과 같습니다.
{
"version": "V2",
"requestId": "string",
"timestamp": 1724831491715,
"images": [
{
"uid": "{uid}",
"name": "test 1",
"inferResult": "SUCCESS",
"message": "SUCCESS",
"matchedTemplate": {
"id": 31677,
"name": "사업자등록증"
},
"validationResult": {
"result": "NO_REQUESTED"
},
"convertedImageInfo": {
"width": 1190,
"height": 1682,
"pageIndex": 0,
"longImage": false
},
"fields": [
{
"name": "등록번호",
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 551.0,
"y": 310.0
},
{
"x": 775.0,
"y": 310.0
},
{
"x": 775.0,
"y": 350.0
},
{
"x": 551.0,
"y": 350.0
}
]
},
"inferText": "***-**-*****",
"inferConfidence": 1.0,
"type": "NORMAL",
"subFields": [
{
"boundingPoly": {
"vertices": [
{
"x": 551.0,
"y": 310.0
},
{
"x": 775.0,
"y": 310.0
},
{
"x": 775.0,
"y": 350.0
},
{
"x": 551.0,
"y": 350.0
}
]
},
"inferText": "***-**-*****",
"inferConfidence": 1.0,
"lineBreak": true
}
]
},
{
"name": "법인명_단체명",
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 317.0,
"y": 369.0
},
{
"x": 511.0,
"y": 369.0
},
{
"x": 511.0,
"y": 402.0
},
{
"x": 317.0,
"y": 402.0
}
]
},
"inferText": "***** (주)",
"inferConfidence": 0.9999,
"type": "NORMAL",
"subFields": [
{
"boundingPoly": {
"vertices": [
{
"x": 317.0,
"y": 369.0
},
{
"x": 451.0,
"y": 369.0
},
{
"x": 451.0,
"y": 402.0
},
{
"x": 317.0,
"y": 402.0
}
]
},
"inferText": "*****",
"inferConfidence": 0.9998,
"lineBreak": false
},
{
"boundingPoly": {
"vertices": [
{
"x": 459.0,
"y": 371.0
},
{
"x": 511.0,
"y": 371.0
},
{
"x": 511.0,
"y": 399.0
},
{
"x": 459.0,
"y": 399.0
}
]
},
"inferText": "(주)",
"inferConfidence": 1.0,
"lineBreak": true
}
]
},
{
"name": "개업연월일",
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 316.0,
"y": 493.0
},
{
"x": 564.0,
"y": 495.0
},
{
"x": 564.0,
"y": 526.0
},
{
"x": 314.0,
"y": 526.0
}
]
},
"inferText": "1975 년 06 월 01 일",
"inferConfidence": 0.99796,
"type": "NORMAL",
"subFields": [
{
"boundingPoly": {
"vertices": [
{
"x": 316.0,
"y": 493.0
},
{
"x": 374.0,
"y": 496.0
},
{
"x": 373.0,
"y": 525.0
},
{
"x": 314.0,
"y": 522.0
}
]
},
"inferText": "1975",
"inferConfidence": 1.0,
"lineBreak": false
},
{
"boundingPoly": {
"vertices": [
{
"x": 380.0,
"y": 495.0
},
{
"x": 410.0,
"y": 495.0
},
{
"x": 410.0,
"y": 526.0
},
{
"x": 380.0,
"y": 526.0
}
]
},
"inferText": "년",
"inferConfidence": 0.9999,
"lineBreak": false
},
{
"boundingPoly": {
"vertices": [
{
"x": 417.0,
"y": 495.0
},
{
"x": 451.0,
"y": 495.0
},
{
"x": 451.0,
"y": 523.0
},
{
"x": 417.0,
"y": 523.0
}
]
},
"inferText": "06",
"inferConfidence": 1.0,
"lineBreak": false
},
{
"boundingPoly": {
"vertices": [
{
"x": 457.0,
"y": 495.0
},
{
"x": 490.0,
"y": 495.0
},
{
"x": 490.0,
"y": 524.0
},
{
"x": 457.0,
"y": 524.0
}
]
},
"inferText": "월",
"inferConfidence": 0.9997,
"lineBreak": false
},
{
"boundingPoly": {
"vertices": [
{
"x": 494.0,
"y": 495.0
},
{
"x": 564.0,
"y": 495.0
},
{
"x": 564.0,
"y": 523.0
},
{
"x": 494.0,
"y": 523.0
}
]
},
"inferText": "01 일",
"inferConfidence": 0.9902,
"lineBreak": false
}
]
},
{
"name": "사업장 소재지",
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 315.0,
"y": 534.0
},
{
"x": 852.0,
"y": 534.0
},
{
"x": 852.0,
"y": 568.0
},
{
"x": 315.0,
"y": 568.0
}
]
},
"inferText": "경기도 ******",
"inferConfidence": 0.99223995,
"type": "NORMAL",
"subFields": [
{
"boundingPoly": {
"vertices": [
{
"x": 315.0,
"y": 535.0
},
{
"x": 397.0,
"y": 535.0
},
{
"x": 397.0,
"y": 568.0
},
{
"x": 315.0,
"y": 568.0
}
]
},
"inferText": "경기도",
"inferConfidence": 1.0,
"lineBreak": false
}
]
},
{
"name": "대표자",
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 300.66458,
"y": 404.66934
},
{
"x": 910.0876,
"y": 400.79553
},
{
"x": 909.6188,
"y": 478.17303
},
{
"x": 300.49875,
"y": 481.97482
}
]
},
"inferText": "",
"inferConfidence": 0.0,
"type": "NORMAL"
}
],
"title": {
"name": "사업자 등록증",
"boundingPoly": {
"vertices": [
{
"x": 330.0,
"y": 188.0
},
{
"x": 795.0,
"y": 186.0
},
{
"x": 795.0,
"y": 252.0
},
{
"x": 330.0,
"y": 253.0
}
]
},
"inferText": "사업자등록증",
"inferConfidence": 0.9998,
"subFields": [
{
"boundingPoly": {
"vertices": [
{
"x": 330.0,
"y": 188.0
},
{
"x": 795.0,
"y": 186.0
},
{
"x": 795.0,
"y": 252.0
},
{
"x": 330.0,
"y": 253.0
}
]
},
"inferText": "사업자등록증",
"inferConfidence": 0.9998,
"lineBreak": true
}
]
}
},
]
}
실패
호출이 실패한 경우의 응답 예시는 다음과 같습니다.
{
"version": "V1",
"requestId": "1234",
"timestamp": 1724833931723,
"images": [
{
"uid": "{uid}",
"name": "hello",
"inferResult": "FAILURE",
"message": "NOT_FOUND: not found matched template",
"validationResult": {
"result": "NO_REQUESTED"
}
}
]
}