손글씨
01_handwriting_syllable_images
02_handwriting_syllable_images
(+ handwriting_data_info1.json)
인쇄체
01_printed_syllable_images(+ printed_data_info.json)
json (JavaScript Object Notation) 파일 이란?
: 데이터를 저장, 전송할 때 많이 사용되는 경량의 DATA 교환 형식
(JSON은 데이터 포맷일 뿐이며 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다!)
import os
import json
import pandas as pd
from tqdm import tqdm # 진행상황을 피드백으로 제공
cd data
# 압축 해제
# !unzip -qq 01_handwriting_syllable_images.zip
# !unzip -qq 02_handwriting_syllable_images.zip
with open('handwriting_data_info1.json', 'r', encoding='utf-8') as handwriting_data:
data_01 = json.load(handwriting_data)
type(data_01)
data_01.keys()
data_01['info']
data_01['images'][:2]
data01_anno = data_01['annotations']
print(len(data01_anno))
data01_anno[0]
anno_list = [] # annotation을 담을 배열
id_list = [] # 이미지 id를 담을 배열
syllable_list = [] # 음절을 담을 배열
for i in range(0, len(data01_anno)):
if data01_anno[i]['attributes']['type'] == '글자(음절)':
anno_list.append(data01_anno[i])
id_list.append(data01_anno[i]['id'])
syllable_list.append(data01_anno[i]['text'])
anno_list[:5]
# 경로 + label 저장할 list
syllable_file = []
# 1_syllable 파일 경로 + label
syllable1_filename = os.listdir("1_syllable")
syllable1_filename[:5]
for i in tqdm(range(0,len(syllable1_filename))):
if syllable1_filename[i][:-4] in id_list:
path = '1_syllable/' + syllable1_filename[i]
number = id_list.index(syllable1_filename[i][:-4]) # 배열에서 원하는 id의 위치 찾기
text = syllable_list[number]
syllable_file.append([path, text])
print(len(syllable_file))
syllable_file[:5]
# 2_syllable 파일 경로 + labe
syllable2_filename = os.listdir("2_syllable")
syllable2_filename[:5]
for i in tqdm(range(0,len(syllable2_filename))):
if syllable2_filename[i][:-4] in id_list:
path = '2_syllable/' + syllable2_filename[i]
number = id_list.index(syllable2_filename[i][:-4]) # 배열에서 원하는 id의 위치 찾기
text = syllable_list[number]
syllable_file.append([path, text])
print(len(syllable_file)) # 729,249
syllable_file[135842:135847]
한글 완성형 2350자만 사용 : output_class
= 가 ... 힝
hangeul_2350 = []
# print(syllable_file[0][1])
for syllable in tqdm(syllable_file):
if syllable[1] in output_class:
hangeul_2350.append(syllable)
print(len(hangeul_2350))
hangeul_2350[:5]
# dataframe으로 변환
df = pd.DataFrame(hangeul_2350)
# rename
df.columns = ['img_path', 'label']
df.head()
# csv 파일로 저장
df.to_csv('hand_hangeul_2350.csv', index=False, encoding='utf-8-sig')
위와 같은 과정을 인쇄체에도 적용해주고 다음과 같이 concat을 통해 합친 후 최종 csv 파일을 만들어 주었다.
df1 = pd.read_csv('./hand_hangeul_2350.csv')
df2 = pd.read_csv('./printed_hangeul_2350.csv')
df = pd.concat([df1, df2]) # 두 data frame을 합친다.
df.to_csv('hangeul_2350.csv', index=False, encoding='utf-8-sig')
다음과 같이 결과물이 나온다! 이미지는 잘렸지만 실제로는 264474 rows
× 2 columns
shape을 갖는다
다음 번에는 만들어진 csv 파일을 이용하여 pytorch로 VGG 모델을 구현하고 학습을 진행시켜보려고 한다.