2024.10.10 ~ 2024.10.11 Seoul AIoT Hackathon
지난 2일간 Start Engineer 팀으로 서울시에서 주최한 2024년 서울 스마트 라이프 AIoT 해커톤 본선에 참가했습니다.
| Start Engineer | 이름 | 소속 | 분야 | 이메일 |
|---|---|---|---|---|
| 팀장 | 최지인 | 경상국립대학교 제어로봇공학과 | 기획 | dulyjiiin@gmail.com |
| 팀원 | 박형준 | 경상국립대학교 건축공학부 | 하드웨어 제작 및 제어 | hypwdfi@gnu.ac.kr |
| 팀원 | 장영하 | 가천대학교 인공지능전공 | 프론트엔드 개발 인공지능 개발 | claude012@aiia-gcu.com |
| 팀원 | 박상하 | 경상국립대학교 항공우주공학부 | 백엔드 개발 인공지능 개발 | psangha326@gmail.com |
웹/앱 서비스 제작 IoT기기, 데이터 등을 활용하여 서울의 공원 관련 웹(Web)/앱(App) 지능형 서비스 개발
빅데이터 분석 및 시각화 IoT 데이터를 활용하여 서울의 공원 관련 각종 문제 분석 시각화 및 해결 방안 도출
아두이노 활용 시제품 제작 아두이노(Arduino)를 활용하여 서울의 공원 내 편의를 향상시킬 수 있는 디지털 기기 제작
위 3가지 주제 중 하나를 선택 해 시제품을 제작하는 방식이었는데, 저희 팀은 아두이노를 시제품 제작을 선택하여, 공원 내에서 늦은 대처로 인해 생기는 추가 피해를 줄여보고자
공원 내 위험 감지 봇 이라는 주제로 PSC📸 서비스를 기획하였습니다.
지금부터 지난 2일간의 생생한 경험을 전달해 드리겠습니다.

위 사진은 저희의 초반 기획 사진입니다.
위와 같은 재료를 사용하여 360도 돌아가며 낙상과 흉기를 감지하는 CCTV를 구성하였습니다. 또한 모바일 앱 및 웹 플랫폼과 연동되어 사고나 범죄 발생 시 즉각적으로 경고 알림을 전송하며, 응급 상황 발생 시 자동으로 경고음을 울리거나 구조 요청을 전송하여 빠른 대처가 가능하도록 기획하였습니다.
45팀 中 17팀 선정, 예선 8위

저희는 이러한 기획으로 45팀 가운데 8등으로 본선에 진출하였고, 다음과 같은 피드백을 받게 되었습니다.

저희는 1차적으로 눈, 비 등의 기후 영향을 받는 것을 줄이기 위해 하드웨어에 경사면을 설계하여 기후의 영향을 최소화 하였습니다.

저희는 2차적으로 보다 효율적인 모니터링 방식을 생각했습니다. 공원 전체에서 기존 CCTV가 닿지 못하는 영역을 커버하는 것이다 보니, 사람이 관리를 하면 빈틈이 생길 것이라고 생각하여
다음과 같은 부품을 사용하여 하드웨어의 크기를 간소화 하고 카메라의 데이터를 서버로 전송하여 인공지능이 관리자용 웹/앱에 자동으로 알림을 전송하는 형식의 관리 방식을 구상하였습니다.
이렇게 기획이 마무리가 되나 싶었지만 백엔드를 담당하는 팀원분께서 기한 안에 이러한 피쳐를 제작하기엔 무리가 있다고 말씀해 주셨습니다. 본선 날짜가 얼마 남지 않은 시기였기에 저희는 과감하게 관리자용 페이지를 포기하고 새롭게 기획을 시작하였습니다.

더 이상 서버를 사용 할 수 없게 되자 저희는 카메라를 아두이노와 연동하는 것이 아닌 웹캠을 사용하여 PC와 연동하는 기획을 구상하였습니다. 로컬에서 인공지능 모델을 돌리고 Wifi 혹은 Serial 통신을 사용하여 아두이노를 파이썬에서 제어하는 것으로 기획을 마무리했습니다.

저희는 최종 기획을 확정으로 본선에 참가했습니다.
모든 인공지능 모델은 Yolov8을 사용하여 개발하였습니다.

