10. Human Activity Recognition 인간 활동 인식 시스템

그림1

이미지 참조 : 행동 인식

✅ HAR : 인간 활동 인식

HAR 은 (Human Activity Recognition, 인간 활동 인식) 사람의 동작(Motion)과 행동(Gesture)을 포함한 모든 움직임을 센서나 카메라를 통해 인식하고 분류하는 기술로, 걷기, 뛰기 같은 전신의 움직임부터 손짓, 수신호 같은 세밀한 손동작까지 폭넓게 다룹니다. 특히 세부적으로 모션 인식(Motion Recognition)과 제스처 인식(Gesture Recognition)으로 나뉘어 설명될 수 있습니다.

이러한 기술은 자율주행차에도 적용될 수 있으며, 교통경찰의 수신호 인식, 보행자의 손짓 감지, 운전자의 손 동작 기반 제어 등은 차량이 사람의 명령을 비접촉 방식으로 이해하고 반응할 수 있는 핵심 기술입니다.


🟩 행동 인식 기술

1. Human Activity Recognition (HAR) (인간 활동 인식)
- 사람의 동작(걷기, 뛰기)부터 제스처(손짓, 수신호)까지 포함
- 스마트폰, 웨어러블, 카메라, 센서 등 다양한 장비를 이용한 사람 행동 인식
- 예: 손을 흔드는 동작, 주먹 쥐기, 팔 들기, 걷기, 앉기, 회전하기 등
- 연구 논문, AI 경진대회, 스마트 헬스케어, 로보틱스 등에서 사용됨

2. Action Recognition (행동 인식)
- 사람이 어떤 "행동(Action)"을 하고 있는지를 분석
- 흔히 비디오 기반 딥러닝 모델에서 사용
- Gesture와 Motion 모두 포함하지만, 연속적 동작 분석에 더 가까움
- 예: "누군가가 손을 흔든 후 주먹을 쥠 → 인사 후 공격 신호로 해석"
- 주로 딥러닝 영상 처리 분야에서 쓰임 (ex. 3D CNN, LSTM, Transformer 기반)

3. Pose-Based Activity Recognition 또는 Skeleton-Based Recognition
- 관절이나 뼈대(스켈레톤)를 추적하여 움직임을 분석하는 방식
- 키넥트(Kinect)나 Mediapipe처럼 신체의 위치 좌표 기반 인식 기술을 통합적으로 지칭

4. Spatio-temporal Gesture Recognition (시공간 제스쳐 인식)
- 공간+시간 축의 제스처 분석 (정적 + 동적 제스처 모두 포함)

5. Behavior Recognition (행동 인식)
- 로봇/자율주행/스마트시티 맥락에서 사람의 의도나 행위를 인식할 때 사용

⚪ HAR 예시

● 몸 전체 움직임 인식 → 동작 인식 (Pose Estimation 또는 Motion Recognition)
- 모션 센서 기반 (예: Kinect, IMU, Lidar 등)
- 사람의 전신 관절(머리, 어깨, 팔, 다리 등) 위치를 추적하여 자세나 동작을 추정
- ‘팔 들기’, ‘걷기’, ‘점프’, ‘회전’ 등 전신의 행동을 해석

📌 키워드:
- Pose Estimation (자세 추정) – 사람의 관절 위치를 추정함
- Motion Recognition (동작 인식) – 연속적인 움직임을 인식함
- Skeleton Tracking (골격 추적) – 키넥트가 대표적

● 손가락·손 인식 → 제스처 인식 (Gesture Recognition)
- 카메라 기반 (예: Mediapipe, OpenCV 등)
- 손가락 관절, 손의 형태, 움직임 등을 인식해 명령으로 해석
- 주로 ‘손가락 모양’, ‘손바닥’, ‘브이’, ‘주먹’ 등의 정적인 손동작 인식

📌 키워드: Hand Tracking, Hand Gesture Recognition

