AI Herb Lab 전시 인터랙션 대표 이미지

AI Herb Lab 전시 인터랙션

관람객의 손과 자세를 인식하여 씨앗 선택부터 성장·개화·모바일 분양까지 이어지는 LG전자 전시 경험 구현

작업일
2026.03.09–2026.06.16
디자인 분야
UX/UI인터랙션·모션
용도
코드·프로토타입자동화아이데이션
사용 도구
Claude · Opus 4.8, 4.7MediaPipe · Tasks Vision 0.10.14Three.js · 0.166.1Vite · 5.4.0QRCode · 1.5.4NetlifyNode.js
작성자
이수연

작업 배경

LG전자 × 홍익대학교 금성전파사 캠퍼스 아트콜라보 프로젝트에서 AI Herb Lab의 전시 인터랙션 프로그램을 담당했다. 관람객이 씨앗을 심고, 키우고, 꽃을 피운 뒤 자신만의 씨앗을 분양받는 경험을 실제 전시장 안에서 구현하는 것이 목표였다. 단순한 영상 재생이 아니라 OLED TV에 연결된 웹캠으로 관람객의 입장과 손동작을 인식하고, 선택한 가전에 따라 서로 다른 꽃이 자라며 마지막에는 QR을 통해 모바일 경험까지 이어지는 구조가 필요했다. Claude와 함께 초기 인터랙션 프로토타입부터 실제 운영 코드까지 발전시켰다. 맥북에서 구현한 프로그램을 95인치 OLED, Windows PC, USB 웹캠 환경에서 반복 테스트하며 성능, 손 인식, 온보딩, 폰트, QR과 배포 문제를 지속적으로 수정했다.

작업 단계

공간형 인터랙션 초기 프로토타입

ClaudeMediaPipeThree.jsVite

가전 이미지를 손동작으로 탐색하는 초기 인터랙션 화면 구성

인터랙티브한 미디어아트를 만들어줘
1번 이미지를 기반으로 한 인터랙티브 화면을 만들고 싶은데 엄청나게 큰 vast 흰 스페이스가 있고 거기에 매우 많은 수의 5개의 가전들이 마치 밤하늘의 별처럼 일정한 거리를 두고 놓여져 있어. 공간감이 느껴지게
약간 볼록렌즈로 본 것처럼 중앙에 놓인 가전이 제일 크고 선명하게, 가장자리에 놓인 가전일수록 크기가 작고 햐얗게 보이게
[...]
모든 인터랙션은 매우 매끄럽고 부드럽게
화면의 왼쪽 중앙에는 인물의 모습이 보이는 웹캠 화면이 작게 보이게 만들어줘
mediapipe 연동해서 실제 pinch 제스처로 화면 이동할 수 있게 해줘
공간형 인터랙션 초기 프로토타입 단계 이미지

제스처 기반 성장 인터랙션

ClaudeMediaPipeVite

손을 올리는 동작에 따라 AI Herb가 자라고 꽃이 피는 핵심 인터랙션 구현. 실제 현장에서 사용될 웹캠을 일반 TV에 연결하여 최대한 비슷한 환경에서 테스트해보려고 노력함.

5단계 "식물 키우기/개화" 인터랙션을 개선해줘. 현재는 "손을 올려 키우라"고 안내하지만 실제로는 손에 반응하지 않고 3초 후 자동재생되는 연출이라, 시킨 동작에 피드백이 없어서 관람객이 혼란스러워해. 손 높이가 실제로 꽃 성장에 반영되도록 바꿔줘.

[1] 영상 제어 방식 (중요 — 직접 스크럽 금지)
AI 생성 영상이라 역방향·임의 시킹(currentTime 임의 점프) 시 버벅이므로, 손 높이로 영상을 직접 스크럽하지 말 것. 대신:
손 높이가 "목표 지점(targetTime)"을 정하고, 영상은 정방향 재생으로만 그 지점까지 따라간다
손을 멈추면 영상도 일시정지, 손을 내려도 역방향 재생하지 않고 현재 프레임 유지
[...]
[2] 손 높이 → 성장 단계 매핑 + 잠금
거울 피드 안에 관람객 몸 기준 3개의 가로 목표 라인 표시 (허리 / 가슴 / 머리 위)
손이 한 라인을 통과하면 그 라인이 빛나며 사라지고, 영상이 다음 단계까지 진행 후 그 지점 잠금(아래로 역행 안 됨)
[...]
[4] 머리 위 라인 통과 → 개화 확정 + 클라이맥스
손이 머리 위(마지막) 라인을 통과하면 손 추적을 OFF하고 영상 8~12.3초(완성 구간)를 자동 재생
문구 전환: "이제 손을 내려도 괜찮습니다. 꽃이 피어납니다"
handdown 사운드 재생
만개 파티클 + 빛 연출
[...]
제스처 기반 성장 인터랙션 단계 이미지

