개발
2024-07-11 ~ 2024-07-19
1분 읽기

SDHS AI융합실 사용신청 챗봇

🏆 서울디지텍고등학교 2024 소프트웨어 해커톤 [최우수상]

Kakao 챗봇 연동을 통한 AI융합실 출입 및 신청을 자동화 프로젝트

1. 프로젝트 개요

‘SDHS AI융합실 사용신청 챗봇’은 교내 AI융합실 출입 및 사용 신청 절차를 자동화하기 위한 챗봇으로, 카카오 비즈니스 챗봇 기반의 사용자 인터페이스와 YoLo 모델을 통한 실시간 객체 인식 기술을 결합하여, 학생들의 사용 편의성과 관리 효율성을 동시에 개선했습니다. 메인페이지

2. 기술 스택

ChatBot: Kakao Business
Backend: Flask
AI Server: Python, YoLo
Database: SQLite
Deploy: Localtunnel, KakaoTalk

💻 주요 개발 사항

  • Kakao business를 이용한 챗봇 프레임 개발
  • Flask 라우트 기반의 스킬 서버 API 개발
  • YOLO 모델을 이용한 객체 탐지 기반의 인원수 체크 기능 개발
  • Kakao API를 활용한 알림톡 발송 기능 구현

🧩 시스템 구조

이 시스템은 카카오톡 사용자 인터페이스를 통해 입력을 받아, Flask 기반 API 서버가 이를 처리하고 YOLO 기반 인원 감지 서버와 SQLite 데이터베이스와 연동하여 응답을 반환하는 구조로 구성되어 있습니다.
챗봇 아키텍처

  • Client → Kakao Business: 사용자가 카카오톡으로 메시지를 전송하면, 카카오 비즈니스 플랫폼을 통해 서버로 전달됩니다.
  • Kakao Business ↔ Flask API Server: 사용자 입력은 API 서버로 전달되고, 처리된 결과가 다시 응답됩니다.
  • Flask API Server ↔ SQLite: API 서버는 필요한 데이터를 로드하거나 저장하기 위해 SQLite 데이터베이스와 상호작용합니다.
  • Flask API Server ↔ YOLO Person Detection Server: “현재인원”을 요청받을 경우, YoLo모델을 실행하는 Python 서버로 요청을 전달하고 결과(인원 수)를 받아옵니다.

💡 개발 관련 설명

Backend API

Flask 기반의 백엔드로, AI융합실 예약, 자동 퇴실, 카카오 알림, AI 객체 인식 기반 인원 확인 기능을 제공합니다.

  • Flask 기반 API 설계
    • /webhook: 챗봇에서 요청된 동작(신청 처리, 연장 처리, 조기퇴실 처리, 신청현황 조회, 제보 처리, 현재인원)을 구분하여 실행
    • 요청 형식은 Kakao i Open Builder의 JSON 구조를 따르며, action.name을 기반으로 분기 처리
    • @app.route(..., methods=['POST']) 방식으로 챗봇 요청을 수신하고 처리 챗봇 서버
  • 자동 퇴실 스케줄링
    • APScheduler를 사용해 1분 간격으로 퇴실 예정자 체크 (check_last_user)
    • 실시간 퇴실 처리 및 자동화된 시간 기반 이벤트 구현
  • 카카오 알림톡 전송
    • 교실 예약 또는 대여 신청 시, 선생님들에게 관련 정보를 알림톡으로 전달해 실시간으로 확인할 수 있도록 구현
    • requests.post()를 사용해 카카오 API 엔드포인트(https://kapi.kakao.com/v2/api/talk/memo/default/send)에 메시지 전송 message

AI 객체 인식 기능

YOLOv3를 활용하여 웹캠 영상에서 사람 수를 실시간 감지합니다. “현재인원”을 요청하면 챗봇을 통해 사용자에게 안내됩니다.

  • YOLOv3 모델 로드 및 구성
    • yolov3.weights, yolov3.cfg, coco.names 파일을 통해 객체 탐지 모델 초기화
    • OpenCV의 DNN 모듈을 활용하여 실시간 영상 처리
  • 사람 감지 및 카운팅 시연영상
    • 웹캠(기본 0번 장치)을 통해 입력된 프레임에서 person 클래스만 감지
    • 감지된 사람 수(person_count)를 공유 변수로 저장하고, 요청 시 반환
    • 카카오 챗봇에서 “현재인원” 요청 시, YOLO 객체 탐지로 현재 인원 수 반환

🔗 GitHub