• 목록
  • 아래로
  • 위로

아시다시피 카카오 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 함수는 제가 주먹구구식으로 대충 만든 것이라서 허접합니다 ㅠㅠ


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import requests, json
from PIL import Image, ImageDraw
 
MYAPP_KEY = 'API 키를 입력하세요'
 
def detect_area(filename):
    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에 보내면 문자를 인식하는 경우가 적지 않더군요 ㄷㄷ

작성자
이니스프리 119 Lv. (2%) 4488190/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

공유

facebooktwitterpinterestbandkakao story
퍼머링크

댓글 0

권한이 없습니다.