- 무궁화 꽃이 피었습니다
- NETFLEX의 오징어 게임에서 로봇이 사람의 얼굴을 인식하며 ‘무궁화꽃이 피었습니다‘ 게임을 하는 것에서 아이디어 착안
- 게임 앱 제작을 통해 실습 시간 내 배운 모든 GPIO 장치 활용이 용이하며, 스레드와 핸들 통신을 활용하는데 적합
- 얼굴 검출 및 필터링을 통해 OpenCV 및 OpenCL 활용 가능
- 게임시작 버튼 및 GPIO 센터 버튼을 누르면 게임이 진행되며, 움직일 수 있는 시간과 멈춰야 하는 시간이 매 턴마다 랜덤하게 주어진다.
- 게임 진행은 후면카메라를 이용하다.
- 움직일 수 있는 시간에는 보드에 다가갈 수 있으나, 멈춰야 하는 시간에는 보드가 움직임을 얼굴의 좌표로 감지하여 이전 얼굴의 위치와 비교하여 일정 범위를 넘어가면 게임이 종료되며 실패 메시지를 띄운다.
- 각각의 이벤트마다 LED가 깜박이며, 정지 시간에는 타이머가 동작하여 세그먼트에 표시된다.
- 보드에 잡히는 화면의 2/5가 얼굴 크기로 인식되면 게임은 종료되며 성공 메시지를 띄운다.
- 1주차: xml 작성(initial, main) 및 제어 장치(LED, segment) 코드 제작(객체화 및 동작 테스트), 카메라 프리뷰
- 2주차: 얼굴인식 api 삽입, 게임 루프 작성
- 3주차: 게임 루프 작성 완료 및 제어 api 게임 루프에 삽입, 얼굴 대기 이벤트 코드 작성, GPIO 버튼 제어 코드 작성 및 삽입, 스레드 핸들러 작성 및 UI 컨트롤, Ending 제작
- 3주차 추가개방: 카메라 사진 캡처 및 캡처 사진 엔딩 액티비티로 전송, OpenCV 및 OpenCL 활용한 캡쳐 사진 변경
- 프로젝트 진행 중 프로젝트 빌드를 다시 해야 하는 이슈가 발생하여 “MP_final”프로젝트는 삭제 후, “test” 프로젝트에 다시 빌드하였습니다.
- 버튼을 누르면 메인 액티비티로 이동
- 얼굴을 화면에 놓기 전까지 얼굴 인식 리스너(쓰레드로 정의)가 동작하며 얼굴을 파악.
- 얼굴을 인식하게 되면 화면에 초록색 박스로 표시되며, 인식하자마자 게임이 바로 시작되지 않고 GPIO 센터 버튼을 누르면 시작한다.
- 버튼 클릭 시 현재 위치의 사진을 비트맵으로 저장한다.
- 움직여서 보드에 다가갈 수 있는 상태. 2~6초 이내 랜덤 시간동안 움직일 수 있으며, 이벤트가 시작될 때 LED가 0.5초동안 점등되고 꺼진다.
- 인식되는 얼굴의 크기가 일정 크기 이상 되면 LED가 3번 깜박거리며 성공 액티비티로 넘어간다.
- 정지해야 하는 상태. 2~6초 이내 랜덤 시간동안 멈춰서 정지해야 하며, 이벤트가 시작될 때 LED가 0.5초동안 점등되고 꺼진다.
- 움직임 판정은 얼굴의 중앙 좌표의 변화를 비교하게 되는데, 이전 얼굴객체의 바운딩 박스 크기의 10% 범위 이상을 현재 얼굴 중앙 좌표의 위치가 벗어나게 되면 게임은 실패 액티비티로 넘어간다. 넘어가기 전에 LED가 순서대로 3개 켜진다.
- 게임 실패 시 나타나는 화면. 시작할 때 찍었던 사진을 실패 액티비티로 넘겨준 후, openCL을 이용한 grayscale을 적용하여 캡쳐 사진을 회색조로 바꾼 후 실패 메시지와 함께 화면에 출력한다.
- 게임 성공 시 나타나는 화면. 시작할 때 찍었던 사진을 실패 액티비티로 넘겨준 후, openCV을 이용하여 canny 알고리즘을 적용하여 사진의 외곽선을 부각시킨다. 실패 메시지와 함께 해당 변경한 사진을 화면에 출력한다.