온보딩 및 튜토리얼 구조 개편

ClaudeMediaPipeVite

처음 체험하는 관람객도 손동작 사용법을 직원 설명 없이도 자연스럽게 익히는 단계적 온보딩 구성

인트로/온보딩 전체를 개선해줘. 현재는 인트로가 '읽기만 하는' 자동 슬라이드라, 가전 선택에서 갑자기 손 조작이 시작될 때 처음 온 관람객이 "손을 써야 하는 줄 몰랐다"고 헷갈려해. 손 조작을 단계적으로 자연스럽게 학습시키는 흐름으로 바꿔줘. walk-up 전시(처음·짧음·직원 안내 없음)가 최우선 기준이야.

[전체 흐름]
Idle → 웰컴 게이트(첫 손 인터랙션) → 인트로 본문(자동) → 마무리 → 가전 선택
[1] Idle — 시작 안내
사람이 감지되고 손바닥이 인식되면 [...] 메인 화면에 커서(점/빛)가 즉시 붙어 따라다님
손이 일정 시간 안정적으로 인식되면 웰컴 게이트로 전환
[2] 웰컴 게이트 — 첫 손 인터랙션
손 커서를 버튼 위에 일정 시간 머무르면(dwell) 선택 확정
시작할게요: 2.5초 dwell → Intro 진행
X: 3.5초 dwell → Idle 복귀
유령 데모(튜토리얼 카드) 1회
[...]
[학습 곡선 의도]
Idle(손 인지) → 웰컴 게이트(dwell 첫 연습) → 인트로(존재 반영 유지) → 가전 선택(dwell 본격 사용)으로 손 조작이 점진적으로 학습되게 하는 것이 핵심.

모든 유령 데모(WelcomeGate, SeedSelect, Bloom)의 연출을 "튜토리얼 카드" 방식으로 통일해서 개선해줘.
[공통 연출 구조]
예고 진입: 데모 시작 시 화면 중앙에 인트로 카드 [...] 페이드인
카드 내 시연: 카드 안에서 작은 화면처럼 유령 데모 재생
확장 전환: 시연이 끝나면 카드가 은은하게 풀스크린으로 확장
실전 시작: 확장 완료와 함께 실제 손 커서 활성화 + 안내 문구 표시
[시연 카드 디자인 — 연구실 모티프]
얇은 메탈/글래스 베젤 + 모서리 크롭 마크
상단 모노스페이스 라벨
하단 미세 계측 텍스트
[...]

WelcomeGate의 유령 데모를 "손바닥 들기"부터 보여주는 3단계로 개선해줘.
손바닥 들기캡션: "손바닥을 펴서 화면을 향해 드세요"

커서 이동캡션: "손을 움직여 화면 속 점을 옮겨요"

dwell 선택캡션: "「시작할게요」 위에 잠깐 멈추면 시작돼요"

[...]
3단계 시연 후 카드가 풀스크린 확장 → 실제 인터랙션 활성화 → 본문 안내 "이제 직접 해보세요"
온보딩 및 튜토리얼 구조 개편 단계 이미지

현장 운영 안전망 구축

ClaudeMediaPipeVite

관람객 이탈, 다중 인물 진입, 웹캠 연결 해제와 장시간 실행에도 프로그램이 스스로 복구되는 운영 구조 구축

AI Herb Lab의 현장 운영 안정성을 위해 아래 항목을 추가/보강해줘.
기존 동작·타이밍은 유지하고 안전망과 복구 로직만 추가하는 것.

