letter

새 글을 메일로 받아보세요

한 달에 한 번, 그달의 글을 추려 보내드립니다.

메일로 구독하기
다음 인터페이스는 얼굴에 올 수 있을까 - AR 글래스와 시선 추적의 가능성

TREND/기기와 경험

다음 인터페이스는 얼굴에 올 수 있을까 - AR 글래스와 시선 추적의 가능성

회의에서 출발한 질문

스마트폰 다음의 인터페이스를 상상할 때마다 기술 업계는 자꾸 얼굴로 돌아옵니다. 구글 글래스, 오큘러스 리프트, 메타 퀘스트, 그리고 가장 최근의 애플 비전 프로도 결국 같은 질문 위에 있습니다. 다음 인터페이스는 정말 손에서 얼굴로 옮겨올 수 있을까요.

 

저는 오랫동안 이 질문에 회의적이었습니다.

 

머리에 쓰는 컴퓨터라는 개념은 흥미로웠지만, 실제로 경험해본 기기들은 일상의 도구라기보다 특별한 체험 장비에 가까웠습니다. 그래서 한동안 저는 다음 인터페이스가 얼굴로 옮겨오는 일은 어려울 거라고 막연히 생각했습니다.

그런데 최근에는 조금 다른 생각을 하게 되었습니다. 이유는 새로운 헤드셋을 써봤기 때문이 아닙니다. 오히려 AI를 쓰면서, 맥북의 페이스타임 카메라로 시선 추적 기능을 직접 구현해보면서였습니다.

 

헤드셋이 풀지 못한 것

낮은 비용으로 쉽게 접근할 수 있는 구글 카드보드의 예를 들면 저렴하고 단순하지만, 그만큼 한계도 명확합니다. 스마트폰을 종이 헤드셋 안에 넣고 보는 방식은 신기했지만, 오래 쓰고 싶은 기기는 아니었습니다.

메타 퀘스트도 마찬가지였습니다. 몰입감은 분명 있습니다. 하지만 무게, 어지러움, 땀이 차는 문제, 얼굴을 덮는 답답함은 쉽게 사라지지 않았습니다. 기술적으로는 미래처럼 보였지만, 몸은 그것을 일상적인 인터페이스로 받아들이지 못했습니다.

애플 비전 프로는 직접 써본 적이 없어서 단정할 수는 없습니다. 다만 리뷰들을 보면 무게에 대한 부담을 짚는 글이 꽤 많습니다. 결국 비슷한 문제가 남아 있는 셈입니다.

 

이후 저는 VR이나 AR 기기가 기존의 PC나 스마트폰을 대체할 수 있을지에 대해 꽤 부정적이었습니다. 해상도가 좋아지고 콘텐츠가 많아지고 칩 성능이 개선되더라도, 결국 사용자가 장시간 착용할 수 없다면 일상의 도구가 되기 어렵다고 생각했습니다. 스마트폰은 손에 들 수 있고, 이어폰은 귀에 꽂을 수 있지만, 헤드셋은 얼굴 전체를 점유합니다. 이 차이는 생각보다 큽니다.

 

그런데 가벼운 안경형이라면

다만 한 가지 가능성은 열어두고 있었습니다. 무거운 헤드셋이 아니라 안경형 디바이스라면 어떨까.

Xreal Air나 Ray-Ban Meta 같은 제품들 말입니다.

이 제품들도 직접 사용해본 것은 아닙니다. 그래서 얼마나 쓸 만한지 단정할 수는 없습니다.

다만 리뷰를 보면 기존 VR 헤드셋 특유의 스크린 도어 이펙트(쉽게 말해서 모기장 현상이라고 부르죠)도 덜하고, 무게도 일반 안경 수준에 가깝다고 합니다. 얼굴 전체를 덮는 답답함이 사라진다는 점이 흥미로웠습니다.