1️⃣ 제스처 인식 (Gesture Recognition)

🟡 사람 손동작을 인식하는 기술

1. Hand Gesture Recognition (수기 제스처 인식)
- 손가락 관절 위치나 손 전체의 윤곽을 감지해 특정 제스처를 분류하는 기술
- 딥러닝 기반 컴퓨터 비전으로 구현 (예: CNN, 랜드마크 추적 등)

2. Pose Estimation & Gesture Recognition (자세 추정 & 제스처 인식)
- Pose Estimation은 전신의 자세(머리, 어깨, 무릎, 팔 등)를 인식
- Gesture Recognition은 손의 모양이나 움직임에 집중해 의사 표현 해석
- 실제 시스템에서는 이 둘을 함께 쓰기도 함 (예: 손을 들며 “정지”하는 동작)

3. Mediapipe / TensorFlow / OpenCV 활용
- 구글의 Mediapipe는 실시간 손 관절 인식에 매우 효과적인 오픈소스 도구
- 이를 통해 21개 손가락 마디 위치를 추적해 특정 제스처를 인식 가능

4. Action Mapping (행동 매핑)
- 인식된 손 모양을 차량의 동작으로 연결하는 매핑 시스템
- 예: ‘브이’ → 전진, ‘주먹’ → 정지

🛠 주요 기술 구성 요소

1. 카메라 (Camera)
- 외부 인물 또는 운전자의 손동작을 실시간으로 촬영하여 분석

2. 제스처 인식 딥러닝 모델
- CNN, 랜드마크 추적, OpenPose 등 다양한 기술 기반으로 손 모양을 인식


3. 실시간 명령 연동 시스템
- 인식 결과를 차량의 행동(정지, 출발 등)으로 즉시 반영하는 처리 로직 구성

🎯 주요목적

● 손동작을 통해 차량을 제어하는 비접촉식 HMI(Human-Machine Interaction) 기술 체험
● 자율주행 시스템 내에서의 사람-차량 소통 방식 학습
● 교통 환경에서 사람의 의도를 인식하는 인공지능 기반 판단 구조 이해
● 실시간 제어 시뮬레이션을 통한 인지–판단–제어 사이클 체험


2️⃣ 제스처 인식 파이썬 예제

💡 예시를 통한 이해

📍 Gesture Recognition 예시

수신호 제스처 인식 예시
카메라를 통해 사람의 손 부위를 실시간으로 감지하고, 손의 형태를 인식하는 기본 제스처 인식 시스템을 구현해 봅니다.

사용자의 손동작 반응 테스트 예시
보행자의 다양한 손동작(브이, 주먹, 손바닥 등)을 인식하여, 각각의 제스처가 정확하게 감지되는지 확인하는 테스트를 진행합니다.

보행자 손동작 확인 시뮬레이션 예시
카메라가 브이(V) 제스처를 감지하면 “브이가 감지되었습니다”를, 주먹을 감지하면 “주먹이 감지되었습니다”라는 메시지를 출력하도록 시뮬레이션을 구성합니다.

# 카메라 스트리밍 및 제스처 인식 초기화
    zumiAI.camera_stream_start()
    zumiAI.gesture_detector_init()
    zumiAI.gesture_detector_start()

while True:
    if zumiAI.is_gesture_detected():
       gesture = zumiAI.get_gesture_recognize()
       print(f"감지된 제스처: {gesture}")

       if gesture == "fist" :
         print("▶ 주먹")

       elif gesture == "peace" :
         print("▶ 브이")

       elif gesture == "open" :
         print("▶ 손바닥 펴기")


그림1

이미지 참조 : 주먹(fist) , 브이(peace), 손바닥 펴기(open)


그림1

이미지 참조 : 제스쳐 감지

3️⃣ 제스처 인식 기반 자율주행 제어 시뮬레이션