[1] 이탈 시 일시정지 → 자동 리셋 (2단계)
인터랙션 단계에서 사람 미감지가 20초 지속되면 일시정지 화면 진입
손이 다시 인식되거나 [계속하기]를 선택하면 멈춘 지점부터 재개
추가 20초 미감지 시 Idle로 자동 복귀 + 세션 리셋
[3] 다중 인물 추적 안정화 (hysteresis)
추적 대상으로 한번 선정된 인물을 일정 시간 고정 유지
원래 대상이 명확히 사라진 경우에만 전환
[6] 장시간 가동 안정성
Idle 상태가 일정 시간 이상 무활동으로 지속되면 자동 페이지 새로고침
[7] 웹캠 끊김 복구
웹캠 스트림이 끊기면 감지해 자동 재연결 시도
재연결 실패 시 "카메라를 확인해주세요" 복구 안내 화면 표시
[8] 영상 프리로드
Analyzing 구간 동안 다음 단계의 씨앗 심기 영상과 개화 영상을 미리 로드
[...]
현장 운영 안전망 구축 단계 이미지

현장 성능 및 조작 최적화

ClaudeMediaPipeThree.jsVite

현장 테스트에서 발견된 프레임 저하, 손 인식, 캐러셀과 3D 토큰 조작 문제 개선

현장 테스트에서 발견된 성능·버그 문제를 수정해줘. 아래 항목들을 처리하고, 기존 인터랙션 로직·타이밍·플로우는 유지할 것.
[1] 전체 버벅임 / 낮은 프레임레이트 (최우선)
매 프레임 렌더링되는 무거운 요소를 [...] 줄일 것
MediaPipe 추론 빈도와 렌더링 루프를 분리하고 [...] throttle
requestAnimationFrame 기반으로 렌더 루프 정리
목표: 전 구간에서 부드러운 프레임 유지
[3] Idle — 손 들고 3초 유지가 작동 안 함
손이 안정적으로 인식된 상태가 연속 3초간 유지되어야만 다음으로 전환
진입 게이지가 실제 경과 시간과 정확히 연동
시간 기반 카운트로 처리
[4] 폰트 적용 안 됨 + 타이포 줄바꿈 깨짐
한글 폰트로 Pretendard를 /assets/fonts/에 로컬 번들
폰트 스택: 'LGEIHeadline', 'Pretendard', sans-serif
word-break: keep-all 적용
[...]

현장 테스트 후 수정 사항을 반영해줘. 명시 안 한 기존 동작·플로우는 유지.
[1] 데모 모드 중 실제 커서 숨기기
[...]
[2] 개화 영상 — 손=트리거, 정속 재생
손 높이로 영상을 빨리 감지 말 것
손을 올려 단계 라인을 통과하면 해당 구간이 원래 속도로 정상 재생
머리 라인 통과 시 손 추적 OFF + 완성 구간 정속 자동 재생
[3] 엔딩 토큰 회전 안 됨
손 움직임에 토큰이 반응하지 않거나 둔함. Three.js 회전 입력 매핑과 민감도를 점검
관성 + 스무딩 유지
[...]

아래 카피 수정, 엔딩 멘트 위계, 민감도 조정을 반영해줘. 나머지 동작·플로우는 유지.
[2] 엔딩(Card) 멘트 위계
1순위 / 상단 중앙 / 크게:
"당신만의 씨앗이 완성되었습니다.
QR을 스캔해 분양 증서를 받아 집에서 심어보세요."
2순위 / 토큰 옆·아래 / 작게:
"손을 움직여 돌려보세요"
3순위 / 하단 구석 / 가장 작게:
"처음 화면으로 돌아갑니다" + 카운트다운
[3] Seed Select — 캐러셀 회전 민감도
손 좌우 움직임에 캐러셀이 더 잘 반응하도록 민감도 상향
중앙 데드존 유지
회전 멈출 때 가장 가까운 가전으로 부드럽게 스냅
[4] Card — 회전 민감도
손 움직임에 토큰이 더 잘 반응하도록 민감도 상향
관성 + 스무딩 적용, 너무 빠르게 돌지 않도록 감속 처리
현장 성능 및 조작 최적화 단계 이미지

인터랙션 UX 및 시각 체계 정비

ClaudeMediaPipeVite

손동작 피드백, 튜토리얼, 타이포그래피와 나레이션을 하나의 일관된 인터랙션 체계로 정리

추적 대상 표시(WebcamFeed.js)를 "감시 박스"에서 "정밀 계측" 톤으로 리디자인해줘.
네모 박스 제거 → 대상의 네 모서리에 얇은 코너 브래킷([ ] 형태)만 표시
"TRACKING" 텍스트 제거 → 작은 모노스페이스 라벨로 교체
포즈 스켈레톤 살짝
컬러는 흰색 + 반투명으로 통일
기존 LabFrame HUD와 톤 통일
기존 0.5초 히스테리시스 + CSS 트랜지션 부드러운 이동은 유지

