Local blog for Spanish speaking developers in LATAM
El proyecto GameFace pone el juego al alcance de todos
miércoles, 7 de junio de 2023
Publicado por Avneet Singh, Gerente de Producto, y Sisi Jin, Diseñadora de UX en Google PI, y Lance Carr, Colaborador
En I/O 2023, Google lanzó Project Gameface, un 'mouse' para juegos de código abierto y manos libres que permite a las personas controlar el cursor de una computadora utilizando el movimiento de su cabeza y los gestos faciales. Las personas pueden levantar las cejas para hacer clic y arrastrar, o abrir la boca para mover el cursor, haciendo que los juegos sean más accesibles.
El proyecto fue inspirado por la historia de Lance Carr, un streamer de videojuegos cuadripléjico que vive con distrofia muscular, una enfermedad progresiva que debilita los músculos. Y colaboramos con Lance para dar vida al Project Gameface. La historia completa detrás del producto está disponible en el blog Google Keyword aquí.
Ha sido una experiencia extremadamente interesante pensar en cómo un cursor de mouse puede ser controlado de una manera tan novedosa. Realizamos muchos experimentos y descubrimos que el movimiento de la cabeza y las expresiones faciales pueden ser una forma única de programar el cursor del mouse. La nueva API de detección de marcas faciales de MediaPipe con opción de blendshape hizo esto posible, ya que permite a cualquier desarrollador aprovechar 478 marcas faciales tridimensionales y 52 puntuaciones de blendshape (coeficientes que representan la expresión facial) para inferir superficies faciales detalladas en tiempo real.
Construcción y detalles del producto
En este artículo, compartimos detalles técnicos de cómo construimos el Project Gameface y las diversas tecnologías de código abierto que utilizamos para crear el emocionante producto.
Uso del movimiento de la cabeza para mover el cursor del mouse
Caption:
Controlando el movimiento de la cabeza para mover los cursores del mouse y personalizando la velocidad del cursor para adaptarse a diferentes resoluciones de pantalla.
A través de este proyecto, exploramos el concepto de usar el movimiento de la cabeza para poder mover el cursor del mouse. Nos enfocamos en la frente y el iris como nuestras dos ubicaciones de referencia. Se conoce que tanto la frente como el iris son puntos de referencia estables. Sin embargo, Lance notó que el cursor no funcionaba bien al usar el punto de referencia del iris. La razón era que el iris puede moverse ligeramente cuando las personas parpadean, haciendo que el cursor se mueva involuntariamente. Por lo tanto, decidimos usar el punto de referencia de la frente como opción de seguimiento predeterminada.
Hay casos en los que las personas pueden encontrar dificultades al mover la cabeza en ciertas direcciones. Por ejemplo, Lance puede mover su cabeza más rápido hacia la derecha que hacia la izquierda. Para abordar este problema, introdujimos una solución amigable para el usuario: ajuste de velocidad del cursor separado para cada dirección. Esta característica permite a las personas personalizar el movimiento del cursor de acuerdo con sus preferencias, facilitando una navegación más suave y cómoda.
Queríamos que la experiencia fuera tan fluida como un controlador de mano. La inestabilidad del cursor del mouse es uno de los principales problemas que queríamos superar. La aparición de inestabilidad del cursor está influenciada por varios factores, incluida la configuración del usuario, la cámara, el ruido y las condiciones de iluminación. Implementamos una función de suavizado de cursor ajustable para permitir a los usuarios la comodidad de ajustar fácilmente esta característica para adaptarse mejor a su configuración específica.
Uso de expresiones faciales para realizar acciones de mouse y presionar teclas del teclado
Desde muy temprano, una de nuestras principales percepciones fue que las personas tienen diferentes niveles de comodidad al hacer diferentes expresiones faciales. Un gesto que le resulta fácil a un usuario puede ser extremadamente difícil de hacer deliberadamente para otro. Por ejemplo, Lance puede mover sus cejas de forma independiente con facilidad, mientras que el resto del equipo luchó por igualar la habilidad de Lance. Por lo tanto, decidimos crear una funcionalidad para que las personas personalicen las expresiones que utilizan para controlar el mouse.
Caption: Uso de expresiones faciales para controlar el mouse
Piénselo como una asignación personalizada de un gesto a una acción de mouse. Al deliberar sobre qué acciones de mouse debería cubrir el producto, tratamos de capturar escenarios comunes como hacer clic izquierdo y derecho hasta desplazarse hacia arriba y hacia abajo. Sin embargo, usar la cabeza para controlar el movimiento del cursor del mouse es una experiencia diferente a la forma convencional. Queríamos dar a los usuarios la opción de restablecer el cursor del mouse al centro de la pantalla utilizando también un gesto facial.
Caption
: Uso de expresiones faciales para controlar el teclado
La versión más reciente de la detección de puntos de referencia faciales de MediaPipe trae una adición emocionante: salida de blendshapes. Con esta mejora, la API genera 52 valores de blendshapes faciales que representan la expresividad de 52 gestos faciales como levantar la ceja izquierda o abrir la boca. Estos valores se pueden mapear de manera efectiva para controlar una amplia gama de funciones, ofreciendo a los usuarios amplias posibilidades de personalización y manipulación.
Hemos podido extender la misma funcionalidad y agregar la opción para también enlazar el teclado. Esto ayuda a usar sus gestos faciales para también presionar algunas teclas del teclado de manera similar.
Establecer el tamaño del gesto para ver cuándo desencadenar una acción de mouse / teclado
Caption:
Establecer el tamaño del gesto para desencadenar una acción
Mientras probábamos el software, descubrimos que las expresiones faciales eran más o menos pronunciadas por cada uno de nosotros, por lo que incorporamos la idea de un tamaño de gesto, que permite a las personas controlar hasta qué punto necesitan gesticular para desencadenar una acción de mouse. Los coeficientes de blendshapes fueron útiles aquí y ahora diferentes usuarios pueden establecer diferentes umbrales en cada expresión específica y esto les ayuda a personalizar la experiencia a su comodidad.
Manteniendo la alimentación de la cámara disponible
Otra percepción clave que recibimos de Lance fue que los jugadores a menudo tienen múltiples cámaras. Para que nuestros modelos de aprendizaje automático funcionen de manera óptima, es mejor tener una cámara apuntando directamente a la cara del usuario con una iluminación decente. Por lo tanto, hemos incorporado la capacidad para que el usuario seleccione la cámara correcta para ayudar a encuadrarlos y brindar el rendimiento más óptimo.
La interfaz de usuario de nuestro producto incorpora una alimentación de cámara en vivo, proporcionando a los usuarios visibilidad en tiempo real de sus movimientos de cabeza y gestos. Esta característica trae varias ventajas. En primer lugar, los usuarios pueden establecer umbrales de manera más efectiva al observar directamente sus propios movimientos. La representación visual permite decisiones informadas sobre valores de umbral apropiados. Además, la alimentación de la cámara en vivo mejora la comprensión de los usuarios de los diferentes gestos, ya que correlacionan visualmente sus movimientos con las acciones correspondientes en la aplicación. En general, la alimentación de la cámara mejora significativamente la experiencia del usuario, facilitando la configuración precisa de los umbrales y una comprensión más profunda de los gestos.
Empaquetado del producto
Nuestro próximo paso fue crear la capacidad para controlar el mouse y el teclado utilizando nuestra lógica definida por el usuario. Para habilitar el control del mouse y el teclado dentro de nuestra aplicación Python, utilizamos dos bibliotecas: PyAutoGUI para el control del mouse y PyDirectInput para el control del teclado. PyAutoGUI es elegida por sus sólidas capacidades de control del mouse, que nos permiten simular movimientos, clics y otras acciones del mouse. Por otro lado, aprovechamos PyDirectInput para el control del teclado, ya que ofrece una mayor compatibilidad con diversas aplicaciones, incluidos juegos y aquellos que dependen de DirectX.
Para el empaquetado de nuestra aplicación, utilizamos PyInstaller para convertir nuestra aplicación basada en Python en un ejecutable, lo que facilita a los usuarios ejecutar nuestro software sin necesidad de instalar Python ni dependencias adicionales. PyInstaller proporciona un medio confiable y eficiente para distribuir nuestra aplicación, garantizando una experiencia de usuario fluida.
El producto introduce un factor de forma novedoso para involucrar a los usuarios en una función importante como el manejo del cursor del mouse. Hacer que el producto y su interfaz de usuario sean intuitivos y fáciles de seguir fue una prioridad para nuestro equipo de diseño e ingeniería. Trabajamos en estrecha colaboración con Lance para incorporar sus comentarios en nuestras consideraciones de UX, y descubrimos que CustomtKinter podía manejar la mayoría de nuestras consideraciones de UI en Python.
Estamos emocionados de ver el potencial de Project GameFace y no podemos esperar a que los desarrolladores y las empresas lo aprovechen para construir nuevas experiencias. El código para GameFace es de código abierto en Github aquí.
Agradecimientos
Nos gustaría reconocer las valiosas contribuciones de las siguientes personas a este proyecto: Lance Carr, David Hewlett, Laurence Moroney, Khanh LeViet, Glenn Cameron, Edwina Priest, Joe Fry, Feihong Chen, Boon Panichprecha, Dome Seelapun, Kim Nomrak, Pear Jaionnom, Lloyd Hightower
Labels
.app
.dev
.txt
#AMP
#CPU
#DeveloperStudentClubs
#DevFest
#DragonBall
#DSC
#Forsety
#ForsetySecurity
#freeandopen
#GCP
#Google
#GoogleCloud
#GoogleCloudPlatform
#GoogleLaunchpad
#iio2009
#Kubernetes
#MaterialDesign
#OneCommunity
#Security
#TensorFlow
#UPGlobal
#UpLatam
#WithGoogle
+page
10 YEARS
2013
2019
64 bits
A/B Testing
AA
Accelerator
Action on Goolge
actionbar
Actions
Actions Console
AdMob
Ads
adwords
adwords api
AI
AIY
ajax
alarmmanager
ALFA
almacenamiento
alojamiento de proyectos en google code
AMP
AMP Conf
AMP Project
amp-date-picker
amphtml
Analytics
Andorid
android
Android (operating System)
Android 3.1
android 3.3
android 4.2
android 9
Android 9 Pie
Android App Bundle
android design
Android Dev Summit
Android Developers
android Jetpack
Android P
Android SDK
Android Studio
Android Things
Android Wear
AndroidDevStory
androititlan
angelina jolie
Annotation
Announcements
anuncios
API
API Analytics YouTube
Apigee
APIs
Aplicaciones
aplicaciones chrome
app
app engine
App Indexing
app invites
App Server
applications
AppQuality
apps
Apps Script
AR
ARCore
arte
ATLAS
AWP
backend
Base64
batch
Bava
Betatesting
Better Ads Standars
bigdata
BigQuery
Biometrics
blink
bootcamp
BOT
BQ
Business
búsqueda ajax
by Google
byCases
byCommunity
byDevelopers
byGoogle
C++
CALENDAR
Cardboard
case
caso de éxito
Casos de éxito
casos destacados
CCOSS
Century Fox
chat
chrome
chrome web store
chromebook
chromecast
chromium
Cinéfilos
cloud
Cloud Anchors
CLOUD endpoints
Cloud Firestore
Cloud Functions
Cloud IoT Core
Cloud Next
Cloud Scheduler
Cloud services
cloud test lab
Cloud Text-to-Speech
Cloud Translation
CMD en vivo
coconut
code
code-in
code.org
CodeLabs
código
código abierto
Colab
colombia
Communities
Comunidades
concurso google
conference
contenedores
convocatoria
Coordinate
crashlytics
CRE
crear aplicaciones ajax
creatividad
Crowdsource
CSS
cws
daniela robles
dart
dart sdk
dartium
dartlang
Dataset
DCL
denis labelle
desarrolladores
Desarrolladores Google
desarrolladores LatAm
Desarrollar
Design
Design Sprint
Destacados
dev
Dev.f
DevArt
DevBus
DevBusLatAm
Developer Bus
Developer Summit
DeveloperConsole
developers
DevFest
devoxx
dialogflow
diseño UX
Distribuir
DNS
DOM
domain
DonkeyCar
doubleclick
Drive SDK
Drivers
ecommerce
ecosistema
elections
elizalde
Emoticons
emprendedores
empresas
engagement
english
Enhanced Campaigns
enterprise
eventos
Events
evolución de aplicaciones
Excel
ExpertosDicen
Faas
Family
FanBridge
FCM
FCP
Featured
fido
find people
Fintech
firebase
Firebase Cloud Messaging
firebase summit
flu trends
Flutter
Flutter 1.0
flutter 1.7
flutter developers
Flutter Live
FlutterLive
FoundersLab
Freebase
Fuction
Fuctions
Full-Stack
functional programming
G Suite Dev Show
G+
g+ goto gal
G+GotoGal
GAE
game
games
GCloud
gcm
GCP
GCS
GDA
GDE
GDG
GDH
GDL
GDLevent
GDS
Get Inspired
get.app
GitHub
GLP
gmail
golang
GOMO
Google
Google Accelerator
Google AdMob SDK
Google AdWords
Google Analytics
Google APIS
Google App Engine
Google Apps
Google Apps Script
Google Art Project
Google Assistant
google calendar
google cast
Google Charts
Google Chrome
Google Cloud
Google Cloud Console
Google Cloud Messaging
Google Cloud Next
Google Cloud Platform
Google Cloud Platform Newsletter
google cloud platforn
Google Cloud Storage
google code-in
Google Compute Engine
Google Dataset
Google Developer Groups
google developers
Google Developers Academy
google developers expert
Google Developers Hackademy
google dns
Google Drawings
Google Drive
Google Earth
Google for games
Google Forms
google geo
Google Home
google i/o
google i/o extended
google io
Google Keep
Google Kubernetes Engine
Google Launchapad
Google Launchpad
Google Maps
google maps coordinate
Google Maps Platform
Google Mexico
Google Nose
google now
Google Person Finder
google places api
Google Play
Google Play Books
Google Play Developer API
google play games
Google Play Movies
Google Play Protect
Google Play Services
Google Plus
Google Science Fair
google search
Google Sheets
google sign in
Google Top Geek
Google+
Google+ Communities
Google+ Hangouts
google+ sign-in
GoogleAPI
googlecloud storage
GoogleCloudPlatform
googledevs
GooglePlay
Googleplex
Goolge Lunchpad
GTG
Hackademy
hackers
Haiko
Haití
hangouts
Hangouts Remote Desktop
hardcode
Heello
honeycomb
HTML
HTML5
HTTPS
I/O
IA
IAM
IETF
IFAI
in app purchases
in-app
ingles
Ingress
instagram
integración de soluciones
interactive post
Interesante
International
International Women’s Day
IO
io15
io18
io19
iOS
IoT
istio
IU
IVR
J2EE
java
JavaScript
jelly bean
JS
JSON
Juegos
juegos html5
Kit ML
Knative
kotlin
kUBERNATES
Kubernetes
LATAM
latamRegionSur
Launchpad
Launchpad Studio
Lenovo Mirage Solo
lightbox
linux
lucero galindo
machine learning
Made with Code
Mapdata
Mapeo
maps
Maps Ad Unit
Maps API
Maps Engine
Market
Marketing
Marshmallow
MATERIAL DESIG
Material Design
mejores apps 2013
México
michelle marie
MIT
MIT Global Start-up Labs
MIT-AITI
ML
ML Kit
mobile
monetizar
mongoDB
MOOC
Motorola
Mountain View
móvil
MQTT
mr.white
mTLS
natalie villalobos
Navigation
NBA JAM
NES
Next Big Sound
Next Level
nfc
Niantic
Nik
NINTENDO
node.js
NoSQL
nube
OAuth2
Objective-C
OClock
open source
OPenApi
OS
OSS
Paas
PageSpeed
PagesSpeed
parallel18
patrones
patters
performance
permisos
Pipeline API
Pixability
pixel
Píxel
play
Play Console
Playtime
Podcast
pollito pio
Polymer
por lote
Posse
Prediction API
primer
Producto
programación
Propositos
Protocol Buffers
proyecto 20%
Push API
PYMES
python
Q
Q4
quickoffice
Rasberry Pi Zero WH
Raspberry Pi
Realtime
Reflectly
register
Release
Resources
robots.txt
Safe
SDK
Search
Security
seedbank
seguridad
SEO
servidores
Showyou
sign-in
SNES
SO
social media
Spain
SpLATAM
SQL
SQLite
Start
startup grind
Startup Launch
startup weekend
startup weekend for the planet
startupbus
startups
StayAtHome
story
Street View
subtitles
success
sw
SyScan
tablet
Tablet Optimization Tips
tabletas
takeaction
Tango
tendencias 2013
TensorFlow Developer Summit
testing
TextView
TF JAM
The Garage
The Venture City
tips G+
tips gmail
TLD
TLS
Top Experts
Top Geek
top level domain
TopExpert
topics
traducciones
Transparency Report
triggers
Tubular Labs
twilio
Tyka
TypeScript
UAC
udacity
ui
Umbrales
UNAM
unity
Unity3D
universal search
UX
Vector
VectorDrawable
video juegos
vidIQ
ViewPager
Visual Progress
Voicekit
VPC
VR
VSCode
web
Web hosting
Web móvil
WebAssembly
with google
Wizdeo
WizTracker
Women at Google
Women Techmakers
workmanager
WTM
XKCD
XML
Yifat Cohen
youtube
YouTube Analytics API
YouTube API
YouTube Data API
YouTube One Channel
YouTube Player API
Archive
2024
sept
2023
nov
oct
sept
ago
jun
may
abr
mar
ene
2022
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2021
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
2020
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2019
dic
nov
oct
sept
ago
jun
may
abr
mar
feb
ene
2018
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
2017
nov
sept
ago
jul
jun
may
abr
ene
2016
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2015
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2014
dic
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2013
dic
nov
oct
ago
jul
jun
may
abr
mar
feb
ene
2012
dic
nov
oct
sept
ago
jul
2011
nov
oct
may
mar
2010
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2009
dic
nov
sept
ago
jul
jun
may
abr
mar
feb
ene
2008
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2007
dic
Feed
Desarrolladores
Eventos y Comunidad
Casos Destacados
Dicen los Expertos
Google Accelerator