제스처 인식에 대하여, 예제 프로그램을 통해 테스트를 해보았으므로, 이제 실제로 주미와 연결하여 손동작에 따라 반응하는 제어 예제를 실습해보겠습니다. 이러한 기술은 실제 교통 현장에서 교통경찰의 수신호 인식이나 운전자의 손동작을 통한 차량 제어 등 다양한 상황에 응용될 수 있습니다.


✋ 인식이 가능한 제스쳐

👊fist (주먹): 모든 손가락이 굽혀진 상태 ([0, 0, 0, 0, 0])
👆point (가리키기): 검지 손가락만 펴진 상태 ([0, 1, 0, 0, 0])
✋open (손바닥 펴기): 모든 손가락이 펴진 상태 ([1, 1, 1, 1, 1])
✌peace (브이): 검지와 중지 손가락이 펴진 상태 ([0, 1, 1, 0, 0])
👌standby (엄지 제외 펴기): 엄지손가락만 굽혀진 상태 ([1, 1, 0, 0, 0])
👍thumbs_up (엄지척): 엄지손가락만 펴진 상태 ([1, 0, 0, 0, 0])
🟥 None (인식 불가): 위에 해당하지 않는 모든 제스처

💡 예시를 통한 이해

📍 Gesture Recognition 예시

교통 수신호 감지 예시
교차로에서 경찰이 손바닥을 펴며 정지 신호를 보내면, 카메라가 이를 ‘open palm’으로 인식하고 차량은 자동으로 정지합니다.

운전자의 손동작 제어 예시
운전자가 손으로 ‘브이’ 제스처를 표시하면 시스템이 이를 출발 신호로 해석해 차량이 서서히 전진하고, ‘엄지 다운’ 제스처를 감지하면 차량이 속도를 줄입니다.

보행자와의 소통 시나리오
보행자가 손을 흔들며 “멈춰주세요”라는 제스처를 보내면 차량은 이를 인식하고 정지하거나 감속하여 보행자에게 양보합니다.

4️⃣ 주미AI를 제어하는 제스처 인식

그림1

이미지 참조 : 제스쳐 감지

⚪ 제스처 인식 제어 시나리오 예시

📍 Zumi AI - based Gesture Recognition 예시

👊주먹(Fist) 감지 → 주미 AI 정지
✌브이(V Sign) 감지 → 주미 AI 직진
✋손바닥(Open Palm) 감지 → 주미 AI 회전

# 카메라 스트리밍 및 제스처 인식 초기화
    last_gesture = None     cooldown_time = 2
# 2초 동안 동일 제스처는 무시

    last_command_time = 0

while True:
    if zumiAI.is_gesture_detected():
       gesture = zumiAI.get_gesture_recognize()
       print(f"감지된 제스처: {gesture}")

       # cooldown 기간이 지났거나 새로운 제스처인 경우에만 동작
       if gesture != last_gesture or
           (current_time - last_command_time) > cooldown_time:

       if gesture == "fist" :
         print("▶ 주먹")
         zumiAI.stop()

       elif gesture == "peace" :
         print("▶ 브이")
         zumiAI.reverse_dist_quick(10)

       elif gesture == "open" :
         print("▶ 손바닥 펴기")
         zumiAI.left_turn_quick(90)


6️⃣ IVI (In-Vehicle Infotainment) : 차량 내 인포테인먼트 시스템

자율주행 시대가 도래하면서 차량 내부에서의 사용자 경험은 단순한 이동을 넘어 엔터테인먼트 중심 공간으로 확장되고 있습니다. 그 중심에는 IVI(In-Vehicle Infotainment), 즉 차량 내 정보·오락 시스템이 있으며, 이 시스템에 제스처 인식 기술을 접목하면 비접촉식 게임 인터페이스를 구현할 수 있습니다.

