asanchezyali/talking-avatar-with-ai
This project is a digital human that can talk and listen to you. It uses OpenAI's GPT to generate responses, OpenAI's Whisper to transcript the audio, Eleven Labs to generate voice and Rhubarb Lip Sync to generate the lip sync.
AI를 활용한 대화 가능한 아바타
무엇인가요 – 3D '디지털 인간'(잭이라고 명명됨)과 대화할 수 있는 소규모 오픈소스 데모입니다. 아바타는 Whisper를 통해 듣고(음성 입력), OpenAI의 GPT-3/ChatGPT를 통해 생각하며(논리 처리), Eleven Labs TTS를 통해 말하고(음성 출력), Rhubarb Lip-Sync과 사전 정의된 애니메이션 클립을 통해 입술과 표정을 움직입니다(입모양 동기화). 전체 스택은 TypeScript/React 프론트엔드와 Node/Yarn 모노레포 백엔드로 연결되어 있습니다.
핵심 구성 요소
- LLM 브레인 –
@langchain/openai는 모델이text,facialExpression,animation을 포함한 JSON 배열을 반환하도록 강제하는 프롬프트를 생성합니다. 응답은zod로 파싱되어 구조가 보장됩니다. - 음성 인식 – OpenAI Whisper는 사용자 음성 입력을 텍스트로 변환합니다.
- 텍스트 음성 변환 – Eleven Labs는 LLM의 응답에서 고품질 오디오를 생성합니다.
- 비제임 생성 – Rhubarb Lip-Sync은 오디오를 입모양 메타데이터로 변환하여 3D 얼굴의 입모양 동기화를 가능하게 합니다.
- 프론트엔드 – Tailwind CSS와 React-Three-Fiber를 사용하는 React 앱은 아바타를 렌더링하고, 선택된 애니메이션/표정을 적용하며, 오디오를 재생합니다.
작동 방식 (개요 흐름)
- 사용자 입력 – 텍스트 입력 또는 오디오 녹음 중 하나.
- 음성 인식 (오디오 입력 시) – Whisper → 일반 텍스트.
- LLM 호출 – 텍스트는 사용자 정의 프롬프트와 함께 OpenAI의 GPT 모델로 전송되며,
text,facialExpression,animation을 포함한 JSON 페이로드를 요청합니다. - TTS –
text필드는 Eleven Labs로 전송되어 오디오 파일이 반환됩니다. - 입모양 동기화 – 오디오 파일은 Rhubarb에 입력되어
mouthCues(입모양 타임스탬프)를 출력합니다. - 렌더링 – 프론트엔드는 JSON을 읽고 아바타의 표정과 애니메이션을 전환하고, 오디오를 재생하며, 비제임 데이터를 사용해 입모양을 제어합니다.
시작하기
- 사전 요구 사항 – OpenAI, Eleven Labs, Rhubarb 계정(유료 플랜 권장),
ffmpeg, 최신 Node/Yarn 환경. - 클론 및 설치
git clone git@github.com:asanchezyali/talking-avatar-with-ai.git cd digital-human yarn # 모노레포 패키지 설치 - 설정 –
/apps/backend/.env파일에 OpenAI 및 Eleven Labs의 키와 ID를 입력합니다. - 실행 –
yarn dev를 실행하고http://localhost:5173/을 열어 봅니다.
보여지는 내용 – 사용자의 발화 또는 텍스트 입력에 따라 적절한 표정(웃음, 슬픔, 분노, 놀람, 웃긴 얼굴, 기본)과 신체 애니메이션(Idle, TalkingOne, TalkingThree 등)으로 반응하는 3D 아바타가 표시되는 웹 페이지입니다. 아바타의 목소리는 Eleven Labs에서 제공되며, Rhubarb를 통해 입모양이 정확히 동기화됩니다.
제한 사항 / 참고 사항
- 데모는 외부 유료 API에 의존하며, 무료 플랜은 레이트 제한에 도달해 아바타가 멈출 수 있습니다.
- 표정과 애니메이션은 고정된 세트만 지원되며, 확장하려면 프롬프트를 수정하고 새로운 애니메이션 자산을 추가해야 합니다.
- 이 리포지토리는 프로덕션 준비된 프레임워크가 아니라 개념 증명용이며, 오류 처리, 확장성, UI 정교함은 최소한입니다.
유용한 링크
- 자세한 튜토리얼: https://monadical.com/posts/build-a-digital-human-with-large-language-models.html
- Discord 지원 채널: https://discord.gg/gJ3vCgSWeh
- Rhubarb Lip-Sync 리포지토리: https://github.com/DanielSWolf/rhubarb-lip-sync
위 정보는 리포지토리의 README에서 직접 인용되었으며, 추가 기능은 가정하지 않았습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트