현장 테스트에서 발견된 UX 문제 3가지를 개선해줘.
[4] 추적 대상이 누구인지 화면에 표시
현재 추적 중인 사람에게 [...] 시각적으로 명확히
코너 브래킷, 포즈 스켈레톤, "SUBJECT 01" 마커 등
히스테리시스로 깜빡임 방지
[7] 유령 데모를 능동형 튜토리얼로
튜토리얼 카드에서 고스트가 시범 → 카드가 풀스크린 확장 → 관람객이 직접 [...] dwell 성공시켜야 다음으로 진행
"보여주기 → 따라 하기 → 성공 시 진입"
[8] 개화(Bloom) 인터랙션
손 높이 가이드를 메인 화면 한쪽 가장자리에 세로 게이지로 표시
손 위치 인디케이터를 메인 화면에도 작고 반투명하게 표시
중앙의 꽃 개화 영상은 가리지 않고 온전히 보이도록
[...]

인터랙션 전체의 텍스트(타이포그래피)를 하나의 시스템으로 정리·통일해줘.
[1] 폰트 통일
한글: Pretendard
영문/숫자: LGEIHeadline
'LGEIHeadline', 'Pretendard', sans-serif
모든 한글 텍스트에 word-break: keep-all 적용
[2] 텍스트 위계 정의 (4단계)
타이틀
본문/안내
보조
계측/시스템
[3] 위치 규칙 통일
메인 타이틀/안내는 화면 내 일관된 위치
보조 텍스트는 관련 요소 주변 배치
[...]

인트로 슬라이드에 나레이션 음성을 넣고, 각 슬라이드 표시 시간을 음성 길이에 맞춰줘.
[1] 음성 파일 배치
인트로 음성 파일들을 프로젝트의 오디오 에셋 폴더로 복사
슬라이드 1~4 + IntroFinale 순서대로 음성 연결
[2] 음성-슬라이드 싱크
각 슬라이드의 음성 재생이 끝나면 다음 슬라이드로 전환
슬라이드 표시 시간 = 해당 음성 길이 (+ 약간의 여유)
음성과 자막이 동시에 시작
[4] 안전 처리
음성 파일 로드 실패 시 기존 고정 시간으로 폴백
[...]
인터랙션 UX 및 시각 체계 정비 단계 이미지

UT 기반 조작 언어 개선

ClaudeMediaPipeVite

실제 관람객 UT에서 발견된 두 손 사용, ‘커서’ 용어 오해와 튜토리얼 인지 문제 개선

UT에서 발견된 온보딩 문제 3가지를 수정해줘.
[1] 한 손 명시 (두 손 드는 문제)
"손바닥을 펴서" → "한 손을 펴서"로 모든 안내 문구 수정
유령 데모의 시연도 한 손만 드는 모션으로
시스템이 두 손을 감지해도 한 손만 추적하도록 처리
[2] "커서" 용어 제거 (마우스로 오해)
전 화면에서 "커서" 표현을 제거
기본: "손을 움직이면 화면 속 점이 손을 따라 움직여요"
SeedSelect: "손을 움직이면 씨앗이 따라 움직여요"
[3] 유령 데모를 "튜토리얼"로 명시
데모 상단에 직관적인 한글 라벨 표시: "사용 방법" 또는 "따라해보세요"
"지금 보여주는 동작을 따라하면 된다"가 명확히 전달되도록
UT 기반 조작 언어 개선 단계 이미지

배포 및 현장 운영 검증

ClaudeThree.jsMediaPipeViteQRCode

현장 데스크톱과 95인치 OLED 환경에서 QR, 카메라, 한 손 조작과 프로그램 성능을 반복 검증하며 최종 운영 상태 확보

현장에서 테스트 하신 분들이
지금 큐알 연결이 안되고
가전 캐러셀 파트에서 >>한손으로하몀 원래 인식이 안되나요?? 계속 빠르게
이동만 하고 스탑이 되지않아 두손으로 제어하였습니다
라고 피드백을 주심
그리고 오늘 현장에서 아예 밤새서 완벽하게 구동되는지 현장 데탑으로 클로드
코딩 옮길까해
그걸 내 맥북에서 원격으로 켜서 하려고
이거 셋다 어떻게 할지만 일단 디렉션 정리해서 텍스트로 주고 진행하지는 마
배포 및 현장 운영 검증 단계 이미지

모바일 씨앗 분양 경험 확장

