[Toy project] Deep Drowsiness Detection - 졸음 감지 part1

반응형

pytorch 를 사용하여 웹캠을 통해 사람이 졸고있는 모습을 탐지하는 프로그램을 만들어보기로 했다.

 

Gameplan

1. Ultralytics YOLO 설치

2. 탐지를 하는 프로그램을 만들어 봅시다.

3. 졸음 감지 모델을 튜닝

4. 리얼 타임 퍼포먼스

 

Ultralytics YOLOv5

https://github.com/ultralytics/yolov5

 

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.

github.com

YOLOv5 모델은 손쉽게 학습 및 추론 할 수 있습니다. 

간단하게 YOLO5 모델을 사용할 수 있기 때문에 선정하였습니다. 

 


위의 링크에서 git clone 을 통해서 ultralytics yolov5 모델을 불러옵니다. 

모델을 클로닝하여 yolov5 폴더로 들어갑니다. ( cd yolov5 ) 

pip install -r requirements.txt 를 실행하여 필요한 항목들을 설치합니다. 

 

 

딥러닝을 사용하기 위해서 pytorch 를 사용할 것이기 때문에 torch 를 import 해줍니다.

이어서 필요한 numpy , opencv , matplotlib 를 가져옵니다. 

 

model 변수에는 torch hub 사이트에서 사전 훈련된 울트라틱스 모델을 로드하여 저장합니다. 

yolov5 는 특정한 버전을 정의할 수 있습니다. 

작은 모델을 사용하므로 yolov5s 처럼 s를 붙이고 버전은 토치 허브 사이트에서 확인할 수 있습니다.

https://pytorch.org/hub/ultralytics_yolov5/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

 

model에는 불러온 yolov5의 모델 아키텍처가 저장되어 있습니다.

사용하기 쉽게 torch.hub 로 불러온 것이죠.

 

img 변수에 자동차들이 많이 있는 이미지 파일의 링크를 담아줍니다.

results 변수에 yolov5 모델에 img 를 넣어서 돌려보면 이미 학습된 모델의 결과를 확인할 수 있습니다. 

 

* np.squeeze() 는 차원이 1인 차원을 제거해줍니다. 따로 차원을 설정하지 않으면 1인 차원을 모두 제거한다. 그리고 차원을 설정해주면 그 차원만 제거한다.

 

모델을 가져온다음 여러가지 이미지들을 넣어보면 이미 학습된 이미지 라벨링 결과를 바탕으로

결과값을 확인할 수 있습니다. 

 

다음 포스팅에서는 Real Time Detection 코드를 통해서 실시간으로 피드에 액세스하는 코드를 짜볼 것입니다.

랩탑에 탑재되어 있는 웹캠에 실시간으로 접속합니다. 

 

그 영상을 바탕으로 졸고있는 사용자의 모습과 깨어있는 사용자의 모습의 이미지를 추출하여 

직접 라벨링하고 모델을 학습시킬 것입니다.

반응형