CLOVA OCR Custom API
    • PDF

    CLOVA OCR Custom API

    • PDF

    Article Summary

    version

    VersionDateChanges
    v1.0.02019-12-05First written
    v1.0.12020-02-21Providing boundingPoly information in response to General API call
    v2.0.02020-03-26Multibox and checkbox recognition functions added by providing CLOVA OCR premium model
    Bounding/boundingPoly information is provided as recognition results according to requested version (V1/V2)
    Use of V2 is recommended, and the boundingPoly is provided with V2
    v2.0.12021-01-21Provision of JSON line break information for General API
    Delete subFiled in ImageField object
    v2.0.22021-02-04Addition of the convertedImageInfo field within Recognition Results Object
    v2.0.32021-05-27Addition of the combineResult field and lineBreak api
    v2.0.42021-07-22Supporting zh-TW language
    v2.0.52021-09-16Addition of the table extraction feature
    v2.0.62023-02-23Addition of the multiple language selection feature

    Requests

    MethodRequest URI
    POSTCalls to API Gateway's InvokeURL created from CLOVA OCR builder
    A unique call URL is generated for each domain
    • Text OCR recognition and Template OCR recognition request
    ClassificationDescriptionPathRequestResponse
    TEXT OCRRecognizes all text in an image without a defined template/generalFollows the image recognition request formatFollows the image recognition result format
    matchedTemplate, title, and validationResult values are not transferred
    Template OCRRecognizes images that include the template released to the domain/inferFollows the image recognition request formatFollows the image recognition result format

    Request headers

    Header nameDescription
    X-OCR-SECRETX-OCR-SECRET:{Client Secret} created when linking API Gateway in the domain
    Content-Typeapplication/json : request use json body. Support images.url or images.data encoded with base64.
    - multipart/form-data : request use multipart form body. Support image file transferred as stream.

    Request bodies

    Content-Type : application/json

    1. Image recognition request
    ClassificationJson Model
    Image recognition request{
    "version": "string",
    "requestId": "string",
    "timestamp": 0,
    "lang": "string",
    "images": [{ "format": "string", "url": "string", "data": "string", "name": "string", "templateIds": [ 0 ] }],
    "enableTableDetection": true
    }

    Detailed descriptions of image recognition request fields

    Field nameRequiredTypeDescriptionService limits
    versionYesstringVersion information required. Input either V1 or V2
    Use of V2 is recommended, and the boundingPoly is provided with V2
    requestIdYesstringAPI call UUID
    timestampYes0API call Timestamp
    langNostringLanguage information to be requested for OCR recognitionAvailable language values to be set are "ko," "ja," and "zh-TW." If the lang field is not set, the language settings of the domain will be set as default. Multiple languages can be called with a comma. (Example: "ko,ja,zh-TW")
    imagesYesstringInput as JSON arrays, and only 1 image can be accepted at the moment (Korean/Japanese)GeneralOCR supports up to 50 MB, and Template OCR supports up to 20 MB (PDF, TIFF up to 50 MB)
    images.formatYesstringSetting image formats"JPEG", "PNG", "PDF","TIFF" image formats are supported. General OCR: supports recognition of up to 10 pages of PDF file, Template OCR: supports up to 5 pages of PDF/TIFF file
    images.urlNostringEither images.url or image.data must existThe URL must be a public URL that can be imported from
    images.dataNostringEither images.url or image.data must exist. (If both the URL and data exist, it uses data and ignores the URL.)image.data is image bytes encoded in base64
    images.nameYesstringEnter the image name
    It is used to identify the image, as well as for checking the response result
    images.templateIdsNojson arrayIt is not used in text OCR API
    If this field is not set in the Template OCR API, then they will be automatically categorized into all service templates released to the domain
    enableTableDetectionNoBooleanAutomatically recognizes the table in the document and provides it in a structured format with text.Support limited to General OCR

    CURL example:

    curl --request POST 'your apigw invoke url' \
    --header 'X-OCR-SECRET: your secret key' \
    --data-raw '{"images":[{"format":"jpg","name":"demo","url":"your image url"}],"requestId":"guide-json-demo","version":"V2","timestamp":1584062336793}'
    

    Content-Type : multipart/form-data

    1. Image Recognition Request
    KEYRequiredVALUE
    messageY{"version": "string","requestId": "string","timestamp": 0,"lang": "string","images": [{ "format": "string", "name": "string", "templateIds": [ 0 ] }]}
    fileYimage file steam data

    Form Data Message Value Description

    Field nameRequiredTypeDescriptionConstraints
    versionYesstringVersion information required. Input either V1 or V2Use of V2 is recommended, and the boundingPoly is provided with V2
    requestIdYesstringAPI call UUID
    timestampYesintegerAPI call Timestamp value
    langNostringLanguage information to be requested for OCR recognitionLanguage values that can be set are 'ko'/'ja'/'zh-TW', and if the lang field is not set, the language setting value of the domain is set to default
    Use comma(,) in multi-language.ex:"ko,ja,zh-TW"
    imagesYesstringIt is entered as Json array and currently only one image input is allowed (Korean/Japanese)GeneralOCR supports up to 50 MB, and Template OCR supports up to 20 MB (PDF, TIFF up to 50 MB)
    images.formatYesstringSetting image formats"JPEG", "PNG", "PDF","TIFF" image formats are supported. General OCR: supports recognition of up to 10 pages of PDF file, Template OCR: supports up to 5 pages of PDF/TIFF file
    images.nameYesstringInput image name. It is used to identify the image, as well as for checking the response result
    images.templateIdsNojson arrayIt is not used in text OCR API
    If this field is not set in the Template OCR API, then they will be automatically categorized into all service templates released to the domain
    enableTableDetectionNoBooleanAutomatically recognizes the table in the document and provides it in a structured format with textOnly GENERAL domain support

    CURL example:

    curl --request POST 'your apigw invoke url' \
    --header 'X-OCR-SECRET: your secret key' \
    --form 'message={"images":[{"format":"png","name":"demo"}],"requestId":"guide-demo","version":"V2","timestamp":1584062336793}' \
    --form 'file=@image.png'
    

    Responses

    V1 response bodies

    Request version is 'V1'

    1. Image recognition result
    ClassificationJson Model
    Image recognition result{
    "uid": "string",
    "name": "string",
    "inferResult": "string",
    "message": "string",
    "matchedTemplate": { "id": 0, "name": "string" },
    "title": {},
    "fields": [ {} ],
    "validationResult": { "result": "string", "message": "string"}
    }

    Detailed descriptions of image recognition result fields

    Field nameData typeDescription
    uidstringIt is a unique ID provided for the validation of the API, and used to track the validity test request
    namestringName of the requested image
    inferResultstring- Image inference result
    "SUCCESS": image recognition succeeded
    "FAILURE": image recognition failed
    "ERROR": image recognition exception.
    messagestringThe "SUCCESS" message is displayed when the image recognition succeeds
    An error message is displayed when image recognition is failed
    Error messages are shown in detail at the end
    matchedTemplatejson objectIt is the matching template information from the image recognition. It includes the template ID and name
    When the inference fails, or when a matching template can't be found, this field won't respond
    matchedTemplate.id0Template ID
    matchedTemplate.namestringTemplate name
    titlestringImage title
    fieldsJson array objectReference to ImageField objects
    validationResultjson objectValidation result
    validationResult.resultstring- Result code
    "NO_REQUESTED": the validation task wasn't executed
    "UNCHECKED": the response for the action wasn't confirmed, or the response wasn't accepted
    "ERROR": an error occurred during the validation operation
    "VALID": the validation result is valid
    "INVALID": the validation result is invalid
    "UNCHECKED", "ERROR" and "INVALID" are displayed as validation failure
    validationResult.messagestringThis is a value that is not always returned in a detailed message for the validation
    combineResultjson objectCombine analysis result
    combineResult.namestringCombined field name
    combineResult.textstringOutput value per field + fixed text
    1. ImageField object
    ClassificationJson Model
    Image Field{
    "name": "string",
    "valueType": "string",
    "inferText": "string",
    "inferConfidence": 0.0,
    "bounding": {}
    }

    Detailed descriptions of ImageField object fields

    Field nameData typeDescription
    namestringImage name
    valueTypestringA value that is not always returned (A text value type of the field)
    "ALL": text and numbers
    inferTextstringInference result text
    inferConfidence0.0Confidence of the inference result. The value is between 0 and 1. The greater the value, the more accurate it is
    boundingBounding objectRefer to bounding object
    1. Bounding object
    ClassificationJson Model
    bounding{
    "top": 0.0,
    "left": 0.0,
    "width": 0.0,
    "height": 0.0
    }

    Detailed descriptions of bounding object fields

    Field nameData typeDescription
    top0.0Bounding Y coordinate
    left0.0Bounding X coordinate
    width0.0Bounding width.
    height0.0Bounding height.

    V2 response bodies

    Request version is 'V2'

    1. Image Recognition Results
    ClassificationJson Model
    Image Recognition Results{
    "uid": "string",
    "name": "string",
    "inferResult": "string",
    "message": "string",
    "matchedTemplate": { "id": 0, "name": "string" },
    "title": {},
    "fields": [ {} ],
    "validationResult": { "result": "string", "message": "string"}
    }

    Detailed description of the Image Recognition Results field

    Field NameData TypeDescription
    uidstringA unique ID that is provided to validate the API, which is used to track validation requests.
    namestringThe requested image name.
    inferResultstringImage inference result.
    "SUCCESS": Image recognition successful. "FAILURE": image recognition failed. "ERROR": image recognition exception. Not charged when the result is ERROR.
    messagestringSuccessful image recognition, "SUCCESS"
    If image recognition fails, an error message is displayed.
    Error messages are detailed at the bottom
    matchedTemplatejson objectInclude the template ID and name with template information that matches image recognition.
    This field does not respond if recognition fails or a matched template cannot be found.
    matchedTemplate.idintegerTemplate ID.
    matchedTemplate.namestringName of the template.
    titlejson objectImageField Object Reference
    fieldsJson array objectImageField Object Reference
    validationResultjson objectValidation result.
    validationResult.resultstringResult Code.
    "NO_REQUESTED": the validation task did not run.
    "UNCHECKED": action response not confirmed or not accepted
    "ERROR": error executing validation.
    "VALID": the verification result is valid.
    "INVALID": the verification result is invalid.
    "UNCHECKED","ERROR" and "INVALID" are shown as validation failures.
    validationResult.messagestringIt is not always the value that is returned in the Validation detail message.
    convertedImageInfojson objectOnly response when image format is pdf/tiff.
    Coordinates are based on converted image when request format is pdf/tiff.
    convertedImageInfo.widthintegerThe base image width.
    convertedImageInfo.heightintegerThe base image height.
    convertedImageInfo.pageIndexintegerThe page index of pdf/tiff.
    combineResultjson objectCombine analysis result
    combineResult.namestringCombined field name
    combineResult.textstringOutput value per field + fixed text
    tablesJson array objectImageTable Object Reference
    1. ImageField object
    ClassificationJson Model
    Image Field{
    "name": "string",
    "valueType": "string",
    "inferText": "string",
    "inferConfidence": 0.0,
    "boundingPoly": {},
    "type": "string",
    "subFields": [{}],
    "checked":true,
    "lineBreak":true
    }

    ImageField Object Field Details

    Field NameData TypeDescription
    namestringImage name.
    valueTypestringIt is the text value type of the field.
    "ALL": text and numbers
    "NUMERIC":numbers
    inferTextstringRecognition Result Text
    When type is checkbox , it will be replaced by the return value in the setting
    inferConfidencefloatConfidence of infer result. Larger values of 0-1 are more accurate.
    boundingPolyboundingPoly ObjectboundingPoly Object reference
    typestring- NORMAL
    - MULTI_BOX
    - CHECKBOX
    checkedbooleanOnly 'CHECKBOX' type supported.
    Whether the field is checked or not.
    lineBreakbooleanOnly response in GENERAL api.
    Whether there is a newline after the text
    subFieldsJson ArrayOnly response in Template api.
    SubField Object reference
    1. boundingPoly object
    ClassificationJson Model
    boundingPoly{
    "vertices":[{}]
    }

    boundingPoly Object Field Details

    Field NameData TypeDescription
    verticesvertices objectvertices object reference
    1. vertices object
    ClassificationJson Model
    vertices{
    "x": 0.0,
    "y": 0.0
    }

    vertices Object Field Details

    Field NameData TypeDescription
    xfloatX coodinate
    yfloaty coodinate
    1. SubField Object
    ClassificationJson Model
    subField{
    "boundingPoly": {},
    "inferText": "string",
    "inferConfidence":0.0
    "lineBreak": false
    }

    subField Object Field Details

    Field NameData TypeDescription
    boundingPolyboundingPoly ObjectboundingPoly Object reference
    inferTextstringRecognition Result Text
    inferConfidencefloatConfidence of infer result. Larger values of 0-1 are more accurate.
    lineBreakbooleanWhether there is a newline after the text
    1. ImageTable Object
    ClassificationJson Model
    subField{
    "cells": [],
    "boundingPoly": {},
    "inferConfidence":0.0
    }

    ImageTable Object Field Details

    Field NameData TypeDescription
    boundingPolyboundingPoly ObjectboundingPoly Object reference
    cellsjson array objectTableCell Object reference
    inferConfidencefloatConfidence of infer result. Larger values of 0-1 are more accurate.
    1. TableCell Object
    ClassificationJson Model
    subField{
    "cellTextLines": [],
    "boundingPoly": {},
    "inferConfidence":0.0,
    "rowSpan":0,
    "rowIndex":0,
    "columnSpan":0,
    "columnIndex":0
    }

    TableCell Object Field Details

    Field NameData TypeDescription
    boundingPolyboundingPoly ObjectboundingPoly Object reference
    cellTextLinesjson array objectThe lines in a cell.
    CellTextLine Object reference.
    inferConfidencefloatConfidence of infer result. Larger values of 0-1 are more accurate.
    rowSpanintThe rowSpan property specifies the number of rows a cell should span.
    rowIndexintThe rowIndex property specifies the position of a row in the collection of rows in a table.
    columnSpanintThe columnSpan property specifies how many columns an element should span across.
    columnIndexintThe columnIndex property specifies the position of a column in the collection of columns in a table.
    1. CellTextLine Object
    ClassificationJson Model
    subField{
    "cellWords": [],
    "boundingPoly": {},
    "inferConfidence":0.0
    }

    CellTextLine Object Field Details

    Field NameData TypeDescription
    boundingPolyboundingPoly ObjectboundingPoly Object reference
    inferConfidencefloatConfidence of infer result. Larger values of 0-1 are more accurate.
    cellWordsjson array objectThe words in a line.
    CellWord Object reference.
    1. CellWord Object
    ClassificationJson Model
    subField{
    "inferText": "",
    "boundingPoly": {},
    "inferConfidence":0.0
    }

    CellWord Object Field Details

    Field NameData TypeDescription
    boundingPolyboundingPoly ObjectboundingPoly Object reference
    inferConfidencefloatConfidence of infer result. Larger values of 0-1 are more accurate.
    inferTextstringInference result text

    Examples

    Text OCR request examples

    {
      "version": "V2",
      "requestId": "string",
      "timestamp": 0,
      "lang":"ko",
      "images": [
        {
          "format": "jpg",
          "name": "test 1",
          "url": "https://www.ncloud.com/ocr-test/test.jpg"
        }
      ]
    }
    

    Text OCR response examples

    {
        "version": "V2",
        "requestId": "string",
        "timestamp": 1576569034247,
        "images": [{
            "uid": "9fd73a6aacad4025b3099a36ee55aacd",
            "name": "medium",
            "inferResult": "SUCCESS",
            "message": "SUCCESS",
            "fields": [{
                    "valueType": "ALL",
                    "inferText": "Beautiful",
                    "inferConfidence": 0.99992156,
                    "type": "NORMAL",
                    "lineBreak": true,
                    "boundingPoly": {
                        "vertices": [{
                            "x": 2713.7295,
                            "y": 1277.0492
                        }, {
                            "x": 2713.7295,
                            "y": 977.7408
                        }, {
                            "x": 2841.4343,
                            "y": 977.7408
                        }, {
                            "x": 2841.4343,
                            "y": 1277.0492
                        }]
                    }
                },
                {
                    "valueType": "ALL",
                    "inferText": "This",
                    "inferConfidence": 0.99958915,
                    "type": "NORMAL",
                    "lineBreak": false,
                    "boundingPoly": {
                        "vertices": [{
                            "x": 2314.6516,
                            "y": 1468.6066
                        }, {
                            "x": 2314.6516,
                            "y": 1328.9293
                        }, {
                            "x": 2426.3936,
                            "y": 1328.9293
                        }, {
                            "x": 2426.3936,
                            "y": 1468.6066
                        }]
                    }
                },
                {
                    "valueType": "ALL",
                    "inferText": "World",
                    "inferConfidence": 0.9998707,
                    "type": "NORMAL",
                    "lineBreak": false,
                    "boundingPoly": {
                        "vertices": [{
                            "x": 2314.6516,
                            "y": 1604.2931
                        }, {
                            "x": 2314.6516,
                            "y": 1460.625
                        }, {
                            "x": 2430.3843,
                            "y": 1460.625
                        }, {
                            "x": 2430.3843,
                            "y": 1604.2931
                        }]
                    }
                }
            ],
            "validationResult": {
                "result": "NO_REQUESTED"
            }
        }]
    }
    

    Template OCR request examples

    {
      "version": "V1",
      "requestId": "string",
      "timestamp": 0,
      "lang":"ko",
      "images": [
        {
          "format": "jpg",
          "name": "test 1",
          "url": "https://www.ncloud.com/ocr-test/test.jpg",
          "templateIds":[390]
        }
      ]
    }
    

    Template OCR response examples

    {
        "version": "V2",
        "requestId": "string",
        "timestamp": 1584067653255,
        "images": [
            {
                "uid": "1b220cd049de4a7c9e0dc1942d982867",
                "name": "test 1",
                "inferResult": "SUCCESS",
                "message": "SUCCESS",
                "matchedTemplate": {
                    "id": 390,
                    "name": "template"
                },
                "validationResult": {
                    "result": "NO_REQUESTED"
                },
                "title": {
                    "name": "title",
                    "boundingPoly": {
                        "vertices": [
                            {
                                "x": 453.7125,
                                "y": 54.1125
                            },
                            {
                                "x": 961.5375,
                                "y": 54.1125
                            },
                            {
                                "x": 961.5375,
                                "y": 108.225
                            },
                            {
                                "x": 453.7125,
                                "y": 108.225
                            }
                        ]
                    },
                    "inferText": "Insurance claim form (monthly personal insurance)",
                    "inferConfidence": 0.94674826
                },
                "fields": [
                    {
                        "name": "id",
                        "valueType": "NUMERIC",
                        "boundingPoly": {
                            "vertices": [
                                {
                                    "x": 488.88235,
                                    "y": 284.92896
                                },
                                {
                                    "x": 550.3732,
                                    "y": 284.93716
                                },
                                {
                                    "x": 550.39166,
                                    "y": 333.93698
                                },
                                {
                                    "x": 488.90073,
                                    "y": 333.9292
                                }
                            ]
                        },
                        "inferText": "102831",
                        "inferConfidence": 0.9319761,
                        "type": "MULTI_BOX",
                        "subFields": [
                            {
                                "boundingPoly": {
                                    "vertices": [
                                        {
                                            "x": 488.88235,
                                            "y": 284.92896
                                        },
                                        {
                                            "x": 550.3732,
                                            "y": 284.93716
                                        },
                                        {
                                            "x": 550.39166,
                                            "y": 333.93698
                                        },
                                        {
                                            "x": 488.90073,
                                            "y": 333.9292
                                        }
                                    ]
                                },
                                "inferText": "1",
                                "inferConfidence": 0.9798796
                            },
                            {
                                "boundingPoly": {
                                    "vertices": [
                                        {
                                            "x": 551.37305,
                                            "y": 284.9373
                                        },
                                        {
                                            "x": 612.86285,
                                            "y": 284.9455
                                        },
                                        {
                                            "x": 612.88153,
                                            "y": 333.94495
                                        },
                                        {
                                            "x": 551.39154,
                                            "y": 333.9371
                                        }
                                    ]
                                },
                                "inferText": "0",
                                "inferConfidence": 0.6391636
                            },
                            {
                                "boundingPoly": {
                                    "vertices": [
                                        {
                                            "x": 613.86273,
                                            "y": 284.94562
                                        },
                                        {
                                            "x": 675.3515,
                                            "y": 284.95383
                                        },
                                        {
                                            "x": 675.3702,
                                            "y": 333.95288
                                        },
                                        {
                                            "x": 613.8812,
                                            "y": 333.94504
                                        }
                                    ]
                                },
                                "inferText": "2",
                                "inferConfidence": 0.99591047
                            },
                            {
                                "boundingPoly": {
                                    "vertices": [
                                        {
                                            "x": 676.3513,
                                            "y": 284.95395
                                        },
                                        {
                                            "x": 737.8392,
                                            "y": 284.9622
                                        },
                                        {
                                            "x": 737.8579,
                                            "y": 333.96082
                                        },
                                        {
                                            "x": 676.37006,
                                            "y": 333.953
                                        }
                                    ]
                                },
                                "inferText": "8",
                                "inferConfidence": 0.99782735
                            },
                            {
                                "boundingPoly": {
                                    "vertices": [
                                        {
                                            "x": 738.83887,
                                            "y": 284.96228
                                        },
                                        {
                                            "x": 800.3257,
                                            "y": 284.97052
                                        },
                                        {
                                            "x": 800.34454,
                                            "y": 333.96872
                                        },
                                        {
                                            "x": 738.8577,
                                            "y": 333.9609
                                        }
                                    ]
                                },
                                "inferText": "3",
                                "inferConfidence": 0.99916536
                            },
                            {
                                "boundingPoly": {
                                    "vertices": [
                                        {
                                            "x": 801.3255,
                                            "y": 284.97064
                                        },
                                        {
                                            "x": 862.8112,
                                            "y": 284.97882
                                        },
                                        {
                                            "x": 862.8301,
                                            "y": 333.97662
                                        },
                                        {
                                            "x": 801.3443,
                                            "y": 333.96884
                                        }
                                    ]
                                },
                                "inferText": "1",
                                "inferConfidence": 0.9799099
                            }
                        ]
                    },
                    {
                        "name": "name",
                        "valueType": "ALL",
                        "boundingPoly": {
                            "vertices": [
                                {
                                    "x": 287.2125,
                                    "y": 287.2125
                                },
                                {
                                    "x": 380.86874,
                                    "y": 287.2125
                                },
                                {
                                    "x": 380.86874,
                                    "y": 328.8375
                                },
                                {
                                    "x": 287.2125,
                                    "y": 328.8375
                                }
                            ]
                        },
                        "inferText": "David",
                        "inferConfidence": 0.99630755,
                        "type": "NORMAL"
                    },
                    {
                        "name": "fax-checkbox",
                        "valueType": "ALL",
                        "boundingPoly": {
                            "vertices": [
                                {
                                    "x": 87.08151,
                                    "y": 736.90735
                                },
                                {
                                    "x": 140.0801,
                                    "y": 736.91125
                                },
                                {
                                    "x": 140.10016,
                                    "y": 791.9156
                                },
                                {
                                    "x": 87.101494,
                                    "y": 791.9121
                                }
                            ]
                        },
                        "inferText": "",
                        "inferConfidence": 0.99464625,
                        "type": "CHECKBOX",
                        "checked": true
                    }
                ]
            }
        ]
    }
    

    API examples

    The following are some examples of CLOVA OCR API implementation for each language

    • Request with multipart/form-data
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.UUID;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    public class OCRGeneralAPIDemo {
    
    	public static void main(String[] args) {
    		String apiURL = "YOUR_API_URL";
    		String secretKey = "YOUR_SECRET_KEY";
    		String imageFile = "YOUR_IMAGE_FILE";
    
    		try {
    			URL url = new URL(apiURL);
    			HttpURLConnection con = (HttpURLConnection)url.openConnection();
    			con.setUseCaches(false);
    			con.setDoInput(true);
    			con.setDoOutput(true);
    			con.setReadTimeout(30000);
    			con.setRequestMethod("POST");
    			String boundary = "----" + UUID.randomUUID().toString().replaceAll("-", "");
    			con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    			con.setRequestProperty("X-OCR-SECRET", secretKey);
    
    			JSONObject json = new JSONObject();
    			json.put("version", "V2");
    			json.put("requestId", UUID.randomUUID().toString());
    			json.put("timestamp", System.currentTimeMillis());
    			JSONObject image = new JSONObject();
    			image.put("format", "jpg");
    			image.put("name", "demo");
    			JSONArray images = new JSONArray();
    			images.put(image);
    			json.put("images", images);
    			String postParams = json.toString();
    
    			con.connect();
    			DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    			long start = System.currentTimeMillis();
    			File file = new File(imageFile);
    			writeMultiPart(wr, postParams, file, boundary);
    			wr.close();
    
    			int responseCode = con.getResponseCode();
    			BufferedReader br;
    			if (responseCode == 200) {
    				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    			} else {
    				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
    			}
    			String inputLine;
    			StringBuffer response = new StringBuffer();
    			while ((inputLine = br.readLine()) != null) {
    				response.append(inputLine);
    			}
    			br.close();
    
    			System.out.println(response);
    		} catch (Exception e) {
    			System.out.println(e);
    		}
    	}
    
    	private static void writeMultiPart(OutputStream out, String jsonMessage, File file, String boundary) throws
    		IOException {
    		StringBuilder sb = new StringBuilder();
    		sb.append("--").append(boundary).append("\r\n");
    		sb.append("Content-Disposition:form-data; name=\"message\"\r\n\r\n");
    		sb.append(jsonMessage);
    		sb.append("\r\n");
    
    		out.write(sb.toString().getBytes("UTF-8"));
    		out.flush();
    
    		if (file != null && file.isFile()) {
    			out.write(("--" + boundary + "\r\n").getBytes("UTF-8"));
    			StringBuilder fileString = new StringBuilder();
    			fileString
    				.append("Content-Disposition:form-data; name=\"file\"; filename=");
    			fileString.append("\"" + file.getName() + "\"\r\n");
    			fileString.append("Content-Type: application/octet-stream\r\n\r\n");
    			out.write(fileString.toString().getBytes("UTF-8"));
    			out.flush();
    
    			try (FileInputStream fis = new FileInputStream(file)) {
    				byte[] buffer = new byte[8192];
    				int count;
    				while ((count = fis.read(buffer)) != -1) {
    					out.write(buffer, 0, count);
    				}
    				out.write("\r\n".getBytes());
    			}
    
    			out.write(("--" + boundary + "--\r\n").getBytes("UTF-8"));
    		}
    		out.flush();
    	}
    }
    
    import requests
    import uuid
    import time
    import json
    
    api_url = 'YOUR_API_URL'
    secret_key = 'YOUR_SECRET_KEY'
    image_file = 'YOUR_IMAGE_FILE'
    
    request_json = {
        'images': [
            {
                'format': 'jpg',
                'name': 'demo'
            }
        ],
        'requestId': str(uuid.uuid4()),
        'version': 'V2',
        'timestamp': int(round(time.time() * 1000))
    }
    
    payload = {'message': json.dumps(request_json).encode('UTF-8')}
    files = [
      ('file', open(image_file,'rb'))
    ]
    headers = {
      'X-OCR-SECRET': secret_key
    }
    
    response = requests.request("POST", api_url, headers=headers, data = payload, files = files)
    
    print(response.text.encode('utf8'))
    
    
    <?php
      $client_secret = "YOUR_SECRET_KEY";
      $url = "YOUR_API_URL";
      $image_file = "YOUR_IMAGE_FILE";
    
      $params->version = "V2";
      $params->requestId = uniqid();
      $params->timestamp = time();
      $image->format = "jpg";
      $image->name = "demo";
      $images = array($image);
      $params->images = $images;
      $json = json_encode($params);
      
      $boundary = uniqid();
      $is_post = true;
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, $is_post);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $post_form = array("message" => $json, "file" => new CURLFILE($image_file));
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_form);
      $headers = array();
      $headers[] = "X-OCR-SECRET: ".$client_secret;
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      $response = curl_exec($ch);
      $err = curl_error($ch);
      $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      curl_close ($ch);
    
      echo $status_code;
      if($status_code == 200) {
        echo $response;
      } else {
        echo "ERROR: ".$response;
      }
    ?>
    
    const FormData = require('form-data')
    const axios = require('axios')
    
    function requestWithBase64 () {
      axios
        .post(
          '', // APIGW Invoke URL
          {
            images: [
              {
                format: '', // file format
                name: '', // image name
                data: '' // image base64 string(only need part of data). Example: base64String.split(',')[1]
              }
            ],
            requestId: '', // unique string
            timestamp: 0,
            version: 'V2'
          },
          {
            headers: {
              'X-OCR-SECRET': '' // Secret Key 
            }
          }
        )
        .then(res => {
          if (res.status === 200) {
            console.log('requestWithBase64 response:', res.data)
          }
        })
        .catch(e => {
          console.warn('requestWithBase64 error', e.response)
        })
    }
    
    function requestWithFile () {
      const file = '' // image file object. Example: fs.createReadStream('./example.png')
      const message = {
        images: [
          {
            format: '', // file format
            name: '' // file name
          }
        ],
        requestId: '', // unique string
        timestamp: 0,
        version: 'V2'
      }
      const formData = new FormData()
    
      formData.append('file', file)
      formData.append('message', JSON.stringify(message))
    
      axios
        .post(
          '', // APIGW Invoke URL
          formData,
          {
            headers: {
              'X-OCR-SECRET': '', // Secret Key 
              ...formData.getHeaders()
            }
          }
        )
        .then(res => {
          if (res.status === 200) {
            console.log('requestWithFile response:', res.data)
          }
        })
        .catch(e => {
          console.warn('requestWithFile error', e.response)
        })
    }
    
    • Request with application/json
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.UUID;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    public class OCRGeneralAPIDemo {
    
    	public static void main(String[] args) {
    		String apiURL = "YOUR_API_URL";
    		String secretKey = "YOUR_SECRET_KEY";
    
    		try {
    			URL url = new URL(apiURL);
    			HttpURLConnection con = (HttpURLConnection)url.openConnection();
    			con.setUseCaches(false);
    			con.setDoInput(true);
    			con.setDoOutput(true);
    			con.setRequestMethod("POST");
    			con.setRequestProperty("Content-Type", "application/json; charset=utf-8");
    			con.setRequestProperty("X-OCR-SECRET", secretKey);
    
    			JSONObject json = new JSONObject();
    			json.put("version", "V2");
    			json.put("requestId", UUID.randomUUID().toString());
    			json.put("timestamp", System.currentTimeMillis());
    			JSONObject image = new JSONObject();
    			image.put("format", "jpg");
    			image.put("url", "https://kr.object.ncloudstorage.com/ocr-ci-test/sample/1.jpg"); // image should be public, otherwise, should use data
    			// FileInputStream inputStream = new FileInputStream("YOUR_IMAGE_FILE");
    			// byte[] buffer = new byte[inputStream.available()];
    			// inputStream.read(buffer);
    			// inputStream.close();
    			// image.put("data", buffer);
    			image.put("name", "demo");
    			JSONArray images = new JSONArray();
    			images.put(image);
    			json.put("images", images);
    			String postParams = json.toString();
    
    			DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    			wr.writeBytes(postParams);
    			wr.flush();
    			wr.close();
    
    			int responseCode = con.getResponseCode();
    			BufferedReader br;
    			if (responseCode == 200) {
    				br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    			} else {
    				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
    			}
    			String inputLine;
    			StringBuffer response = new StringBuffer();
    			while ((inputLine = br.readLine()) != null) {
    				response.append(inputLine);
    			}
    			br.close();
    
    			System.out.println(response);
    		} catch (Exception e) {
    			System.out.println(e);
    		}
    	}
    
    }
    
    
    import requests
    import uuid
    import time
    import base64
    import json
    
    api_url = 'YOUR_API_URL'
    secret_key = 'YOUR_SECRET_KEY'
    image_url = 'YOUR_IMAGE_URL'
    # image_file = 'YOUR_IMAGE_FILE'
    # with open(image_file,'rb') as f:
    #     file_data = f.read()
    
    request_json = {
        'images': [
            {
                'format': 'jpg',
                'name': 'demo',
    #             'data': base64.b64encode(file_data).decode()
                'url': image_url
            }
        ],
        'requestId': str(uuid.uuid4()),
        'version': 'V2',
        'timestamp': int(round(time.time() * 1000))
    }
    
    payload = json.dumps(request_json).encode('UTF-8')
    headers = {
      'X-OCR-SECRET': secret_key,
      'Content-Type': 'application/json'
    }
    
    response = requests.request("POST", api_url, headers=headers, data = payload)
    
    print(response.text)
    
    
    <?php
      $client_secret = "YOUR_SECRET_KEY";
      $url = "YOUR_API_URL";
      $image_url = "YOUR_IMAGE_URL";
      // $image_file = "YOUR_IMAGE_FILE";
    
      $params->version = "V2";
      $params->requestId = "uuid";
      $params->timestamp = time();
      $image->format = "jpg";
      $image->url = $image_url;
      // $image->data = base64_encode(file_get_contents($image_file));
      $image->name = "demo";
      $images = array($image);
      $params->images = $images;
      $json = json_encode($params);
    
      $is_post = true;
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, $is_post);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
      $headers = array();
      $headers[] = "X-OCR-SECRET: ".$client_secret;
      $headers[] = "Content-Type:application/json; charset=utf-8";
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      $response = curl_exec($ch);
      $err = curl_error($ch);
      $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      curl_close ($ch);
    
      echo $status_code;
      if($status_code == 200) {
        echo $response;
      } else {
        echo "ERROR: ".$response;
      }
    ?>
    
    
    <%
    Function ASPPostJSON()
        Dim objXmlHttp
        Set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
        url = "YOUR_INVOKE_URL"
        secret = "YOUR_SECRET_KEY"
        base64 = """"+ToBase64(getBinaryFile(Server.MapPath("test.jpg")))+""""
        body = "{""images"":[{""format"":""jpg"",""name"":""test 1"",""data"":"+base64+"}],""requestId"":""string"",""timestamp"":0,""version"":""V2"",""lang"":""ko""}"
        objXmlHttp.Open "POST", url, False
        objXmlHttp.SetRequestHeader "Content-Type", "application/json"
        objXmlHttp.SetRequestHeader "X-OCR-SECRET", secret
    
        objXmlHttp.Send body
    
        ASPPostJSON = CStr(objXmlHttp.ResponseText)
    
        Response.write(ASPPostJSON)
        Set objXmlHttp = Nothing
    
    End Function
    
    Function getBinaryFile(strFilePath)
      Dim TypeBinary, oStream
    
      TypeBinary = 1
    
      Set oStream = Server.CreateObject("ADODB.Stream")
    
      oStream.Open
    
      oStream.Type = TypeBinary
      oStream.LoadFromFile strFilePath
    
      getBinaryFile = oStream.read
    
      Set oStream = Nothing
    
    End Function
    
    Function ToBase64(rabyt)
    
         Dim xml: Set xml = CreateObject("MSXML2.DOMDocument.3.0")
         xml.LoadXml "<root />"
         xml.documentElement.dataType = "bin.base64"
         xml.documentElement.nodeTypedValue = rabyt
    
         ToBase64 = xml.documentElement.Text
    
    End Function
    
    call ASPPostJSON()
    %>
    

    Error code

    HttpStatusCodeDescription
    400Request parameters invalid or constraint problem.
    401Api secret(X-CHATBOT-API-KEY) wrong
    500Internal server error

    Error Response Body:

    {
      "code": "Error Code",
      "message": "error details message.",
      "path": "request API path",
      "timestamp": 1570776853475
    }
    
    ErrorCodeDescription
    0001URL is invalid.
    0002Secret key validate failed.
    0011Request body invalid.
    0021Protocol version not support.
    0022Request domain invalid.
    0023API request count reach the upper limit.
    0025Calls to this api have exceeded the rate limit.
    0500Unknown service error.
    0501OCR Service error.
    1021Not found deploy infomation. Please confirm the template is released.

    Was this article helpful?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.