방향성만 놓고 보면, 얼굴 위 인터페이스는 결국 이쪽으로 가야 합니다. 더 가볍고, 덜 의식되고, 오래 착용할 수 있는 형태로요. 더 강력한 프로세서보다 더 가벼운 착용감이 필요하고, 더 거대한 가상공간보다 더 적은 피로감이 필요합니다.

그런데 안경형 디바이스가 답이 될 수 있다고 생각하게 된 진짜 이유는 무게나 해상도 때문이 아니었습니다.

 

AI는 빨라졌고, 이제 입력이 병목이 되었습니다

AI는 이미 충분히 빠릅니다. 초안을 만들고, 요약하고, 비교하고, 문장을 고치고, 이미지를 만들고, 코드를 제안하는 속도는 사람이 따라가기 어렵습니다. 그런데 실제 업무에서 AI를 써보면 병목은 다른 곳에서 생깁니다. AI가 만들어낸 결과물을 사람이 읽고, 고르고, 수정하고, 다시 지시하고, 최종 판단하는 과정입니다.

AI는 빨라졌지만, 우리는 여전히 키보드와 마우스로 생각을 전달합니다.

 

문장을 고치려면 먼저 해당 문단을 찾아야 합니다. 이미지를 수정하려면 어느 부분이 마음에 들지 않는지 설명해야 합니다. 여러 개의 시안을 비교하려면 화면을 오가며 보고, 클릭하고, 다시 말해야 합니다. AI가 몇 초 만에 결과물을 만들어도, 사람이 그것을 검토하고 지시하는 인터페이스가 느리면 전체 작업 속도는 크게 빨라지지 않습니다.

 

키보드와 마우스는 여전히 강력한 입력 도구입니다. 저 역시 가장 많이 쓰는 도구입니다. 하지만 기본 구조는 오래됐습니다. 화면을 보고, 손으로 포인터를 옮기고, 클릭하고, 다시 키보드로 입력하는 방식입니다. 형태와 편의성은 발전했지만, 사람이 생각을 컴퓨터에 전달하는 기본 방식은 수십 년 동안 크게 달라지지 않았습니다.

 

결국 AI 시대의 병목은 생성이 아니라 검토일 수 있습니다. 그리고 검토의 병목은 인터페이스에서 드러납니다.

 

뇌파, 음성, 시선

이 문제를 극단적으로 해결할 수 있는 것은 아마도 뇌파 인식일 것입니다. 생각한 것을 곧바로 컴퓨터가 이해한다면 입력 효율은 완전히 다른 차원이 될 수 있습니다. 하지만 적어도 지금의 일상적 업무 환경에서 뇌파 인터페이스는 아직 선행 기술 탐색 단계에 가깝습니다. 당장 모니터 앞에서 쓸 수 있는 현실적인 인터페이스는 아닙니다.

 

그렇다면 지금 가장 현실적인 후보는 음성과 시선입니다.

 

음성 인식은 이미 많이 발전했습니다. AI에게 자연어로 지시하는 방식은 확실히 강력합니다. 하지만 음성에는 사회적 장벽이 있습니다. 사무실에서 혼자 계속 말하는 것은 아직 어색합니다. 조용한 공간, 회의실, 카페, 가족이 있는 집에서도 음성 입력은 항상 자연스럽지 않습니다. 말은 효율적이지만, 늘 사용할 수 있는 입력 방식은 아닙니다.

 

반면 시선은 다릅니다. 우리는 이미 화면을 보고 있습니다. 문서를 읽을 때도, 디자인 시안을 검토할 때도, 표를 볼 때도 먼저 눈이 움직입니다. 손은 그다음입니다. 지금의 인터페이스는 이 순서를 충분히 활용하지 못합니다. 사용자는 이미 보고 있는데, 다시 마우스를 움직여 가리키고, 클릭하고, 키보드로 설명해야 합니다.

 

시선 인식이 좋아진다면 이 간극을 줄일 수 있습니다.

시선은 단순히 마우스를 대체하는 입력이 아닙니다. 더 중요한 것은 맥락을 지정한다는 점입니다.

 