1차 로직 구현
처음 로직은 yolov8n 모델을 사용하여 검출 된 사람의 가로 길이와 세로 길이를 추출하여 가로 길이가 세로 길이보다 길다면 넘어짐으로 감지하는 로직을 구현하였습니다. 하지만 이렇게 구현을 하니 오인식률이 너무 높아져 다른 방식으로 구현하기로 하였습니다.
2차 로직 구현
두 번째 로직은 yolo-pose 모델을 사용하여 사람을 검출하고 그 사람의 관절을 추출하여 핵심 관절 ( 목, 척추, 발목 ) 의 수평도를 추출하여 핵심 관절이 수평하다면 넘어짐으로 감지 하였습니다. 하지만 이러면 넘어진 것인지 바닥에 누워있는 것인지를 판별하지 못하여 새로운 방식으로 구현하기로 하였습니다.
3차 로직 구현
세 번째 로직은 사람을 검출하고 그 사람의 30프레임간의 상체 핵심 관절의 위치를 수집하여 일정 시간 ( 0.8초 ) 이내에 그 사람의 상체 핵심 관절 위치가 크게 변화하고, 일정 시간 ( 2초 ) 이내에 다시 돌아오지 않는다면 넘어짐으로 감지하였습니다.
향후 개선 방향
바닥을 감지하는 로직을 구현하여 3차 로직에서 바닥과의 근접성을 판단하는 방식으로 정확도를 높이면 더욱 견고한 로직이 될 것이라고 생각하였습니다.

흉기 감지 모델은 roboflow 사이트에서 약 1100개 가량의 데이터셋을 가져와서
pretrained model 을 생성하는 방식으로 구현하였습니다.

이미지 크기를 640x640으로 설정하고 epoch를 100 workers를 2로 설정하고 학습하였습니다.
서버를 사용 할 수 없어 관리자용 웹이나 앱을 만들진 못하였지만 카메라를 회전 시키거나 실시간으로 카메라의 상황을 보는 등의 관리자용 도구가 필요하다고 생각하여 관리자용 도구 개발을 하였습니다.
1차 위기
처음 관리자용 도구는 pySerial을 통해 파이썬에서 아두이노를 제어하려고 하였습니다. 낙상 사고 혹은 흉기 난동이 감지되면 부저를 울리고, 화살표 키를 눌러 카메라의 움직임을 제어하는 방식으로 구현을 하려 했으나 코드에는 문제가 없음에도 불구하고 시리얼 모니터에 값이 계속 불량으로 찍히는 오류가 발생하였습니다.
2차 위기
그래서 저희는 와이파이 통신을 통해 제어를 하려고 하였습니다. 아두이노에서 SSID값과 Password를 입력하여 와이파이 통신을 구축하였고 파이썬에서 IP를 호출하여 제어하도록 하였으나 대회장의 특성상 다수의 사람들이 와이파이를 사용하였고 연결이 불안정하여 계속 연결 불안정 오류가 발생해 구현에 실패하였습니다.
그래서 저희는 최종적으로 낙상 및 흉기 난동 감지 시 연결 된 기기에서(PC) 경고음을 울리도록 하였고 아두이노 IDE에서 키를 입력하여 카메라의 회전을 제어하는 방식으로 구현하였습니다. 또한 CCTV라는 목적에 맞게 감지된 프레임이 시야를 방해 하지 못하도록 프레임을 온/오프 할 수 있도록 구현하였습니다.
하드웨어는 3D 프린터를 사용하여 제작하였습니다.

다음과 같이 본체를 모델링 한 후 3D 프린터로 프린팅을 진행하였고, 아두이노와 웹캠을 본체에 고정하여 제작하였습니다.

저희는 이렇게 만들어진 최종 결과물을 바탕으로 발표를 진행하였습니다.
시연 영상은 여기에서 확인 하실 수 있습니다.
저희는 비록 수상을 하진 못하였습니다. 하지만 이번 대회를 바탕으로 팀원들과의 소통이 얼마나 중요한 것인지를 깨닫게 되었습니다. 다음에는 더 발전된 모습으로 다시 찾아오도록 하겠습니다. 자세한 사항은 깃허브에서 확인해 주세요!