1 of 23

Python을 활용한 웹캠 기반�eye-tracking 프로그램 개발

황준오

서울대학교 물리교육과

데이터사이언스연구실 박사과정

2023. 11.

2 of 23

진행 방향

eye tracking에 대한

간단한 이해

Python 개발과정에 대한 소개와 기본 개념 실습

MediaPipe를 사용한

eye tracking tutorial

및 향후 적용방안 논의

3 of 23

프로젝트 페이지

4 of 23

Facial mouse

  • 웹캠으로부터 얻은 영상만으로 마우스를 대체하는 프로젝트

  • Face Landmark로 마우스의 위치를 추정하고, 미간의 이미지로 클릭 여부 판정

5 of 23

Facial mouse

57개의 2차원 백터로 이루어진

Face Landmark 의 시계열 데이터

Input X

Regression

Output Y

마우스 포인터의

위치 벡터

Input X

미간의 이미지

데이터

Classification

Output Y

마우스 클릭 여부

  • Face recognition이라는 오픈소스 라이브러리로 landmark를 구할 수 있음

  • 마우스 위치는 win32api로 접근 및 제어 가능

  • Landmark를 57×2=114 차원의 벡터로 바꿔서 Regression
  • 미간 이미지 crop 범위는 화면에 나타난 얼굴 크기에 비례해서 결정됨

  • 눌렀냐 땠냐를 결정하므로 binary classification

  • Laplacian filter를 사용한 영상처리 기반으로 구현

6 of 23

Facial mouse – 데이터 수집 과정

  • 마우스의 움직임을 눈으로 따라가는 과정을 통해 양질의 데이터 생성 가능
  • 다양한 거리와 위치에서 화면의 구석구석을 바라본 데이터 필요
  • 약 8시간동안 기록하여 10.2MB 분량의 데이터를 얻었음

7 of 23

Facial mouse – 데이터 수집 과정

  • 이미지 처리엔 Convolutional Neural Network가 많이 사용되지만, 학습시키려면 오래 걸리기 때문에 고전적인 영상처리 기법을 사용

  • 미간 주름이 생기는 정도를 수치화하여, Laplacian의 최대치와 평균치로 Logistic Regression 시행

8 of 23

Facial mouse – 개발 결과

9 of 23

Facial mouse – 개발 결과

10 of 23

웹캠 기반 tracking이 범용적으로 쓰일 수 있는가?

  • 웹캠의 성능이 제각기 다르다.

  • 사람의 생김새가 제각기 다르다.

  • 조명과 화질 등에도 영향을 받음

  • 가장 중요한 것은, 웹캠과 모니터 화면의 위치관계가 다 다름

  • (캘리브레이션으로 해결 가능한 부분)

11 of 23

Eye tracking 전용 장비들

  • 적외선 센서를 사용해서, 조명 변화에 덜 민감함

  • 표준화된 규격을 가지고 있고, 통제된 장소에서 사용됨

12 of 23

일단 웹캠 버전을 체험해보자

JavaScript 기반으로, 웹페이지에서 사용 가능하게 개발됨

13 of 23

내부적 절차

1. Face landmark와 마우스 클릭 지점 사이의 관계를 수집함

2. 자체적으로 구축한 여러 사람의 데이터와, 사용자의 데이터를 병합함

3. 선형 회귀 모형을 사용해서 시선을 예측함

14 of 23

우리가 개선할 수 있는 부분 - 알고리즘

기존에는 57개의 landmark point 모델을 사용

MediaPipe라는 최신의 모델은 478 points를 제공함

더 높은 정밀도를 가짐

선형회귀보다 더 고도화되고 데이터가 적을 때 유리한

Gaussian process 회귀분석을 사용함

15 of 23

우리가 개선할 수 있는 부분 - 파이프라인

  • 기존에는 사용자 컴퓨터에서 캘리브레이션 – 측정 – 기록이 전부 이루어짐

  • 그러나 기본적으로 영상처리를 해서 결과를 얻는 것이기 때문에, 마우스 클릭 기록과 영상을 sync해서 수집해 놓으면 사후분석이 가능. (예 : 검사를 먼저 하고, 캘리브레이션을 이후에 함)

  • ecological validity 확보

모니터 화면

웹캠 영상

마우스 클릭

Landmark detection

Regression model fitting

Estimation

16 of 23

MediaPipe

Google에서 공개한 일련의 영상처리/컴퓨터비전 인공지능 모델 집합

https://mediapipe-studio.webapps.google.com/home

  • 최적화가 잘 되어서 저사양 컴퓨터와 CPU에서도 작동 가능

  • Python, JavaScript, Android 등 다양한 언어와 플랫폼 지원

  • 완벽히 무료이며, 높은 자유도

17 of 23

MediaPipe

18 of 23

강의자료 다운로드 및 설치 방법

pip install –r requirements.txt

python –m pip install –r requirements.txt

pip3 install –r requirements.txt

19 of 23

Python 언어의 특징

Python은 인터프리터 언어로, 코드를 실행파일로 만드는 과정인 컴파일이 필요 없이 바로 실행된다.

단 인터프리터가 설치된 환경에서만 사용 가능하다.

(원한다면 컴파일을 할 수 있는 방법이 있음)

20 of 23

객체지향의 개념

21 of 23

객체지향의 개념

22 of 23

객체지향의 개념

23 of 23

프로그래밍 언어의 표준적인 문법

클래스(타입)에 따라 취할 수 있는 행동 (method) 가 달라진다.

프로그래밍 언어에서 점(.)은 부모/자식 관계나 종속 관계를 나타낸다.

Human Class인 객체 Juno가 있다고 생각하면

  • Juno.run()

은 가능하지만

  • Juno.fly()

는 불가능하다.

메소드는 인수(parameter, argument)를 여러 개 입력받기도 한다.

  • Juno.eat(‘햄버거’, 2)
  • Juno.eat(food=‘햄버거’, count=2)

위치 관계만으로도 의미를 전달할 수 있고, 파라미터 이름을 통해 직접 전달할 수도 있다.

동일한 메소드이더라도 인수를 집어넣는 것에 따라 기능이 달라지기도 한다.

ask sb about sth vs ask sb for sth

밥을 먹다 vs 욕을 먹다