AI에게 명령할 때 가장 어려운 것 중 하나는 내가 무엇을 말하는지 정확히 가리키는 일입니다. 이 문단, 이 이미지, 이 표, 이 카드, 이 버튼, 이 시안. 지금은 그것을 마우스로 선택하거나 말로 길게 설명해야 합니다. 하지만 컴퓨터가 내가 보고 있는 대상을 이해할 수 있다면, 지시의 절반은 이미 끝난 셈입니다.

 

예를 들어 문서를 보다가 특정 문단을 바라보며 "조금 더 짧게 정리해줘"라고 말합니다. 디자인 시안을 보면서 특정 영역에 시선이 머문 상태에서 "여기는 좀 무거워 보여"라고 말합니다. 대시보드를 보다가 특정 수치를 바라보며 "이 변화의 원인을 찾아줘"라고 요청합니다. 이때 시선은 대상을 지정하고, 음성은 의도를 설명합니다. 손은 실행을 확정하거나 세밀하게 조정하는 역할로 남을 수 있습니다.

 

이 조합은 꽤 현실적입니다. 시선, 음성, 작은 손동작이 결합되면 키보드와 마우스 중심의 작업 흐름과는 다른 속도가 나올 수 있습니다.

 

직접 만들어본 시선 추적

제가 이 가능성을 더 체감하게 된 것은 UT용 앱을 만들면서였습니다. 맥북의 페이스타임 카메라를 활용해 시선 추적 기능을 구현해본 적이 있습니다. 처음부터 모든 코드를 제가 직접 짠 것은 아니고 AI의 도움도 받았습니다. 하지만 전체 구조를 설계하고, 테스트하고, 실제로 작동하는 형태로 다듬는 과정에서 시선 인식이 어디까지 내려왔는지 꽤 구체적으로 확인할 수 있었습니다.

 

핵심은 WebGazer.js라는 오픈소스 라이브러리였습니다. 웹캠으로 사용자의 시선 좌표를 추정하는 기능을 제공합니다. 초기화는 의외로 간단했습니다.

webgazer.setGazeListener(onGaze);
webgazer.showVideoPreview(false)
        .showPredictionPoints(false)
        .applyKalmanFilter(true);
await webgazer.begin();

리스너에 시선 좌표를 받는 함수를 연결하고, 비디오 미리보기와 예측 포인트는 화면에서 숨기고, 흔들림을 잡아줄 칼만 필터를 켜고 시작합니다. 다섯 줄로 시선 추적이 켜집니다. 학부 시절에 봤던 아이트래킹 장비를 떠올리면 좀 어이가 없을 정도로 간단합니다.

 

그런데 작동시켜 보면 바로 정확하게 잡히지는 않습니다. 사용자별 캘리브레이션 과정이 필요합니다. 화면 9개 지점을 차례로 응시하고 클릭하는 방식입니다. 사람마다 눈의 위치, 카메라 각도, 자세, 화면과의 거리가 다르기 때문입니다.

 

캘리브레이션 코드의 핵심은 한 줄입니다. 사용자가 응시하는 지점의 화면 좌표를 WebGazer에 넘겨주면, 라이브러리가 그 정보를 학습해서 사용자별 보정 모델을 만듭니다.

function recDot(i, d) {
  const px = CP[i][0] * window.screen.width;
  const py = CP[i][1] * window.screen.height;
  let n = 0;
  const iv = setInterval(() => {
    webgazer.recordScreenPosition(px, py, 'click');
    n++;
    if (n >= 5) clearInterval(iv);
  }, 100);
}

각 지점마다 100ms 간격으로 다섯 번 기록합니다. 0.5초 동안 같은 지점을 응시한 데이터를 모으는 셈이죠. 9개 지점 전체를 마치면 약 45개의 보정 데이터가 쌓이고, 그때부터 시선 좌표가 사용자에게 맞춰집니다.

 

