9. S/W 프로젝트 : 티처블머신을 활용한 얼굴 인식 프로그램 (1)

한담곰·2022년 10월 25일
0

쏘의 학교 일기

목록 보기
9/10
post-thumbnail

소프트웨어 프로젝트 : Face Mask A-C Program


Face Mask A-C Program

마스크를 착용한 상태에서 카메라 인식을 통한 출석체크 프로그램으로, 수강생들이 카메라 인식을 통해 출석 체크를 하고, 교수는 수강생들의 출석 여부를 웹 페이지에서 확인할 수 있다. (A-C : Attendance Check)


해당 프로그램은 팀 프로젝트로 진행되었다! 나와 팀원들의 역할은 다음과 같다.

한소희 (본인) 박인수 학우님 박세현 학우님
- 프로젝트 총괄
- 데이터베이스 구축
- 학습 모델 생성
- 데이터 모델링을 위한
얼굴 검출 프로그램 구현
- 얼굴 인식 프로그램 구현
- 웹 사이트 구성도 구현
- 데이터 확보
- 날짜별 데이터 저장을
위한 데이터베이스 구현
- 웹 사이트 구현
- 데이터 확보
- 날짜별 데이터 저장을
위한 데이터베이스 구현
- 웹 사이트 UI, UX

시스템 아키텍처 및 구성도

위는 내가 초기에 구성한 시스템 구성도이다 🥲 앞으로 많이.. 수정될 예정....

학습시킬 데이터를 티처블머신을 통해 모델링을 실행한다. 생성된 모델과 카메라로 입력받은 수강생 얼굴을 비교하고, 비교된 데이터로 출석 여부를 확인한다. 출석 여부를 데이터베이스에 저장하고, 이 데이터베이스를 통해 수강생들의 출석 여부를 웹에 출력하는 것이다. 교수는 이렇게 출력된 결과물을 보고 수강생들의 출석 여부를 확인할 수 있다.

예외 (1) 수강생의 얼굴이 모자 혹은 앞머리 등에 의해 가려져 인식이 안 될 경우
-> 눈이 보이지 않는다는 에러 메시지를 카메라에 출력시킨다.

예외 (2) 데이터 모델에 수강생의 얼굴이 없어서 (인식률 낮음) 인식이 안 될 경우
-> 얼굴이 인식되지 않는다는 에러 메시지를 카메라에 출력시킨 후, 콘솔 창에 "이름, 학번, 확인요망"을 입력한다.

예외 (3) 수강생이 아닌 사람(외부인)이 카메라 인식을 시도할 경우
-> 얼굴이 인식되지 않는다는 에러 메시지를 카메라에 출력시킨다. 콘솔 창에 "이름, 학번, 확인요망"을 입력하라는 문장 옆에 "외부인은 입력하지 마세요"라는 문장을 표시해 준다.


(1) 필요한 라이브러리 및 패키지 / PC 환경

프로그램 언어 IDE Database 라이브러리 및 패키지 WAS
Python, JSP Pycharm, Eclipse MySQL OpenCV, Numpy, Tensorflow, JDK Apach Tomcat


(2) 콘다 가상환경 설정 (M1 pro칩이므로 miniforge 사용 설치 과정은... ㅎ... ㅠㅠ 다음에..)


(3) 데이터베이스 및 테이블 생성

DB 생성 후 확인

Table 생성 후 확인

필드 생성 후 확인

1. 로컬에서 접속 가능한 사용자 추가하기

mysql> create user 'sohee'@'localhost' identified by '(내 비밀번호)';

2. 접근 권한 허용해 주기

mysql> GRANT ALL PRIVILEGES ON FaceMask_Program.* to 'sohee'@'localhost';

(모든 디비에 대한 권한을 허용하려면)

mysql> GRANT ALL PRIVILEGES ON *.* to '사용자'@'localhost';

3. 새로운 세팅 적용

mysql> FLUSH PRIVILEGES;

4. 파이썬에서 DB 접속해 보는 테스트

# import requests
import pymysql

# 데이터베이스 서버에 연결, 정상적으로 연결이 수립되면 커넥션 객체를 반환
conn = pymysql.connect(host='localhost', user='sohee', password='디비서버 시비밀번호',
                       db='FaceMask_Program', charset='utf8')  # charset = 'utif8' => 한글 처리

# 커서 생성. 커넥션 객체를 통해 데이터베이스에서 SQL문을 대신 실행해 주고, 결과를 반환해 줄 커서 객체.
# 커서 객체 생성 이유 : 커서 객체에 DB 작업들을 위한 함수들이 포함되어 있기 때문
cur = conn.cursor()

# 실행할 SQL문 정의하고, 커서 객체 이용하여 inset, update, delete 작업을 수행
sql = "SELECT name FROM FaceMask"  # 테스트로 이름(name)만 출력
cur.execute(sql)

# Data Fetch
rows = cur.fetchall()
print(rows)

conn.close()

4-1. 테스트 실행 결과

(학우님들 이름은 개인정보이므로 가림.. 히힛)


profile
열심히 살아보려고 합니다...^^

0개의 댓글