-IVI 는 자동차 내부에서 제공되는 정보(Information)와 오락(Entertainment) 시스템을 통합한 개념입니다.
- 내비게이션, 미디어 재생, 스트리밍, 게임, 음성 비서, 인터넷 접속 등 다양한 기능을 포함합니다.
- 자율주행 수준이 높아질수록 운전자가 운전에 집중하지 않아도 되기 때문에 IVI의 활용도가 급격히 증가합니다.

🟦 제스처 인식 기반 IVI 활용 예시: 가위바위보 게임

IVI의 예시로 카메라를 사용하여 손의 형태를 인식하며 실행하는 가위바위보 게임을 들 수 있습니다.
운전자는 차량 내 카메라 앞에서 손으로 가위✌, 바위✊, 보🖐 중 하나를 제시하면, 인공지능이 이를 인식하여 게임을 실행하고 결과를 출력합니다.

이러한 방식은 버튼이나 터치 스크린 없이도 직관적인 제어가 가능하며, 특히 어린이 탑승자, 운전 대기 시간, 레벨 4 이상의 자율주행 환경에서 유용하게 활용될 수 있습니다.
이 가위바위보 게임을 실습 예제로 학습해보겠습니다.

🎯 학습 포인트

- 제스처 인식을 통한 IVI 인터페이스 구현 경험
- 실시간 영상 처리 및 제스처 분류 기술 실습
- 자율주행 환경에서의 사용자 경험 설계 아이디어 확장

💡 예시를 통한 이해

📍 실습 예시: 비접촉식 가위바위보 게임

카메라 입력
사용자가 차량 내 카메라 앞에서 손동작을 보여줍니다. (예: 가위 = ✌ 사인, 바위 = 👊, 보 = ✋).

제스처 인식 모델 작동
Mediapipe 등 컴퓨터 비전 모델이 손의 형태를 분석하여 사용자의 선택을 판별합니다.

게임 로직 실행
AI가 랜덤으로 가위/바위/보 중 하나를 선택하고, 사용자의 선택과 비교하여 승/패/무 결과를 출력합니다.

화면 출력 또는 음성 피드백
결과는 차량 디스플레이(IVI 화면)나 LED 또는 음성 안내로 출력되어 사용자와 상호작용합니다.


7️⃣ IVI : 주미 AI와 가위바위보 게임

'게임 실행' 버튼을 누르면, 주미 AI가 카메라를 통해 사용자의 손을 인식 하고 주미는 랜덤으로 가위,바위,보 중에 한 가지를 내며 사용자가 낸 손 모양과 비교하여 승패를 알려주는 프로그램 입니다. 사용자가 이기면 사용자 점수에 1점이 올라가고, 주미가 승리하면 주미 점수에 1점이 올라갑니다.

그림1

이 프로그램은 실행시 까지 다소 시간이 걸립니다.


# 게임 실행
def play_game():
    global user_score, zumi_score

    play_button.config(state="disabled")
    zumiAI.display_text_clear()
    zumiAI.display_text("게임 시작!")
    time.sleep(0.5)
    user_choice_box.config(text="사용자: ...")
    zumi_choice_box.config(text="Zumi: ...")
    process_label.config(text="가위")
    zumiAI.display_text("가위")
    time.sleep(0.5)
    process_label.config(text="바위")
    zumiAI.display_text("바위")
    time.sleep(0.5)
    process_label.config(text="보!")
    zumiAI.display_text("보")
    time.sleep(0.2)


🛑 프로그램 실행 시 주의사항

● 기본의 학습된 데이터를 기반으로 사용자의 손 모양을 감지하는 프로그램 입니다.
● 승리 시 및 패배 시 LED 변경 및 소리를 재생하도록 되어 있습니다.
● 사용자가 임의적으로 승리 및 패배 시 주미가 움직이도록 커스텀 할 수도 있습니다.
● 승리 조건 (3승, 5승 등) 마다 특정 동작을 하도록 코딩 할 수도 있습니다.