이 과정은 번거롭지만 동시에 현실적인 경험이었습니다. 시선 인터페이스는 그냥 눈을 읽는 기술이 아니라, 사용자별 차이를 보정해야 하는 기술이라는 점을 확인할 수 있었기 때문입니다.

 

시선 좌표를 받아 처리하는 함수는 이렇게 생겼습니다.

let gazeOY = 0;
function onGaze(data) {
  if (!data || !S.tracking) return;
  const x = data.x, rawY = data.y;
  const sh = window.screen.height;
  
  // Y축 좌표 보정 (카메라 각도에 따른 오차 조정)
  const vy = rawY + gazeOY * (1 + Math.max(0, rawY/sh) * 1.2);
  
  // 화면 밖으로 과도하게 튀는 좌표 필터링
  if (x < -200 || vy < -200 || 
      x > window.screen.width * 1.8 || 
      vy > sh * 1.8) return;
  
  S.pts.push({x, vy, py: vy + S.scrollY, t: Date.now()});
}

코드 자체는 단순하지만 두 가지 현실적 문제를 잡고 있습니다.

 

첫째, 카메라 위치와 화면 각도에 따라 Y축 좌표가 위아래로 밀리는 현상이 있었습니다. 노트북 카메라는 보통 화면 위쪽에 달려 있어서, 시선이 화면 아래쪽으로 내려갈수록 오차가 커집니다. 그래서 gazeOY 값을 실시간으로 조절할 수 있도록 두고, 화면 아래쪽일수록 보정값을 더 크게 적용합니다.

 

둘째, 가끔 시선이 화면 밖으로 과도하게 튀는 좌표가 들어옵니다. 사용자가 잠깐 다른 곳을 봤거나, 추정 오차가 큰 경우입니다. 이런 좌표를 그대로 데이터에 쌓으면 분석이 망가지기 때문에, 화면 너비의 1.8배를 벗어나는 값은 아예 제외합니다.

 

마우스 좌표라면 이런 처리가 필요 없습니다. 마우스는 정확하게 클릭한 곳을 가리키니까요. 하지만 시선은 다릅니다. 흔들리는 생체 신호를 사용 가능한 입력으로 정제하는 과정이 필요합니다.

 

수집한 시선 좌표를 그냥 숫자로 저장하는 데서 끝내지 않고, Canvas를 활용해 히트맵으로 시각화했습니다. 사용자가 어느 영역을 오래 봤는지, 어느 영역에 시선이 집중됐는지, 어떤 부분이 상대적으로 무시됐는지를 색상 밀도로 표현했습니다.

 

히트맵의 핵심은 두 단계입니다. 먼저 각 시선 좌표를 중심으로 원형 영역에 가우시안 분포로 밀도를 누적합니다.

// 각 시선 포인트 주변에 밀도를 누적 (가우시안 분포)
const r = 28;  // 영향 반경
ps.forEach(p => {
  const cx = Math.round(p.x * scx);
  const cy = Math.round(p.py * scy);
  const x0 = Math.max(0, cx-r), x1 = Math.min(W-1, cx+r);
  const y0 = Math.max(0, cy-r), y1 = Math.min(H-1, cy+r);
  
  for (let py = y0; py <= y1; py++) {
    for (let px = x0; px <= x1; px++) {
      const d2 = (px-cx)*(px-cx) + (py-cy)*(py-cy);
      if (d2 > r*r) continue;
      den[py*W+px] += Math.exp(-d2/(2*(r/2.5)*(r/2.5)));
    }
  }
});

각 시선 좌표를 중심으로 반경 28px 안의 픽셀들에 중심에서 멀어질수록 약해지는 값을 누적합니다. 시선이 한 곳에 오래 머물면 그 자리의 밀도가 빠르게 올라가고, 잠깐 스친 곳은 약한 흔적만 남습니다.

 

