[산학협력프로젝트] 얼굴인식 출근 시스템 - 3. Java App 구현

홍예주·2021년 4월 29일
0

산학협력프로젝트

목록 보기
3/4

1. 얼굴 인식 파트 - java

1) FaceRecognization

  • string 배열인 command에 해당 외부 사용 언어와 위치를 저장
  • 이후 CNN을 실행한다.
    (CNN은 파이썬으로 만들어졌으며 execCNN 함수로 해당 외부 프로그램 CNN을 실행시킨다)
  • 해당 commad String 배열을 인자로 받으며 이 String 배열을 CommandLine에 인자로 넣는다.
  • ByteArrayOutpuStream은 바이트 배열을 읽는 것이다.
  • PumpStreamHandler와 DefaultExecutor는 Shell의 수행결과를 받기 위해서 PumpStreamHandeler를 생성하고, executer에 StreamHanlder에 Set한다.
  • CommandLine에 넣은 파이썬과 파이썬 위치를 통해 executer를 이용하여 실행하고 그 결과값을 result 값에 넣은 후 outputStream에서 값을 전역변수인 buff에 저장시킨다.
  • 얻은 값을 통해서 해당 사원의 index 값을 찾고 그 사원에 해당 인덱스를 인자로 넣어 db에 있는 Commute_On /Off 함수를 사용한다.
  • 해당 사원이 있는 경우 wol클래스인 wol.power_on을 작동시켜 해당 사원의 컴퓨터를 실행한다.

2. Wake On Lan 파트

  • Power_On 함수 부분이며 sqlite를 실행하여 FaceGate의 db를 연결한다.

  • sql을 이용하여 인자값으로 받은 num과 같은 사원의 컴퓨터 주소를 받는다.

  • InetAddress로 host에 대응되는 InetAddress 배열을 변환하여 UDP방식 데이터 교환을 사용한 후 해당 bytes와 주소들을 데이터를 패킷으로 묶고 Socket을 이용하여 데이터를 밖으로 내보낸다.

  • GetMacBytes 함수는 String으로 받은 macStr을 Bytes 단위로 바꾸어주는 역할을 한다.

3. DB

  1. 구조
    1) primary key

    2) foreign key


  2. 코드
    1) Commute_On
  • 해당 파라미터인 Employee_IDX (사원 ID)가 db에 존재하면 해당 사원이 출근을 하게 하고, 존재하지 않으면 사원이 아니며 오류를 출력한다.

  • ResultSet으로 해당 sql을 실행 - 인자값으로 받은 Employee_IDX가 존재하면 사원이므로 출근을 완료한다

  • flag는 존재하는지 안하는지에 대한 판단으로 0이 아니면 존재 / 0이면 존재하지 않는다

  • 존재하면 COMMUTE 테이블에 사원과 현재시간의 값을 넣는다


    2) Commute_off

  • Employee_IDX (사원 ID)가 db 에 존재하면 해당 사원이 퇴근을 하며 db에 퇴근 시간을 저장하며 / 없는 경우 존재하지 않는 사원의 오류를 출력한다.

  • 해당 query를 실행 하는데 인자값으로 받은 Employee_IDX 가 존재하면 퇴근처리와 함께 COmmute의 퇴근시간을 업데이트 한다.

  • 없는 경우는 사원이 존재하지 않으므로 return 0을 출력하며 오류판단에 사용.

    3) ManagerSignUp
    해당 사원을 관리자로 올려주는 함수

  • 이미 사원이면서 관리자인 경우 “이미 관리자로 등록된 사원” 출력 후 끝나며 사원이지만 관리자가 아닌 경우 해당 사원을 관리자로 만들며 db에 저장한다.

  • 사원도 관리자도 아닌 경우 오류를 출력 후 끝난다.

  • 처음 rs문 sql 사용 (사원인지 아닌지 판단하기위해 사용)
    - flag가 0이면 사원이 아니므로 return 2
    - 0이 아닌 경우는 사원이다

  • 다시 rs문 sql을 사용 (manager인지 아닌지 확인하기 위해 사용)
    - 0이 아닌 경우 관리자이면서 사원이므로 return 3 (이미 등록된 사원 판단)
    - 0인 경우는 사원이지만 관리자가 아니므로 MANAGER 테이블에 해당 사원을 추가하는 sql을 사용하여 관리자 가입을 성공시킨다.


    4) EmployeeSignUp

  • 해당 사원의 ID가 db안에 있는 경우는 이미 사원인 경우이므로 추가를 하지 않지만 ID가 db에 존재하지 않은 경우 해당 id를 사원으로 db에 저장한다.

  • rs로 sql을 사용하여 Employee_IDX가 존재하는 경우 이미 사원으로 등록되어 있으므로 return 되게 하고 사원이 아닌 경우 사원을 추가하는 sql을 사용하여 해당 사원을 등록한다.

  • flag는 사원인지 아닌지 판단하기 위해 사용


    5) Login

  • 해당 관리자로그인 함수로 db에 저장되어 있는 manager의 id와 pw를 보고 해당되는 사원이 있으면 로그인을 하고 없는 경우 실패한 사원의 id를 리턴한다.

  • Sql을 이용하여 받은 인자 id 와 pw를 sql문에 사용하여 해당 존재 사원이 있는지 없는지 확인하여 로그인을 한다.

  • 로그인이 실패하면 return 0으로 반환하고 로그인이 성공하면 해당 사원의 employee_IDX를 반환한다.


    6) DeleteEmployee
    DB에 저장되어있는 사원을 삭제하는 함수

  • Db 안에 해당 사원의 id가 있는 경우 db에서 삭제를 하며 존재하지 않은 id인 경우에는 오류를 출력하면 함수가 끝난다.

  • sql을 이용하여 인자로 받은 employee_IDX가 존재할 경우 flag를 이용하여
    - 0인경우는 사원이 아니므로 reutnr 2(사원이 아님을 확인하기위한 반환)를 하였고
    - flag가 0이 아닌 경우는 사원이 존재하는 경우로 해당 idx의 사원을 삭제하는 sql문을 작성하여 삭제를 한다.


    7) GetEmployeeDate

  • 사원의 이름이 db안에 있는 employee 테이블에 Employee_NM과 같은 사원이 있는 경우 해당 사원의 정보를 보여준다. 해당 사원이 없는 경우 오류를 출력

  • 인자인 Employee_NM은 사원의 이름이며 sql을 사용하여 해당 사원의 이름인 Employee가 있는지 판단하고 있는 경우 ArrayList로 해당 사원의 정보들을 returnArray에 저장하며 그 저장된 값을 출력한다

profile
기록용.

0개의 댓글

관련 채용 정보