OpenCV를 이용한 온라인시험 부정행위 감지 시스템
📅프로젝트 기간(Project)
2021-05-18(Tue) ~ 2021-06-07(MON)
👨👩👧👧만든 사람(Collaborator)
👩💻동국대학교 컴퓨터공학과 2019111980 길유정(Gil yujung)
-고개 움직임 감지부분 구현
-kuj9628@naver.com
-https://github.com/fairyroad
🎅🏻동국대학교 컴퓨터공학과 2019112004 김민정
-시선처리부분 구현
-kimmin9624@dgu.ac.kr
-https://github.com/kimminje0ng
👰동국대학교 컴퓨터공학과 2019112017 강혜원
-2명이상 감지부분 구현
-부정행위감지되었을 때 알림창 및 시험 시작 및 종료 알림창 부분 구현
-gpffps369@gmail.com
-https://github.com/HyewonKkang
👩🚀동국대학교 컴퓨터공학과 2019112010 장수아
-입모양움직임으로 대화감지 부분 구현
-sooa9918@dgu.ac.kr
-https://github.com/sua1223
🖥️개발환경(Tech)
✔️pycharm community edition 2020.2.3사용
✔️opencv 4.5.2
:웹캠을 이용해서 영상을 입력받고 여러가지 영상처리를 구현하기 위해 opencv를 사용하였고, 부정행위의 기준은 고개는 코에서 각 양쪽 눈으로 향하는 2개의 벡터의 크기의 차이가 15이상일때
사람이 2명이상 존재할 때, 눈동자가 정면이 아닐때, 입모양의 비율이 0.8이상일때는 부정행위로 보았다.
✔️dlib
:C ++로 작성된 범용 크로스 플랫폼 소프트웨어 라이브러리인 dlib을 이용하여 얼굴의 점을 68개로 분류하여 각각 눈썹, 코, 입, 눈동자등으로 구분을 하여 점들의 index를 구분하였고
shape_predictor_68_face_landmarks.dat라는 데이터셋을 이용하여 학습을 시켜서 얼굴을 인식할 수 있게 하였다.
✔️tkinter
:처음에 시험시작과 시험종료에 대한 alert창을 띄운뒤에 시작을 누르면 그때부터 부정행위를 감지할 수 있게 하였고, 여러가지 부정행위에 대한 알림창은 alert()를 이용하여 case로 구분하여 알림창 및
로그가 남을수 있게 구현을 하였다.
📖고려해야 할 사항(Considerations)
🥕고개움직임
🥕입모양(ratio)
🥕사람 2명이상존재
🥕시선처리 감지
🌝고개움직임 구현(Head Movement)
1.얼굴 점을 68개로 나눈 곳에서 왼쪽눈은 38, 41 점의 중심으로 x,y좌표를 받아왔고 오른쪽눈은 45,48점의 중심으로 x,y좌표를 받아옴
2.코에서 각 양쪽 눈으로 향하는 2개의 벡터의 크기가 항상 같다는 것을 이용
3.코에서 왼쪽눈 벡터를 norm_left, 코에서 오른쪽눈 벡터를 norm_right로 두고 크기를 비교함
4.일정크기(여기서는 15)이상으로 차이가 존재한다면 고개돌림으로 감지함
5.부정행위가 감지되었다면 case는 2번으로 alert 함수를 호출하게 함