TL;DR
시선 감지는 한 순간의 시선 방향이나 대상을 추정하고, 시선 추적은 여러 프레임의 예측을 연결해 시선 이동 경로와 시각적 주의를 파악합니다. Roboflow Workflows로 SAM 3 기반 얼굴 검출, OC-SORT 또는 BoT-SORT 기반 얼굴 추적, Detections Stabilizer를 구성한 뒤, Roboflow Inference의 L2CS-Net이 얼굴 crop에서 yaw와 pitch를 추정하도록 파이프라인을 나눕니다. 프레임별 검출 결과는 tracker ID와 함께 JSON으로 저장하고, 각 얼굴에 독립적인 지수 평활화를 적용해 시선 화살표를 그린 다음 원래 FPS의 영상으로 다시 결합합니다. 실시간 처리 속도, 가려진 눈, 빠른 시선 이동, 조명과 motion blur, 프레임 간 ID 유지가 정확도와 안정성을 좌우합니다.
섹션별 상세

import os
from inference_sdk import InferenceHTTPClient
from inference_sdk.webrtc import VideoFileSource, StreamConfig, VideoMetadata
client = InferenceHTTPClient.init(
api_url="https://serverless.roboflow.com",
api_key=os.getenv("ROBOFLOW_API_KEY")
)
# WebRTC stream configuration
config = StreamConfig(
stream_output=[],
data_output=[
"output_image", # Frame with bounding boxes visualized
"stabilized_predictions" # Stabilized face predictions with tracker IDs
],
requested_plan="webrtc-gpu-medium",
requested_region="us"
)
INPUT_VIDEO = "input.mp4"
source = VideoFileSource(INPUT_VIDEO, realtime_processing=False)
# Start WebRTC session
session = client.webrtc.stream(
source=source,
workflow="human-face-detection-1788782690880",
workspace="dikshants-blog-workspace",
image_input="image",
config=config
)Roboflow Workflow에서 시각화된 프레임과 추적·안정화된 얼굴 예측을 함께 받아 후속 시선 추정에 사용할 WebRTC 세션을 구성합니다.
# Run workflow
session.run()
import json
# Save face predictions for entire video to JSON
FACE_PREDICTIONS_JSON = "face_predictions.json"
with open(FACE_PREDICTIONS_JSON, "w", encoding="utf-8") as f:
json.dump(face_predictions_by_frame, f, indent=2)
print("Roboflow processing completed.")영상의 모든 프레임을 처리한 뒤 프레임별 얼굴 바운딩 박스와 tracker ID를 JSON 파일로 저장합니다.









# Gaze tracking configuration
GAZE_SMOOTHING_ALPHA = 0.18
FACE_CENTER_SMOOTHING_ALPHA = 0.30
# Smoothing function for gaze and face center values
def smooth_value(previous, current, alpha):
if previous is None:
return current
return alpha * current + (1.0 - alpha) * previous연속 프레임에서 변동하는 yaw·pitch와 얼굴 중심 좌표를 이전 값과 현재 값의 가중 평균으로 평활화합니다.
용어 해설
- 시선 감지(Gaze Detection)
- — 시선 감지는 눈 위치, 동공과 홍채 방향, 머리 자세, 얼굴 특징점 등을 결합해 사람이 어느 방향이나 대상을 바라보는지 추정하는 기술입니다. 순간적인 시선 위치만 분류하면 되므로 연속적인 움직임을 기록하는 Gaze Tracking보다 요구되는 시간 정보가 적습니다.
- 시선 추적(Gaze Tracking)
- — 시선 추적은 여러 프레임의 시선 예측을 시간 순서대로 연결해 사람이 처음 바라본 위치, 머문 시간, 다음 이동 지점과 시선 경로를 기록하는 처리 방식입니다. 얼굴 추적과 시간적 평활화를 함께 적용해 시각적 주의의 변화를 연속적인 궤적으로 바꿉니다.
- 주시점(Point of Regard)
- — 주시점은 사람이 바라보는 방향을 화면의 특정 좌표나 장면 속 물체 위치로 변환한 결과입니다. 시선 모델이 출력한 yaw·pitch만으로는 실제 대상이 정해지지 않으므로 카메라와 환경 정보, 화면 보정 또는 장면의 물체 검출을 함께 사용합니다.
- 비최대 억제(Non-Maximum Suppression)
- — 비최대 억제는 같은 물체를 가리키는 겹친 바운딩 박스 중 신뢰도가 낮은 결과를 제거하는 후처리 기법입니다. 이 글의 Workflow에서는 confidence threshold 0.6과 함께 사용되며, NMS IoU threshold가 겹침 허용 범위를 결정합니다.
- 지수 평활화(Exponential Smoothing)
- — 지수 평활화는 현재 예측과 이전에 누적한 값을 가중 평균해 프레임 사이의 흔들림을 줄이는 방법입니다. 글의 코드에서는 gaze angle에 0.18, 얼굴 중심 좌표에 0.30을 적용해 급격한 시선 변화와 검출 위치의 jitter를 완화합니다.
기술
- Roboflow Workflows
- Roboflow Agent
- Roboflow Inference
- Roboflow InferencePipeline
- Roboflow Train
- SAM 3
- RF-DETR
- YOLO
- L2CS-Net
- OC-SORT
- BoT-SORT
- SORT
- OpenCV
- Python
- WebRTC
- inference-sdk
- inference_models
활용 사례
- Human-Computer Interaction
- Accessibility and Assistive Technology
- Gaming and Virtual Reality
- User Experience and Usability Research
- Medical and Psychological Research
- Automotive and Aviation
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.