- 0
- 이니스프리
- 조회 수 657
아시다시피 카카오 REST API 중에 문자영역감지 기능이 있습니다.
https://developers.kakao.com/docs/restapi/vision#%EB%AC%B8%EC%9E%90-%EC%98%81%EC%97%AD-%EA%B0%90%EC%A7%80
간단히 설명드리면 이미지를 POST로 전송하면 문자영역을 감지하여 좌표값을 반환합니다.
즉 문자영역감지 API는 좌표값만 반환하고, 이를 다시 OCR API에 넣어줘야 인식한 문자열을 반환합니다.
카카오 문자영역감지 API를 테스트하기 위해 Wavve에서 고독한 미식가 영상의 한 장면을 캡쳐했습니다 ^^
다음과 같은 스크립트를 작성하여 카카오 API를 이용하여 문자영역을 감지하고, Pillow를 이용하여 감지한 영역을 빨간색 사각형으로 표시했습니다.
processing 함수는 제가 주먹구구식으로 대충 만든 것이라서 허접합니다 ㅠㅠ
import requests, json from PIL import Image, ImageDraw MYAPP_KEY = 'API 키를 입력하세요' def detect_area(filename): API_URL = 'https://kapi.kakao.com/v1/vision/text/detect' headers = {'Authorization': 'KakaoAK {}'.format(MYAPP_KEY)} try: files = { 'file' : open(filename, 'rb')} resp = requests.post(url=API_URL, headers=headers, files=files) resp.raise_for_status() result = resp.json()['result']['boxes'] return result except Exception as e: print(str(e)) def processing(file, box_list): im = Image.open(file) draw = ImageDraw.Draw(im) for box in box_list: for a in range(0, 4): if a <= 2: b = a + 1 else: b = 0 draw.line(box[a] + box[b], fill=128, width=5) return im file = '파일명' box_list = detect_area(file) im = processing(file, box_list) filename = ''.join(file.split('.')[:-1]) + '_detect.' + file.split('.')[-1] im.save(filename)
완벽하지는 않지만 어느 정도 성공적이라고 볼 수 있을까요? ^-^
녹색 간판의 상단이 인식되지 않은 것을 보면, Tesseract의 일부 버전에서는 원형으로 나열된 문자열도 인식하는 옵션이 있었던 것 같은데 카카오 API는 아직 이 부분이 약한 것 같네요.
수 백개의 이미지로 테스트해봤는데요.
인식이 의외로 잘 되는 경우도 있고, 그렇지 않은 경우도 있습니다.
제가 우연히 발견한 한 가지 재미있는 점은 문자영역감지 API에서 인식이 되지 않은 이미지라도, 좌표값을 잘 넣어서 OCR API에 보내면 문자를 인식하는 경우가 적지 않더군요 ㄷㄷ
작성자
댓글 0
권한이 없습니다.