이전글에서 이어집니다.
3-4 모델 불러오기, 정확도 확인
def load_model():
from keras.models import load_model
model = load_model('BrailleNet.h5')
return model
def acc_chk(model, val):
acc = model.evaluate_generator(val)[1]
print('model accuracy: {}'.format(round(acc,4)))
짧지만 중요한 부분중 하나입니다. 위에서 모델을 만들며 만든 모델은 Modelcheckpoint 콜백에 의해 저장됩니다.
저장된 모델을 불러오고 그 모델의 정확도를 검증합니다.
검증데이터는 따로 만들어서 불러와도 되고 이전에 만든 val_generator를 써도 됩니다.
3-5 사진 자르기
사진으로 들어오는 점자는 가로로 길고 세로로 짧은 이미지가 들어오도록 처리해야 합니다.
실생활에 적용하려면 모델을 만들어 예측하는 것보다 이미지를 처리해 사용할 수 있게 만드는 작업이 더 중요할 것입니다. 다만 이미 그런 전처리 과정을 다 수행했다는 전제하에 예시 이미지를 사용하겠습니다.
최종 확인에사용될 이미지로 hello world를 점자로 바꿨습니다. 해상도는 1320*120 입니다.
해상도를 보면 알 수 있지만 세로길이 * 글자수 를 할경우 가로 길이가 나옵니다.
실제 점자는 세로로 약간 긴비율을 가지지만, 간격이 일정하기 때문에 전체 길이를 보면 글자수를 추정 할 수 있습니다.
아니면 점자를 찾아서 자르는 모델도 만들거나..
실제로 이미지데이터를 다루는것 역시 ImagedataGenerator를 이용하여 불러온뒤 가공하면 더욱 빠르게, 효율적으로 처리할 수 있지만 눈으로 잘리는 과정을 확인 하기 위해 실제로 파일을 생성하여 확인합니다.
from PIL import Image
import os
이미지를 다루는 PIL과 파일 및 경로를 다룰 os를 import 합니다.
class img_devide():
def __init__(self,img_path):
self.img_path = img_path
self.path = ''
self.call_num = 0
self.lengh = 0
self.width = 0
self.height = 0
self.img = ''
이미지경로를 받아오는 클래스를 만들었습니다.
def create_dir(self):
try:
try:
os.mkdir('./test/')
except:
pass
os.mkdir('./test/a')
print('create new dir')
except:
print('already exist')
pass
self.path = './test/a'
def set_image(self):
self.img = Image.open(self.img_path)
self.width = self.img.size[0]
self.height = self.img.size[1]
self.lengh = int(self.width / self.height)
def remove_file(self):
try:
os.remove(self.path+'/'+str(self.call_num-1)+'.jpg')
except:
pass
def remove_dir(self) :
try:
os.rmdir(self.path)
except :
print('fail')
우선 파일이 생성될 경로를 만들고 그 경로를 지정해 둡니다. 또한 이미지를 열어 이미지의 가로, 세로, 점자의 길이를 측정합니다. 필요없는 파일이나 경로를 지우기 위한 함수도 만들어 두었습니다.
def devide_img(self):
self.img = Image.open(self.img_path)
area = (0+self.call_num*self.height,0,self.width/self.lengh*(self.call_num+1),self.height)
cropped_img = self.img.crop(area)
cropped_img.save(self.path + '/'+str(self.call_num)+'.jpg')
self.call_num+=1
이미지를 자르기 위한 함수입니다. 이미지를 열어 정해진 area로 자르고(crop) 저장합니다.
call_num 값을 추가하여 area는 함수가 호출 될때마다 한칸씩 옆으로 이동합니다.
이하 코드 전문
from PIL import Image
import os
class img_devide():
def __init__(self,img_path):
self.img_path = img_path
self.path = ''
self.call_num = 0
self.lengh = 0
self.width = 0
self.height = 0
self.img = ''
def create_dir(self):
try:
os.mkdir('./test/a')
print('create new dir')
except:
print('already exist')
pass
self.path = './test/a'
def devide_img(self):
self.img = Image.open(self.img_path)
area = (0+self.call_num*self.height,0,self.width/self.lengh*(self.call_num+1),self.height)
cropped_img = self.img.crop(area)
cropped_img.save(self.path + '/'+str(self.call_num)+'.jpg')
self.call_num+=1
def set_image(self):
self.img = Image.open(self.img_path)
self.width = self.img.size[0]
self.height = self.img.size[1]
self.lengh = int(self.width / self.height)
def remove_file(self):
try:
os.remove(self.path+'/'+str(self.call_num-1)+'.jpg')
except:
pass
def remove_dir(self) :
try:
os.rmdir(self.path)
except :
print('fail')
'Back > Deep Learning' 카테고리의 다른 글
[Python] [CNN]점자번역 프로그램(7) - 정리 (1) | 2020.09.03 |
---|---|
[Python] [CNN]점자번역 프로그램(6) (0) | 2020.09.02 |
[Python] [CNN]점자번역 프로그램(4) (0) | 2020.09.02 |
[Python] [CNN]점자번역 프로그램(3) (0) | 2020.09.02 |
[Python] [CNN]점자번역 프로그램(2) (5) | 2020.09.02 |