본문 바로가기

인공지능/인공지능

LSTM기반 제스처 구조 요청 시스템 - 서버 관점

프로젝트 개요

본 프로젝트는 휴대폰이 없는, 사용하지 못하는 상황에서 묻지마 범죄 등 위기 상황에 대응하기 위한 시스템입니다.

실시간 손 제스처 인식 AI 모델을 웹과 연동하여, 사용자의 손동작을 인식하고 결과를 반환하는 서버를 개발하는 데 목적이 있습니다. Flask 기반의 REST API 서버와 TensorFlow 딥러닝 모델, MediaPipe 손 추적 기술을 결합하여, 영상 스트림에서 손 제스처를 감지하고 분류하는 시스템을 구현하였습니다

시스템 구성

1) 주요 기술 스택
Python, Flask, Flask-CORS
TensorFlow, Keras
MediaPipe
OpenCV, NumPy
Threading, Queue, JSON

 

2) AI 모델
원했던 데이터가 없어 직접 학습하여 만든 model_best.h5을 로드하여 실시간 제스처 분류에 사용
인식 가능한 제스처: Lv1(한 손), Lv2(두 손), Lv3(두 손)

데이터 구성 및 전처리
Lv1(엄지제외 네 손가락 접었다 펴기): 긴급구조가 필요한 상황
LV2(양 손바닥이 보이도록 손 들기) : 긴급상황은 아니지만 빠른 시간안에 도움을 받아야하는 상황
LV3(양쪽 팔 교차 시키기) : 거동불가 등 도움이 필요한 상황

max_seq_length = 30 → 한 동작당 30프레임 시퀀스
num_joint = 21 → 손가락 관절 21개 사용
num_hands = 1 → 한 손 또는 두 손 판단 값 추가 모델 구조 및 학습 설정
max_seq_length = 30 → 한 동작당 30프레임 시퀀스
Dense(3) → 구조요청 제스처 3가지 분류 모델 구조 및 학습 설정
softmax score > 0.95 최근 예측 결과 중 동일한 제스처 3회 이상 등장 시 인정

모델 개선 전
모델 개선 후
각 위험 레벨 제스처 인식 결과

3) 프레임워크
Flask 서버에서 REST API 제공
클라이언트와 서버 간 Base64 인코딩된 이미지 전송
멀티스레딩 및 큐를 활용한 비동기 프레임 처리

 

주요 기능 및 동작 흐름

1) 서버 초기화 및 모델 로딩
TensorFlow, MediaPipe 등 라이브러리 초기화
GPU 사용 비활성화 및 경고 메시지 최소화
모델 파일(model_best.h5)을 현재 작업 디렉토리에서 로드

2) API 엔드포인트
/start_recording: 녹화(프레임 수집) 시작, 클라이언트별 데이터 및 큐 초기화, 스레드 실행
/process_frame: 프레임(이미지) 수신 및 처리 큐에 저장, 처리 결과 반환
/stop_recording: 녹화 중지, 최종 결과 및 총 프레임 수 반환
/process_gesture: 단일 이미지 기반 제스처 인식, 결과 반환

3) 제스처 인식 프로세스
프레임 수신 → Base64 디코딩 → OpenCV 이미지 변환
MediaPipe로 손 랜드마크 추출 및 관절 각도 계산
99차원 특성 벡터 생성(관절 좌표 84 + 각도 15)
시퀀스(30프레임) 누적 후 모델 예측
예측 결과 신뢰도(confidence) 및 상위 확률 차이(confidence gap) 기준으로 결과 판단
손 개수와 제스처 일치 여부 검증

 

프로젝트 결과 


웹/AI 모델의 실시간 연동, 멀티스레딩 기반 안정적 프레임 처리, 손 개수와 제스처 매칭 검증 등 실용적인 기능 구현에 성공
MediaPipe와 TensorFlow를 활용한 손 제스처 인식의 실시간성 및 신뢰도 확보에 중점
다양한 예외 상황에 대한 견고한 처리 로직과 상세한 로깅으로 유지보수성과 확장성을 높임

 

논문 투고

 



'인공지능 > 인공지능' 카테고리의 다른 글

AI 프로젝트  (0) 2025.03.24
LSTM  (0) 2025.03.22
배열과 행렬의 원소 선택하기  (1) 2024.08.19
희소 행렬(Sparse Matrix) 생성 및 변환  (0) 2024.08.18
다양한 행렬 생성 및 초기화 방법  (0) 2024.08.18