728x90
반응형
사용할 라이브러리¶
In [115]:
import os
import numpy as np
import pandas as pd
"""open cv"""
import cv2
"""이미지 증식에 사용되는 라이브러리"""
from tensorflow.keras.preprocessing.image import ImageDataGenerator
"""이미지를 numpy array 배열로 변환하는 라이브러리"""
from tensorflow.keras.preprocessing.image import img_to_array
"""이미지 읽어들이는 라이브러리"""
from keras_preprocessing.image import load_img
특정 폴더 내에 모든 원본 이미지를 읽어들이는 함수 정의¶
In [116]:
"""특정 원본 이미지 폴더 내에 모든 이미지 파일을 읽어들여서 이미지 픽셀데이터로 변환해서 리턴하는 함수정의"""
def load_images(directory):
"""각 이미지 별 변환 데이터를 저장할 리스트 변수"""
images = []
"""특정 디렉토리의 모든 파일 읽기"""
for filename in os.listdir(directory):
"""특정 확장자를 가지는 파일만 읽어들이기"""
if filename.endswith((".jpg", ".jped", ".png")):
"""파일명 추출"""
img_path= os.path.join(directory, filename)
#이미지를 3차원 데이터로 변환하기
img= cv2.imread(img_path)
#이미지 데이터의 픽셀 크기를 너비 200, 높이 300로 통일 시키기 (정규화)
img = cv2.resize(img, (200,300))
#변환된 이미지 데이터를 리스트 변수에 담기
images.append(img)
"""numpy 배열로 변환하여 리턴"""
return np.array(images)
In [117]:
# 읽어들인 모든 원본 이미지 각각에 대해서 이미지 증식 및 종속 변수(라벨) 정의 함수
In [118]:
"""
- images: 원본 전체에 대한 각 이미지 데이터
- output_directory : 증식한 이미지를 저장할 폴더위치
- target_filename : 종속변수 데이터를 저장할 (폴더+파일명)
"""
def create_inages(images, ouput_directory, target_filename) :
# 종속변수 데이터를 담을 리스트 변수
target = []
# 원본 이미지 10개에 대한 라벨링 기준
# 1은 위험 인자, 0은 안전인자
target_list = [1,0,1,0,1,1,0,1,1,0]
# 이미지 증식 객체 생성
datagen = ImageDataGenerator( # 이미지 데이터를 0과1 사이의 값으로 정규화하기
rescale = 1./255,
rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.5,
zoom_range=[0.8,2.0],
horizontal_flip=True,
vertical_flip=True,
fill_mode="nearest"
)
###이미지 증식 시키기###
# -i : images의 인덱스 번호
# img: 각 인덱스별 이미지 데이터
for i , img in enumerate(images):
print(f"------------------[{i+1}/{len(images)}] 번째 증식 중------------")
### 3차원 이미지 데이터를 4차원으로 변환하기
img = img.reshape((1,) + img.shape)
# 증식된 이미지를 저장할 파일면 정의
save_prefix = "train_img_"+str(i)
# 각 이미지 별로 생성(증식) 할 이미지의 갯수 정의
create_img_cnt = 20
# 이미지 증식 및 파일 저장 시키기
for batch in datagen.flow(img,
save_to_dir=ouput_directory,
save_prefix=save_prefix,
save_format="png"
):
# 증식된 이미지 별로 [종속변수]로 사용할 값을 리스트에 담기
target.append(target_list[i])
# 생성할 이미지 갯수만큼 만들어지면 반복 종료시키기
create_img_cnt -= 1
if create_img_cnt ==0:
break
### 종속 변수 리스트를 numpy 배열 타입으로 변환하기
target = np.array(target)
# 종속 변수 리스트를 numpy 파일로 저장시키기
# - target_filename : 저장할 폴더+ 파일명
# - target : 종속변수 리스트
np.save(target_filename, target)
"""
너무 많은 증식을 할 경우 원하는 갯수만 큼 증식이 안되는 경우가 있음
- 증식을 만드는 시간과, 시스템 폴어데 저장되는 시간차로 발생
- 많은 양을 만들 경우 조금씩 여러번에 걸쳐서 증식..
"""
Out[118]:
'\n너무 많은 증식을 할 경우 원하는 갯수만 큼 증식이 안되는 경우가 있음\n- 증식을 만드는 시간과, 시스템 폴어데 저장되는 시간차로 발생\n- 많은 양을 만들 경우 조금씩 여러번에 걸쳐서 증식..\n'
증식한 이미지 폴더 내에 모든 이미지 파일을 차원 데이터로 변환 및 저장하는 함수¶
In [119]:
# 증식된 파일이 저장된 폴더 내 모든 파일에 대해서
# 4차원 데이터로 변환하여 numpy 배열 형태로 저장시키기
# - output_directory : 증식된 파일이 위치한 폴더
# - save_4d_filename : 저장할 파일명
def save_4d_data(output_directory, save_4d_filename):
# 4차원 데이터를 담을 리스트 변수
data= []
# 증식된 모든 파일 읽어들이기
for filename in os.listdir(output_directory):
if filename.endswith((".jpg",".jpeg",".png")):
img_path = os.path.join(output_directory, filename)
#3차원 데이터로 읽어들이기
img = cv2.imread(img_path)
# 픽셀 정규화
img = cv2.resize(img, (200,300))
# print(img)
# 리스트에 담기
data.append(img)
data = np.array(data)
print("최종처리결과 :", data.shape)
np.save(save_4d_filename, data)
함수 호출¶
In [120]:
"""특정 폴더 내에 모든 이미지 파일 로드하여, 이미지 데이터로 변환하는 함수 호출"""
# 폴더 위치 지정
input_directory = "./data/01_org_img/"
# 함수 호출하기
images = load_images(input_directory)
images.shape
Out[120]:
(10, 300, 200, 3)
In [121]:
"""이미지 증식 및 파일 저장, 종속변수 생성 및 파일 저장 함수 호출"""
# 증식된 이미지 파일 저장 폴더
output_directory = "./data/02_train_img/"
# 종속변수 데이터 파일명
# numpy 파일의 확장자는 보통 .npy를 사용합니다.
traget_filename = "./data/03_train_4d_data/target_data.npy"
# 함수 호출 하기
create_inages(images, ouput_directory, target_filename)
------------------[1/10] 번째 증식 중------------ ------------------[2/10] 번째 증식 중------------ ------------------[3/10] 번째 증식 중------------ ------------------[4/10] 번째 증식 중------------ ------------------[5/10] 번째 증식 중------------ ------------------[6/10] 번째 증식 중------------ ------------------[7/10] 번째 증식 중------------ ------------------[8/10] 번째 증식 중------------ ------------------[9/10] 번째 증식 중------------ ------------------[10/10] 번째 증식 중------------
In [122]:
"""증식된 이미지 각각에 대한 이미지 데이터로 변환하여 numpy 배열 파일로 저장하기"""
save_4d_filename = "./data/03_train_4d_data/train_4d_data.npy"
save_4d_data(output_directory, save_4d_filename)
최종처리결과 : (200, 300, 200, 3)
In [123]:
"""numpy로 저장된 독립변수와 종속변수 데이터 확인하기"""
train = np.load(save_4d_filename)
target = np.load(target_filename)
train.shape, target.shape
Out[123]:
((200, 300, 200, 3), (200,))
In [124]:
train.shape
Out[124]:
(200, 300, 200, 3)
4차원 이미지 데이터와 종속변수 데이터를 읽어들여서 CNN 훈련시키기¶
In [125]:
## 사용할 라이브러리 다시 정의
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
In [126]:
"""
-독립변수 : image_data, 종속변수 : label_data
-픽셀 데이터 정규화 (0~1 범위)
-훈련 및 테스트 8:2로 분리
사용할 변수 x_train, x_test, y_train, y_test
"""
image_data= np.load("./data/03_train_4d_data/train_4d_data.npy")
label_data= np.load("./data/03_train_4d_data/target_data.npy")
image_data = image_data /255.0
image_data
Out[126]:
array([[[[0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], ..., [0.96078431, 0.97254902, 0.99215686], [0.96078431, 0.97254902, 0.99215686], [0.96078431, 0.97254902, 0.99215686]], [[0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], ..., [0.96078431, 0.97254902, 0.99215686], [0.96078431, 0.97254902, 0.99215686], [0.96078431, 0.97254902, 0.99215686]], [[0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], ..., [0.96078431, 0.97254902, 0.99215686], [0.96078431, 0.97254902, 0.99215686], [0.96078431, 0.97254902, 0.99215686]], ..., [[0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], ..., [0.10196078, 0.09803922, 0.12156863], [0.10196078, 0.09803922, 0.12156863], [0.10196078, 0.09803922, 0.12156863]], [[0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], ..., [0.10196078, 0.09803922, 0.12156863], [0.10196078, 0.09803922, 0.12156863], [0.10196078, 0.09803922, 0.12156863]], [[0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], ..., [0.10196078, 0.09803922, 0.12156863], [0.10196078, 0.09803922, 0.12156863], [0.10196078, 0.09803922, 0.12156863]]], [[[0.11372549, 0.10980392, 0.1372549 ], [0.10980392, 0.10588235, 0.12941176], [0.11372549, 0.11372549, 0.1372549 ], ..., [0.1254902 , 0.12156863, 0.14117647], [0.1254902 , 0.12156863, 0.14117647], [0.1254902 , 0.12156863, 0.14117647]], [[0.11372549, 0.10980392, 0.1372549 ], [0.10980392, 0.10588235, 0.12941176], [0.11372549, 0.11372549, 0.1372549 ], ..., [0.1254902 , 0.12156863, 0.14117647], [0.1254902 , 0.12156863, 0.14117647], [0.1254902 , 0.12156863, 0.14117647]], [[0.11372549, 0.10980392, 0.1372549 ], [0.10980392, 0.10588235, 0.12941176], [0.11372549, 0.11372549, 0.1372549 ], ..., [0.1254902 , 0.12156863, 0.14117647], [0.1254902 , 0.12156863, 0.14117647], [0.1254902 , 0.12156863, 0.14117647]], ..., [[0.95686275, 0.96862745, 0.99607843], [0.96078431, 0.97254902, 0.99607843], [0.96078431, 0.97254902, 1. ], ..., [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275]], [[0.95686275, 0.96862745, 0.99607843], [0.96078431, 0.97254902, 0.99607843], [0.96078431, 0.97254902, 1. ], ..., [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275]], [[0.95686275, 0.96862745, 0.99607843], [0.96078431, 0.97254902, 0.99607843], [0.96078431, 0.97254902, 1. ], ..., [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275], [0.86666667, 0.89411765, 0.95686275]]], [[[0.98039216, 0.98823529, 0.99215686], [0.98039216, 0.98823529, 0.99215686], [0.98431373, 0.98823529, 0.99607843], ..., [0.94901961, 0.96078431, 0.99607843], [0.94901961, 0.96078431, 1. ], [0.94901961, 0.96078431, 1. ]], [[0.98431373, 0.98823529, 0.99607843], [0.98431373, 0.98823529, 0.99607843], [0.98431373, 0.98823529, 0.99607843], ..., [0.94901961, 0.95686275, 1. ], [0.94509804, 0.95294118, 1. ], [0.94509804, 0.95294118, 1. ]], [[0.98823529, 0.99215686, 1. ], [0.98823529, 0.99215686, 1. ], [0.98823529, 0.99215686, 1. ], ..., [0.94509804, 0.95294118, 1. ], [0.94509804, 0.95294118, 1. ], [0.94509804, 0.95294118, 1. ]], ..., [[0.11372549, 0.10980392, 0.13333333], [0.11372549, 0.10980392, 0.13333333], [0.11372549, 0.10980392, 0.13333333], ..., [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ]], [[0.10980392, 0.10588235, 0.12941176], [0.10980392, 0.10588235, 0.12941176], [0.10980392, 0.10588235, 0.12941176], ..., [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ]], [[0.10588235, 0.10196078, 0.1254902 ], [0.10588235, 0.10196078, 0.1254902 ], [0.10588235, 0.10196078, 0.1254902 ], ..., [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ], [0.12156863, 0.11764706, 0.1372549 ]]], ..., [[[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ], ..., [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843]], [[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ], ..., [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843]], [[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ], ..., [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843]], ..., [[0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], ..., [0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ]], [[0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], ..., [0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ]], [[0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], ..., [0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ]]], [[[0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], ..., [0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ]], [[0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], ..., [0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ]], [[0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], ..., [0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ]], ..., [[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ], ..., [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843]], [[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ], ..., [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843]], [[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ], ..., [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843]]], [[[0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], ..., [1. , 1. , 1. ], [1. , 1. , 1. ], [0.99607843, 0.99607843, 0.99607843]], [[0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], ..., [1. , 1. , 1. ], [1. , 1. , 1. ], [0.99607843, 0.99607843, 0.99607843]], [[0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], [0.99607843, 0.99607843, 0.99607843], ..., [1. , 1. , 1. ], [1. , 1. , 1. ], [0.99607843, 0.99607843, 0.99607843]], ..., [[0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ], ..., [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157]], [[0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ], ..., [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157]], [[0. , 0. , 0. ], [0. , 0. , 0. ], [0. , 0. , 0. ], ..., [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157], [0.00392157, 0.00392157, 0.00392157]]]])
In [127]:
X_train, X_test, y_train, y_test= train_test_split(image_data, label_data, test_size=0.2, random_state=42)
x_train.shape, x_test.shape, y_train.shape, y_test.shape
Out[127]:
((160, 300, 200, 3), (40, 300, 200, 3), (160,), (40,))
In [128]:
"""
<CNN 모델 생성하기>
- 입력계층 : CNN모델 사용, 출력크기32 , 커널사이즈 3, 활성화 함수 렐루
- 은닉계층 : MaxPooling도 사용해보시고, 전처리 1차원 계층도 자유롭게 사용해서 생성
- 출력계층 : 직접
<모델 설정>
- 옵티마이저 아담, 손실함수: 각자 , 출력 값 : 각자
<훈련>
-반복횟수 15번만 배치사이즈 32개 사용
<테스트 데이터로 검증>
"""
Out[128]:
'\n<CNN 모델 생성하기>\n- 입력계층 : CNN모델 사용, 출력크기32 , 커널사이즈 3, 활성화 함수 렐루\n- 은닉계층 : MaxPooling도 사용해보시고, 전처리 1차원 계층도 자유롭게 사용해서 생성\n- 출력계층 : 직접\n\n<모델 설정>\n- 옵티마이저 아담, 손실함수: 각자 , 출력 값 : 각자\n<훈련>\n-반복횟수 15번만 배치사이즈 32개 사용\n<테스트 데이터로 검증>\n'
In [176]:
import tensorflow as tf
from tensorflow import keras
tf.keras.utils.set_random_seed(42)
tf.config.experimental.enable_op_determinism()
In [177]:
model = keras.Sequential()
In [178]:
model.add(keras.layers.Conv2D( kernel_size=3, filters=32, activation="relu", padding="same", strides=1, input_shape=(300,200,3)))
model.add(keras.layers.MaxPool2D(pool_size=2, strides=2))
model.add(keras.layers.Conv2D(kernel_size=3,filters=64, activation="relu", padding="same", strides=1, ))
model.add(keras.layers.MaxPool2D(pool_size=2, strides=2))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(64, activation="relu"))
model.add(keras.layers.Dropout(0.5))
model.add(keras.layers.Dense(1, activation="sigmoid"))
In [179]:
model.summary()
Model: "sequential_11" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_26 (Conv2D) (None, 300, 200, 32) 896 max_pooling2d_22 (MaxPoolin (None, 150, 100, 32) 0 g2D) conv2d_27 (Conv2D) (None, 150, 100, 64) 18496 max_pooling2d_23 (MaxPoolin (None, 75, 50, 64) 0 g2D) flatten_10 (Flatten) (None, 240000) 0 dense_20 (Dense) (None, 64) 15360064 dropout_10 (Dropout) (None, 64) 0 dense_21 (Dense) (None, 1) 65 ================================================================= Total params: 15,379,521 Trainable params: 15,379,521 Non-trainable params: 0 _________________________________________________________________
In [180]:
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
# checkpoint_cb = keras.callbacks.ModelCheckpoint("./model/model.best_CNN_Model.h5")
# early_stopping_cb =keras.callbacks.EarlyStopping(patience=2, restore_best_weights=True)
In [181]:
"""
validation_split =0.2 : 훈련데이터에서 20%를 검증 데이터로 사용하라는 의미
fit() 함수 실행시 내부적으로 다시 분류하여 사용함
"""
history= model.fit(X_train, y_train, validation_split=0.2, batch_size=64, epochs=15)
Epoch 1/15 2/2 [==============================] - 5s 2s/step - loss: 7.7781 - accuracy: 0.5547 - val_loss: 2.3543 - val_accuracy: 0.5938 Epoch 2/15 2/2 [==============================] - 4s 2s/step - loss: 4.5991 - accuracy: 0.4609 - val_loss: 4.1300 - val_accuracy: 0.4062 Epoch 3/15 2/2 [==============================] - 4s 2s/step - loss: 2.9049 - accuracy: 0.4141 - val_loss: 0.7279 - val_accuracy: 0.5000 Epoch 4/15 2/2 [==============================] - 4s 2s/step - loss: 0.7527 - accuracy: 0.6094 - val_loss: 0.6754 - val_accuracy: 0.5938 Epoch 5/15 2/2 [==============================] - 4s 2s/step - loss: 0.6633 - accuracy: 0.6016 - val_loss: 0.6393 - val_accuracy: 0.5938 Epoch 6/15 2/2 [==============================] - 4s 2s/step - loss: 0.5840 - accuracy: 0.6797 - val_loss: 0.6256 - val_accuracy: 0.5938 Epoch 7/15 2/2 [==============================] - 4s 2s/step - loss: 0.5630 - accuracy: 0.6641 - val_loss: 0.6096 - val_accuracy: 0.5938 Epoch 8/15 2/2 [==============================] - 4s 2s/step - loss: 0.5061 - accuracy: 0.7266 - val_loss: 0.5730 - val_accuracy: 0.6562 Epoch 9/15 2/2 [==============================] - 4s 2s/step - loss: 0.4249 - accuracy: 0.8359 - val_loss: 0.5364 - val_accuracy: 0.6875 Epoch 10/15 2/2 [==============================] - 4s 2s/step - loss: 0.3515 - accuracy: 0.8984 - val_loss: 0.5115 - val_accuracy: 0.7188 Epoch 11/15 2/2 [==============================] - 4s 2s/step - loss: 0.3169 - accuracy: 0.8906 - val_loss: 0.4531 - val_accuracy: 0.7812 Epoch 12/15 2/2 [==============================] - 4s 2s/step - loss: 0.2166 - accuracy: 0.9609 - val_loss: 0.4291 - val_accuracy: 0.8125 Epoch 13/15 2/2 [==============================] - 4s 2s/step - loss: 0.1955 - accuracy: 0.9297 - val_loss: 0.4055 - val_accuracy: 0.8125 Epoch 14/15 2/2 [==============================] - 4s 2s/step - loss: 0.1594 - accuracy: 0.9609 - val_loss: 0.3389 - val_accuracy: 0.8438 Epoch 15/15 2/2 [==============================] - 3s 2s/step - loss: 0.1310 - accuracy: 0.9766 - val_loss: 0.3403 - val_accuracy: 0.8750
In [192]:
X_train.shape
Out[192]:
(160, 300, 200, 3)
In [182]:
# 테스트 데이터로 검증
model.evaluate(X_test, y_test)
2/2 [==============================] - 0s 59ms/step - loss: 0.2210 - accuracy: 0.9500
Out[182]:
[0.22104156017303467, 0.949999988079071]
응용 ) CNN 모델을 이용해서 위험한 사람 확인 및 비프음 발생시키기¶
In [230]:
# 사용 라이브러리
import os
import platform
# 윈도우 os인 경우에만 사용 mac은 제외
import winsound
import time
In [255]:
"""
예측할 이미지 불러오기
"""
pred_img = cv2.imread("./data/04_detection_img/0_1.png")
# pred_img = cv2.imread("./data/04_detection_img/1_0.png")
pred_img =cv2.resize(pred_img, (200,300))
pred_img= pred_img/255.0
pred_data= pred_img.reshape((1,)+pred_img.shape)
pred_data.shape
y_pred =model.predict(pred_data)
pred_data.shape
# y_pred = 1 if y_pred >= 0.5 else 0
if y_pred[0] >0.5:
print(f"인식률 [{y_pred[0]}] : 위험한 분이셔요 ~ !!")
"""비프음 발생시키기"""
# 윈도우
# 1000: 소리 주파수 (소리 높낮이 조정값)
# 보통 사람의 청각 범위 : 20Hz~20 , 000Hz 정도
# 500 : 지속시간 (1000은 1초 , 500은 0.5초)
if platform.system() =="Windows":
for i in range(1):
winsound.Beep(260,100)
winsound.Beep(290,100)
winsound.Beep(330,100)
winsound.Beep(340,100)
winsound.Beep(380,100)
winsound.Beep(430,100)
winsound.Beep(490,100)
winsound.Beep(510,100)
time.sleep(1)
# 맥
elif platform.system() == "Darwin":
os.system("osascript -3 'beep'")
else:
print (f"인식률 [{y_pred[0]}] : 착한분 .. ~^'ㅂ'^~")
인식률 [[0.995429]] : 위험한 분이셔요 ~ !!
In [ ]:
In [ ]:
728x90
반응형
'딥러닝' 카테고리의 다른 글
이미지_증식_테스트 (0) | 2024.01.12 |
---|---|
YOLO_Camera_객체탐지 (3) | 2024.01.11 |
YOLO_설치_및_객체탐지 (0) | 2024.01.10 |
LSTM_GRU (1) | 2024.01.08 |
합성곱신경망(CNN)을_이용한_이미지_분류 (1) | 2024.01.08 |