AI를 이용한 노트 필기 앱 : APlus (데이터 전처리-csv 파일생성)
✔️ 목표
- AIHub 에서 제공하는 한국어 글자체 이미지 데이터를 이용하여 사용자의 필기를 인식하는 노트 필기앱을 만드려고 한다.
- 이를 위해 아래와 같이 총 3가지 파일을 다운 받아(약 12GB) 실습을 진행했다.
손글씨
01_handwriting_syllable_images
02_handwriting_syllable_images
(+ handwriting_data_info1.json)
인쇄체
01_printed_syllable_images(+ printed_data_info.json)
✔️ json 파일 이해하기
- 데이터의 label 및 정보가 json 파일 형태로 제공된다.
- name-value 형식의 쌍
- 값들의 순서화된 리스트 형식
json (JavaScript Object Notation) 파일 이란?
: 데이터를 저장, 전송할 때 많이 사용되는 경량의 DATA 교환 형식
(JSON은 데이터 포맷일 뿐이며 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다!)
✔️ CSV 파일 생성 실습
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]
csv 파일 생성
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 모델을 구현하고 학습을 진행시켜보려고 한다.
- pytorch 학습
- VGG 모델 구현
Author And Source
이 문제에 관하여(AI를 이용한 노트 필기 앱 : APlus (데이터 전처리-csv 파일생성)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@danbibibi/AI를-이용한-노트-필기-앱-APlus한글-인식저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)