그 다음 단계는 밀도를 색상으로 변환하는 것입니다. 시선이 오래 머문 곳일수록 빨간색에 가깝게, 짧게 스친 곳은 파란색으로 표시합니다.

// 밀도값을 색상으로 변환 (파랑 → 녹색 → 노랑 → 빨강)
for (let i = 0; i < den.length; i++) {
  const v = den[i] / mx;  // 정규화 (0~1)
  if (v < .03) continue;
  let r2, g, b, a;
  
  if (v < .2)      { r2=0;   g=t*80;     b=200;        a=60+t*60;  }
  else if (v < .4) { r2=0;   g=80+t*175; b=200*(1-t);  a=120+t*30; }
  else if (v < .6) { r2=t*200; g=255;    b=0;          a=150+t*20; }
  else if (v < .8) { r2=200+t*55; g=255*(1-t*.5); b=0; a=170+t*20; }
  else             { r2=255; g=128*(1-t); b=0;         a=190+t*25; }
  
  o[i*4] = r2; o[i*4+1] = g; o[i*4+2] = b; o[i*4+3] = a;
}

다섯 구간으로 나눠서 파랑 → 청록 → 녹색 → 노랑 → 빨강으로 점진적으로 변화시킵니다. 시선 데이터가 그대로 시각 정보로 변환되는 자리입니다. 처음 이 히트맵이 화면에 떠올랐을 때 노트북 카메라 하나로 이 정도 결과물을 보여주는 게 가능하다는 점이 놀라웠습니다.

 

물론 웹 기반 구현에는 제약도 있었습니다. 외부 사이트를 iframe으로 불러오거나 캡처할 때는 CORS 정책에 막히는 경우가 많았습니다. 그래서 html2canvas로 페이지 캡처를 시도하되, 실패할 경우 사용자가 직접 스크린샷을 올려 히트맵과 합성할 수 있도록 우회 방식을 두었습니다. 또한 원본 시선 데이터를 CSV로 내보내 나중에 다시 분석할 수 있도록 했습니다.

 

이 부분은 꽤 실무적인 깨달음을 줬습니다. 기술적으로 가능하다는 것과 실제 환경에서 안정적으로 작동한다는 것은 다른 문제입니다. 시선 추적도 마찬가지였습니다. 웹캠으로 시선을 읽는 것은 가능했습니다. 하지만 정확도를 높이려면 캘리브레이션이 필요했고, 흔들리는 좌표를 안정시키려면 필터링이 필요했고, 데이터를 의미 있게 쓰려면 시각화가 필요했고, 실제 사이트에 적용하려면 브라우저 보안 정책 같은 현실적인 제약을 우회해야 했습니다.

 

그리고 한 가지 더 떠오르는 일이 있었습니다. 제가 시선 추적 장비를 처음 본 것은 1998년 무렵 학부생 시절이었습니다. 제 기억 속의 아이트래커는 연구실 안의 고가 전문 장비였습니다. 사람의 시선을 읽는 일은 실험실 안에서 가능한 일이었고, 장비도 크고 무거웠으며, 사용을 위해서는 연구자의 세팅과 통제가 필요했습니다.

 

2000년대 후반에도 상황은 크게 다르지 않았습니다. 시선 추적은 여전히 별도의 장비가 필요한 영역이었습니다. UX 리서치나 인간공학 연구에서 의미 있는 도구였지만, 일반 사용자가 매일 접하는 인터페이스라고 보기는 어려웠습니다.

 

그런 기술이 이제는 노트북 카메라로 어느 정도 구현됩니다. 물론 전문 아이트래커와 같은 수준이라고 말할 수는 없습니다. 하지만 중요한 것은 정확도 자체만이 아닙니다. 한때 연구실 장비였던 시선 추적이 점점 일상적인 컴퓨팅 환경 안으로 들어오고 있다는 점입니다.

 

두 흐름이 만나는 자리

이 부분에서 저는 얼굴 인터페이스를 다시 보게 되었습니다.

 

