이전 포스트에 이어 이번에는 General 도메인을 이용, 실제 이미지에서 텍스트를 읽어오는 과정을 서술한다.
이전 포스트는 아래 링크를 참고하기 바란다.
[Development/OCR] - Naver CLOVA AI - OCR 사용하기 (1) - NCP 가입하기
1. 도메인 생성
적당한 도메인 이름과 코드를 넣어 General 도메인을 생성한다.
다시 한번 언급하자면, 각 도메인의 차이점은 다음과 같다.
- General 도메인 : 입력 이미지에서 텍스트만 추출하는 Text OCR
- Template 도메인: 입력 이미지에서 판독할 영역을 직접 지정해 영역에 포함된 텍스트만 추출
2. API 생성
생성된 도메인의 '동작' 컬럼에서 'Text OCR' 을 누르면 다음과 같은 화면이 나온다.
생성을 눌러 'Secret Key' 를 발급받고, 이어서 'APIGW 자동연동' 을 클릭하면 다음과 같은 화면이 나온다.
(API Gateway 이용 신청이 되어 있어야 한다는 팝업이 나오는데, 우린 이미 이용 신청을 했으니 '확인' 을 누른다)
이렇게 API 생성을 마무리했다.
3. API 사용
이제 생성된 API를 이용해 Python으로 샘플코드를 작성, 테스트한다.
먼저 아래 링크의 'API 참조서'에서 Python 코드 부분으로 이동한다.
apidocs.ncloud.com/ko/ai-application-service/ocr/ocr/
위 코드와 함께 Request JSON 예시도 함께 확인한다.
아래는 읽어온 json 형식의 결과를 json 파일로 저장하는 것까지 구현한 샘플코드이다.
import requests
import uuid
import time
import json
api_url = 'YOUR_API_URL'
secret_key = 'YOUR_SECRET_KEY'
image_file = 'input/picture1.png'
output_file = 'output/output1.json'
request_json = {
'images': [
{
'format': 'png',
'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)
res = json.loads(response.text.encode('utf8'))
print(res)
with open(output_file, 'w', encoding='utf-8') as outfile:
json.dump(res, outfile, indent=4, ensure_ascii=False)
위 코드에서 사용된 입력 이미지와 결과 파일은 다음과 같다.
너무 길어서 중간 부분부터 생략하긴 했지만, 나름 정확하게 인식하는 것을 볼 수 있다.
{
"version": "V2",
"requestId": "dcda1db5-7a19-41bb-8a77-dbb2e95a5050",
"timestamp": 1617947318461,
"images": [
{
"uid": "33894645ee8e4b8094fe309e6efd30a2",
"name": "demo",
"inferResult": "SUCCESS",
"message": "SUCCESS",
"validationResult": {
"result": "NO_REQUESTED"
},
"fields": [
{
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 14.0,
"y": 20.0
},
{
"x": 273.0,
"y": 20.0
},
{
"x": 273.0,
"y": 95.0
},
{
"x": 14.0,
"y": 95.0
}
]
},
"inferText": "CLOVA",
"inferConfidence": 1.0,
"type": "NORMAL",
"lineBreak": false
},
{
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 286.0,
"y": 20.0
},
{
"x": 454.0,
"y": 20.0
},
{
"x": 454.0,
"y": 93.0
},
{
"x": 286.0,
"y": 93.0
}
]
},
"inferText": "OCR",
"inferConfidence": 1.0,
"type": "NORMAL",
"lineBreak": true
},
{
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 55.0,
"y": 213.0
},
{
"x": 107.0,
"y": 213.0
},
{
"x": 107.0,
"y": 245.0
},
{
"x": 55.0,
"y": 245.0
}
]
},
"inferText": "참고",
"inferConfidence": 1.0,
"type": "NORMAL",
"lineBreak": true
},
{
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 59.0,
"y": 357.0
},
{
"x": 146.0,
"y": 357.0
},
{
"x": 146.0,
"y": 395.0
},
{
"x": 59.0,
"y": 395.0
}
]
},
"inferText": "네이버",
"inferConfidence": 1.0,
"type": "NORMAL",
"lineBreak": false
},
{
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 150.0,
"y": 359.0
},
{
"x": 267.0,
"y": 359.0
},
{
"x": 267.0,
"y": 395.0
},
{
"x": 150.0,
"y": 395.0
}
]
},
"inferText": "클라우드",
"inferConfidence": 1.0,
"type": "NORMAL",
"lineBreak": false
},
{
"valueType": "ALL",
"boundingPoly": {
"vertices": [
{
"x": 269.0,
"y": 357.0
},
{
"x": 385.0,
"y": 357.0
},
{
"x": 385.0,
"y": 395.0
},
{
"x": 269.0,
"y": 395.0
}
]
},
"inferText": "플랫폼의",
"inferConfidence": 0.9999,
"type": "NORMAL",
"lineBreak": false
},
...
]
}
]
}
여기까지 General 도메인을 이용한 OCR 기능을 확인했다.
참고로, Request JSON이나 API 활용 예시는 다음을 참고하면 된다.
apidocs.ncloud.com/ko/ai-application-service/ocr/ocr/
또, 위 예시 코드는 아래 경로의 Jupyter Notebook으로 작성된 페이지에서 결과를 직접 확인할 수 있다.
github.com/DHDaveB/TIL-Getting-Started-With-OCR/blob/main/naver-clova-ocr/general-ocr-sample.ipynb
다음 포스트에서는 Template 도메인을 이용한 OCR 기능을 확인해 보겠다.
[Development/OCR] - Naver CLOVA AI - OCR 사용하기 (3) - Template 도메인
'Development > OCR' 카테고리의 다른 글
Tesseract OCR 사용하기 (with python on Windows) (0) | 2021.04.15 |
---|---|
Naver CLOVA AI - OCR 사용하기 (3) - Template 도메인 (0) | 2021.04.12 |
Naver CLOVA AI - OCR 사용하기 (1) - NCP 가입하기 (0) | 2021.04.12 |
Google Cloud Vision API - OCR 사용하기 (1) (0) | 2021.04.07 |
Google Cloud Vision API - OCR 사용하기 (2) (0) | 2021.04.07 |