paiams

Go Back

Library seat tracking AI


도서관 좌석 예약 화면에는 사용 중이라고 나오지만 실제로는 비어 있거나, 예약하지 않은 사람이 자리를 차지한 경우가 있다. 팀원들과 중앙도서관을 관찰하고 이용자 여섯 명을 인터뷰하면서 이런 차이가 입실, 사용 중, 퇴실 단계마다 생긴다는 사실을 확인했다. 짐만 남겨 둔 자리와 퇴실 처리를 하지 않은 자리는 예약 정보만으로 상태를 판단하기 어려웠다.

Library Seat Tracking AI는 카메라 영상에서 사람과 물건을 감지해 좌석 상태를 갱신하고, 그 결과를 이용자 화면과 관리자 화면, 좌석별 조명에 전달하는 3인 팀 프로젝트다. 2024년 3월부터 6월까지 디자인적사고 수업에서 진행했다.

도서관 이용자 인터뷰에서 입실, 사용 중, 퇴실 단계의 문제를 정리한 발표 자료

인터뷰를 바탕으로 입실·사용 중·퇴실 단계의 문제를 정리했다.

내가 맡은 일

나는 팀원과 함께 시스템 구조를 설계하고, 사용자용 예약 프로토타입과 좌석 상태 전환 로직, FastAPI 백엔드를 구현했다. Streamlit 관리자 화면과 백엔드를 연결했으며, 각 서비스를 Docker Compose로 함께 실행하도록 구성했다. 좌석 상태가 바뀌면 Tapo 스마트 전구의 색도 함께 바뀌도록 연동했다.

팀원 권구현은 관리자 화면과 백엔드 로직, API 구현을 함께 맡고 YOLOv8 추론 경로를 구성했다. 신지혜는 Figma UI와 Flutter 사용자 앱, YOLOv8 적용을 맡았다. 나는 사전 학습된 객체 탐지 모델의 결과가 예약 정보와 실제 장치까지 이어지도록 시스템을 묶는 데 집중했다.

사용자 앱과 관리자 화면, FastAPI 백엔드, 객체 탐지 모델, 좌석 상태와 스마트 전구를 연결한 시스템 구조

사용자 앱, 관리자 화면, 객체 탐지와 좌석별 조명을 잇는 전체 구조.

객체 탐지와 좌석 상태 판정

카메라가 사람이나 물건을 찾았다는 사실만으로는 좌석이 사용 중인지 판단할 수 없다. 같은 탐지 결과라도 예약한 사람이 입실했는지, 자리를 잠시 비웠는지, 예약 없이 앉았는지에 따라 처리가 달라져야 한다.

카메라 화면에는 좌석별 영역을 지정했다. YOLOv8이 찾은 사람·물건의 경계 상자와 이 영역이 얼마나 겹치는지 계산해 좌석마다 사람과 짐의 유무를 구했다. 여기에 예약 정보와 경과 시간을 더해 좌석을 예약 가능, 입실 대기, 사용 중, 자리 비움, 퇴실 예정, 무단 이용 중의 여섯 상태로 나눴다.

초기 테스트에서는 몇 가지 문제가 드러났다. 사용 중인 사람이 다른 좌석을 중복 예약할 수 있었고, 갱신 간격이 길면 사람이 자리를 떠난 순간을 놓쳤다. 작은 모델은 사람과 짐을 자주 놓치기도 했다. 중복 예약을 막고 갱신 간격을 5초에서 1초로 줄였다. 객체 탐지에는 더 큰 사전 학습 모델을 적용해 시연을 이어 갔다.

좌석 상태와 스마트 조명 연동

FastAPI는 카메라 프레임을 받아 객체 탐지를 실행하고 좌석 상태를 갱신한다. 사용자 화면에는 예약과 취소, 현재 좌석 상태를 보여 준다. 관리자 화면에서는 탐지된 영상과 좌석별 사람·짐·예약 정보를 함께 확인할 수 있다. 개발 중에는 탐지 임곗값과 좌석 상태별 대기 시간을 관리자 화면에서 바꿔가며 흐름을 점검했다.

화면만 보고서는 현장의 좌석 상태를 바로 알아보기 어려워 스마트 전구도 연결했다. 네트워크에서 Tapo 전구를 찾고 좌석 번호와 대응시킨 뒤, 좌석 상태가 바뀔 때 같은 색을 전구에 적용했다. 예약 가능한 자리에서는 전구를 끄고, 나머지 상태에서는 지정한 색을 켰다.

객체 탐지와 좌석 상태를 표시하는 Streamlit 관리자 화면과 Flutter 사용자 앱

관리자 화면에서 탐지 결과와 좌석 상태를 확인하고, 사용자 앱에서 좌석 현황을 조회한다.

결과와 한계

웹캠 영상, 객체 탐지, 좌석 상태 전환, 예약 API, 관리자 화면과 사용자 앱, 스마트 전구를 하나의 프로토타입으로 연결했다. 사용자 테스트에서 발견한 중복 예약과 갱신 간격 문제도 최종 구현에 반영했다.

다만 실제 도서관 CCTV를 사용하거나 모델을 도서관 환경에 맞춰 별도로 학습하지는 못했다. 책상 두 자리를 웹캠으로 촬영한 조건에서 기능 흐름을 확인했으며, 탐지 정확도나 상태 판정 오류율을 반복 측정한 결과도 없다. 다시 만든다면 실제 설치 각도에서 데이터를 모아 사람과 개인 물품을 구분하도록 모델을 조정하고, 좌석 수가 늘어났을 때의 처리 시간과 오탐·미탐을 함께 측정할 것이다.

링크