소연의_개발일지
article thumbnail

개발환경:

  • 운영체제: Window 10 64 bit
  • 개발언어: Python 3.11
  • 개발 툴: Jupiter Notebook
  • 추가 패키지: Numpy, Pandas Matplotlib, Sklearn, Tensorflow, keras, Open CV

 

 

공부한 사이트: https://www.kaggle.com/code/adinishad/driver-drowsiness-using-keras

 

driver drowsiness using keras

Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

www.kaggle.com

 

데이터

1. 사진 데이터

사진 출처: https://www.kaggle.com/datasets/dheerajperumandla/drowsiness-dataset?resource=download 

 

Drowsiness_dataset

 

www.kaggle.com

캐글의 사진들을 사용했다.

총 170메가정도 되며

  • 눈 감은 사진
  • 눈 뜬 사진
  • 하품하는 사진
  • 하품하지 않는 사진

이렇게 총 4가지로 이루어져 있다.

 


2. 얼굴 감지 코드 

opencv에서 사용하는 얼굴 감지 코드

출처: https://github.com/opencv/opencv/tree/master/data/haarcascades

 

깃허브에서 다운받을수도 있다. xml 파일은 따로 아래 첨부했다. 

haarcascade_frontalface_default.xml
1.20MB

 

 

 

 

난 이렇게 모든 파일을 모아놓고 시작했다! h5파일과 keras파일은 모델 save할 때 생긴것이고

archive파일은 다운받은 사진이다.

 

 

 

 

 


 

 

 

 

모델 생성하는데 한 30분 넘게 걸린 것 같다. 

 


만난 오류

1. 모델을 로드하려고 하는데 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 31: invalid start byte 유니코드 에러가 나왔다. 

 

오류난 부분

labels_new = ["yawn", "no_yawn", "Closed", "Open"]
IMG_SIZE = 145

def prepare(filepath, face_cas = "haarcascade_frontalface_default.xml"):
    img_array = cv2.imread(filepath, cv2.IMREAD_COLOR)
    img_array = img_array / 255
    resized_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    return resized_array.reshape(-1, IMG_SIZE, IMG_SIZE, 3)

model = tf.keras.models.load_model("drowiness_new6.h5")

 

해결방법

h5가 아닌 keras 형식으로 모델을 저장하고 불러오는 식으로 해결했다.

labels_new = ["yawn", "no_yawn", "Closed", "Open"]
IMG_SIZE = 145

def prepare(filepath, face_cas = "haarcascade_frontalface_default.xml"):
    img_array = cv2.imread(filepath, cv2.IMREAD_COLOR)
    img_array = img_array / 255
    resized_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    return resized_array.reshape(-1, IMG_SIZE, IMG_SIZE, 3)

model = tf.keras.models.load_model("drowiness_new6.keras", compile=False)

 

2. prediction = model.predict_classes(X_test) 이 코드에서 AttributeError: 'Sequential' object has no attribute 'predict_classes' 이 오류가 생겼다.

 

해결방법

TensorFlow 및 Keras의 최신 버전에서 predict_classes 함수는 Sequential 모델에서 제거되었다고 한다.

대신에, predict 함수를 사용하여 클래스 확률을 얻은 다음, 최대 확률의 인덱스를 사용하여 예측된 클래스를 찾을 수 있다.

다음과 같이 predict 함수와 numpy의 argmax 함수를 사용하여 동일한 작업을 수행할 수 있다:

import numpy as np

predictions = model.predict(X_test)
predicted_classes = np.argmax(predictions, axis=1)

 

이제 모델을 생성했으니 내일은 이 모델을 사용하여 졸음방지 코드를 작성할 예정이다.

 

  • gui 제작
  • 웹캠으로 얼굴 인식하기
  • 눈 감은것/뜬 것 인식시키기
profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!