DeepLearning/OCR_

[KR_OCR] 한국어학습을 위한 라벨

new_challenge 2019. 4. 9. 23:52
반응형

라벨 값이 알파벳 대문자와 소문자로 구성된 영어와 달리 새로운 라벨이 필요

학습에 사용하는 데이터를 활용하여 Label_dictionary 생성

 

1. K-Sign Data(AI HUB)

지난번에 AI HUB에서 다운로드한 어노테이션을 활용하여 Dict 생성

 

1> K-Sign데이터로 GTUtility 객체 생성

from data_KSign import GTUtility

gt_util = GTUtility('data/K-Sign/HighQuality/', quality='high')

 - 앞 포스팅에서 만든 GTUtility를 사용하여 객체 생성하기

 

2> 생성된 객체의 text값 가져오기

text = gt_util.text

- 생성 된 객체의 .text 안에 학습에 사용하는 이미지 데이터의 text값이 담겨져있다.

 

<가져온 text리스트의 상위 5개 확인>

 

3> 여러개의 리스트를 하나의 리스트로

from itertools import chain

text = list(chain(*text))

- 값을 처리하기 쉽게 하나의 리스트안에 담아준다

 

<text리스트의 상위 5개를 확인>

 

4> 사이킷 런의 라이브러리 사용

from sklearn.feature_extraction.text import CountVectorizer

vect = CountVectorizer(analyzer='char').fit(text)

- 위의 라이브러리를 사용하여 처리하면 리스트 안의 문자열에 대해 문자 단위로 잘라서 counting 한다

- vect의 vocabulary_의 keys() 값들 속에는 리스트 안에 있던 단어들이 char 형태로 들어가있다

 

< vect.vocabulary_의 keys>

 

5> dict_key 타입을 list로 변경

charset = list(vect.vocabulary_.keys())

- 딕셔너리 키들을 리스트 형태로 타입을 변경한다.

- 리스트 타입일 때 데이터를 더욱 쉽게 조작할 수 있다.

- 현재 charset안에는 한글 이외에 영어나 숫자 공백 등이 포함되어 있다.

 

6> 한글 딕셔너리 생성

import re

pattern = '[^가-힣]' #한글이 아닌 문자는 공백으로 바꿔준다
charset_dict = [re.sub(pattern, "", char) for char in charset]

- 정규표현식을 통해 한글이 아닌 모든 형태는 공백으로 변경한다.

- charset_dict에는 공백과 한글 데이터만 존재

 

7> charset_dict에서 공백 제거

charset_dict2 = [x for x in charset_dict if x!= '']

- 생성된 딕셔너리 리스트에서 공백을 제거하고 한글만 남겨서 새로운 변수에 담는다.

- len(charset_dict2)를 통해 딕셔너리의 갯수를 확인한다.

 

8> 리스트를 str 형태로 타입 변환

str = "".join(charset_dict2)

- 최종적으로 str에는 한글 데이터셋에 대한 라벨값들이 str타입으로 들어가있다.

 

<생성된 dict 확인하기>

 

 

2. 최종 py파일 생성

위에서 진행 한 과정을 하나의 .py 파일로 생성해서 언제든 사용하기 쉽게 저장.

 

ksign_utils.py
import json
import os
from data_KSign import GTUtility
from itertools import chain
from sklearn.feature_extraction.text import CountVectorizer
import re
import string

def getDict239():
    gt_util = GTUtility('data/K-Sign/HighQuality/', quality='high')
    text = gt_util.text
    text = list(chain(*text))
    vect = CountVectorizer(analyzer='char').fit(text)
    charset = list(vect.vocabulary_.keys())
    
    pattern = '[^가-힣]' #한글이 아닌 문자는 공백으로 바꿔준다
    charset_dict = [re.sub(pattern, "", char) for char in charset]
    ksign_dict = [x for x in charset_dict if x!= '']
    ksign_dict = "".join(ksign_dict)
    ksign_dict = ksign_dict + string.digits + ' _'
    
    return ksign_dict

ksign_dict = getDict239()

- 최종 파일에는 0~9까지의 숫자와 CTC loss 계산을 위한 blank가 추가되어 들어간다.

반응형