사람들은 VR이나 AR 기기를 말할 때 주로 화면을 이야기합니다. 얼마나 선명한가, 얼마나 넓게 보이는가, 얼마나 몰입감이 있는가를 말합니다. 물론 중요합니다. 하지만 AI 시대의 관점에서 보면 더 중요한 질문은 따로 있습니다.

 

그 기기는 내가 보고 있는 것을 이해할 수 있는가. 내가 무엇을 문제 삼고 있는지 파악할 수 있는가. 내가 손으로 일일이 가리키기 전에, 판단의 맥락을 읽을 수 있는가.

 

저는 얼굴 인터페이스를 기대하는 이유가 여기에 있다고 생각합니다. 얼굴에 화면을 붙이고 싶어서가 아닙니다. 더 큰 가상공간을 보고 싶어서도 아닙니다. AI가 만든 결과물을 더 빠르게 보고, 더 정확히 가리키고, 더 적은 동작으로 판단하기 위해서입니다.

 

애플 비전 프로의 눈, 손, 음성을 결합한 조작 방식이 흥미로운 것도 이러한 관점의 연장입니다. 사용자가 바라보는 대상을 중심으로 조작하고, 작은 손동작으로 실행하는 방식은 시선을 UI의 중심에 놓는 접근입니다. 이것은 단순히 새로운 화면을 만든 것이 아니라, 새로운 입력 방식을 제안한 것에 가깝습니다.

 

그래서 제가 기대하는 것은 이 두 흐름이 만나는 자리입니다. 가벼운 안경형 디바이스, 그리고 그 안에 들어간 시선 추적 기능. 거기에 작은 손동작과 음성이 결합되는 인터페이스. 무거운 헤드셋이 풀지 못한 착용감과, 키보드 마우스가 풀지 못한 입력 효율을 한꺼번에 다루는 방향입니다.

 

그래도 남는 한계

물론 한계도 분명합니다.

 

시선은 의도와 항상 같지 않습니다. 우리가 어떤 것을 본다고 해서 반드시 선택하려는 것은 아닙니다. 그냥 지나가며 볼 수도 있고, 불편해서 볼 수도 있고, 무심코 시선이 머물 수도 있습니다. 그래서 시선 인식은 단독 입력이 되기 어렵습니다. 손동작, 음성, 맥락 인식과 결합되어야 합니다.

 

프라이버시 문제도 있습니다. 시선 데이터는 생각보다 민감합니다. 사람이 무엇을 오래 보는지, 무엇을 피하는지, 어디에서 망설이는지는 단순한 조작 정보가 아닙니다. 관심과 판단, 때로는 감정까지 드러낼 수 있습니다. 시선 인터페이스가 일상화되려면 성능만큼이나 데이터 보호와 신뢰가 중요해질 수밖에 없습니다.

 

그리고 가장 현실적인 문제는 여전히 착용감입니다. 무겁고 뜨겁고 답답한 기기는 아무리 똑똑해도 오래 쓰기 어렵습니다. 얼굴 위의 컴퓨터가 성공하려면 먼저 몸을 설득해야 합니다.

 

차세대 인터페이스가 정말 얼굴에 올지는 아직 알 수 없습니다. 하지만 한 가지는 분명해 보입니다. 다음 인터페이스의 핵심은 화면이 어디에 놓이느냐가 아닙니다. 인간의 시선과 판단을 컴퓨터가 얼마나 자연스럽게 이해하느냐입니다.

 

AI는 이미 충분히 빠르게 대답하기 시작했습니다.

이제 남은 질문은 우리가 얼마나 빠르고 정확하게 그것을 보고, 가리키고, 판단할 수 있느냐일지 모릅니다.

 

끝.

 

 

* 아래 첨부한 HTML 파일을 실행하면, 카메라가 내장된 노트북에서 본문에 소개한 간단한 아이트래킹 기능을 직접 확인해볼 수 있습니다.

FRME_eyetracking-heatmap.html
0.04MB