ClaudeThree.jsViteQRCodeNetlify

QR 이후 경험을 모바일 다운로드가 가능한 개인화된 씨앗 분양 증서 경험으로 확장

AI Herb Lab에 "코드네임 품종 시스템 + 인물 사진 캡처 + 분양 증서(영수증형)"를 도입해줘. 여러 단계에 걸친 변경이라 아래를 순서대로 반영하고, 명시 안 한 기존 동작은 유지.
[A] 사진 전송 백엔드 (Netlify Functions + Blobs)
분석 단계에서 캡처한 인물 사진을 Netlify Functions로 업로드 → 무작위 짧은 ID 발급
QR URL에 정보 담기: token.html?a=<가전>&c=<코드네임숫자>&d=<날짜>&id=<이미지ID>
이미지는 Netlify Blobs에 저장, 24시간 TTL 자동 삭제
업로드 실패 시 사진 없이 진행
[...]
[B] 웹캠 캡처 + 고지
"체험 중 사진이 촬영되며, 촬영된 데이터는 24시간 후 자동 삭제됩니다"
"씨앗이 당신의 모습을 기록합니다"
"잠시 정면을 바라봐 주세요"
카운트 → 캡처
[...]
[C] 코드네임(품종) 시스템
각 가전에 식물 품종 코드네임을 부여
숫자는 매 세션 랜덤 2자리 생성
A/B variant는 절대 화면에 노출하지 말 것
코드네임은 엔딩(Card)과 모바일 증서에서 처음 공개
[...]
[D] 모바일 증서 페이지 (token.html 재설계)
헤더: "AI HERB LAB" + "CERTIFICATE OF ADOPTION / 씨앗 분양 증서"
DATE / SOURCE / SPECIMEN No.
웹캠 캡처 인물 사진
씨앗 이미지 + 꽃 이미지
코드네임(품종)
VARIANT(A/B) 표기 없음
이미지로 저장
LG전자 제품 보기
[...]
모바일 씨앗 분양 경험 확장 단계 이미지

회고

성과와 한계

화면 시안으로 시작한 전시 아이디어를 맨땅에 헤딩하는 방식으로 실제 관람객이 몸과 손으로 조작할 수 있는 키오스크 시스템으로 구현했다. 손·자세 인식, 가전 선택, 실시간 성장 영상, 3D 토큰과 QR 기반 모바일 경험까지 하나의 체험으로 연결했고, 실제 전시장 하드웨어에서 반복 테스트하며 운영 가능한 수준까지 다듬었다. 특히 개발 경험이 거의 없는 상태에서 Claude와 함께 상태 머신, MediaPipe, Canvas와 Three.js를 조합한 인터랙션을 직접 구현한 경험이 가장 큰 성과였다. 직접 체험해보고 싶으신 분들은 2026년 9월 30일까지 경동시장 내 금성전파사 갤러리에서 만나보실 수 있습니다. 👍

시행착오와 개선점

맥북에서 잘 작동하던 프로그램도 95인치 현장 환경에서는 완전히 다르게 작동했다. 코드만 보면서는 발견하기 어려운 문제가 계속 나와서 지속적인 정신병을 부여했다. 구현 자체도 어려웠지만 사람들이 기대한 방식대로 인터랙션을 사용하지 않는다는 것을 받아들이는게 가장 힘들었다. '초등학생도 바로 이해할 수 있을 정도로 인터랙션을 단순하게 설계해야 한다'는 기술 팀분의 조언이 특히 도움이 되었다. 그 전까지는 현장과 최대한 비슷한 조건에서 UT를 진행하고, 실제 현장에서 검증을 무한 반복하는 수 밖에 없을 것 같다. UT 해줄 사람을 구하려고 홍문관 7층을 돌아다니며 파밍했던 기억이 난다

적합한 활용 맥락

웹 기술을 이용한 전시 키오스크, 카메라 기반 제스처 인터랙션과 전시 이후의 모바일 경험을 빠르게 연결해야 하는 프로젝트에 적합하다. AI를 활용하면 비개발자도 상당히 복잡한 프로토타입까지 구현할 수 있지만, 실제 하드웨어가 개입하는 작업에서는 프롬프트보다 현장 테스트와 버전 관리가 더 중요하다는 점을 확인했다. 현장 기술팀 분들이 없었다면 완전히 혼자 구현하려면 시간이 더 걸렸을 것이라 생각한다.

참고 자료

댓글

0

작성자 정보를 확인하고 있습니다.