Voltar

Iris Tracker: IA e Robótica

Desenvolvimento de uma interface homem-máquina utilizando visão computacional para controlar hardware externo através do olhar.

Iris Tracker Project

Visão Geral do Projeto

Este projeto demonstra o poder da Inteligência Artificial aplicada à acessibilidade e robótica. Utilizando a biblioteca MediaPipe Iris, o sistema rastreia em tempo real a posição da íris do usuário através de uma webcam comum, sem a necessidade de sensores infravermelhos caros.

A lógica principal roda em Python, que processa os 468 marcos faciais detectados para isolar o movimento ocular. Ao detectar uma direção específica (Cima, Baixo, Esquerda ou Direita), o script envia um comando via porta Serial para um microcontrolador Arduino, que então aciona componentes físicos.

Aplicações Educativas

Além de ensinar conceitos de visão computacional e trigonometria para normalização das coordenadas dos olhos, o projeto abre portas para discussões sobre tecnologias assistivas. No laboratório Ciência Maker, os alunos podem adaptar este sistema para controlar cadeiras de rodas motorizadas, próteses ou interfaces de computadores apenas com o olhar.

Especificações Técnicas

  • Linguagem: Python 3.x
  • IA: Google MediaPipe
  • Hardware: Arduino Uno / Nano
  • Funcionalidade: Rastreamento Ocular
  • Protocolo: Serial (UART)

Lógica de Rastreamento (Python)

Python
import cv2
import mediapipe as mp
import serial

# Inicialização do MediaPipe Iris
mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(refine_landmarks=True)

def main():
    cap = cv2.VideoCapture(0)
    while cap.is_open():
        success, frame = cap.read()
        rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        results = face_mesh.process(rgb_frame)
        
        if results.multi_face_landmarks:
            mesh = results.multi_face_landmarks[0]
            iris_center = mesh.landmark[468] # Centro da íris
            
            # Lógica de decisão baseada em coordenadas normalizadas...
            if iris_center.x < 0.45: send_cmd('L')
            elif iris_center.x > 0.55: send_cmd('R')
            
        cv2.imshow('Iris Tracker', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'): break

Controle de Atuadores (Arduino)

Arduino / C++
void loop() {
  if (Serial.available() > 0) {
    char command = Serial.read();
    
    digitalWrite(PIN_ALL, LOW); // Reseta LEDs
    
    switch (command) {
      case 'U': digitalWrite(PIN_UP, HIGH); break;
      case 'D': digitalWrite(PIN_DOWN, HIGH); break;
      case 'L': digitalWrite(PIN_LEFT, HIGH); break;
      case 'R': digitalWrite(PIN_RIGHT, HIGH); break;
    }
  }
}