faceGO
Reloj checador con reconocimiento facial. Nadie ficha por nadie, y los rostros nunca salen del teléfono. Sin nube, sin lector caro, sin mensualidad.
Qué incluye
Un checador facial que corre en el teléfono que ya tienes. Con su código.
La reforma de 40 horas obliga a llevar registro electrónico de jornada. El
mercado responde con relojes biométricos de pared y con nubes que cobran por
empleado y por mes.
face_go hace lo mismo en un teléfono Android usado: reconoce la cara, guarda
la checada firmada y sincroniza después. Sin comprar hardware y sin renta.
Es un producto en su versión 1.5.0, y el zip trae el fuente completo. No es
una demo. Tampoco es easyRest: es más joven, y en esta página se dice cuánto.
PARA QUIÉN ES
Si programas y vendes software
Tu cliente tiene 40 empleados y una obligación nueva que cumplir. Puedes
cotizarle dos meses de desarrollo… o abrir esto el viernes.
Te llevas 12.130 líneas de Dart que no tienes que escribir, y con ellas las
partes que de verdad duelen: la alineación por ojos antes del embedding, el
clustering de caras desconocidas, la cadena de hashes que sobrevive a las
correcciones, y el pipeline de cámara en Android — que es donde se pierde una
semana entera si no lo has hecho antes.
Todo el código y toda la documentación están en español.
Si tienes una empresa con personal
Un teléfono viejo montado en la pared de la entrada. Nada más. Tu gente se para
enfrente y checa; el que no sea reconocido teclea su número y su PIN, y nadie
se queda sin poder checar.
Pago único. Los datos biométricos no salen del teléfono.
PARA QUIÉN NO ES
Dicho aquí arriba para que no pierdas el tiempo:
- Si necesitas que el modelo facial venga incluido y listo. No viene: hay que
conseguirlo aparte. Es lo primero de la sección "lo que no hace". - Si necesitas servidor central y multi-sucursal funcionando hoy.
- Si trabajas solo con iPhone.
- Si buscas nómina, incidencias, vacaciones o expediente STPS.
- Si esperas un producto con años de rodaje. Este tiene semanas.
LAS TRES REGLAS
face_go no se diseñó por lista de funciones. Se diseñó sobre tres reglas, y esas
reglas explican cada decisión del código:
1 · La app nunca bloquea un registro.
Si no reconoce a alguien, lo registra igual y lo marca como pendiente. La
persona ya checó; ponerle nombre es trabajo del administrador, después y sin
prisa. Un checador que impide checar es un checador que se desinstala.
2 · La cadena de hashes no se reescribe nunca.
Cada registro guarda un retrato inmutable de cómo ocurrió el evento, y la cadena
se calcula sobre eso. Cuando después se corrige —y se corrige a diario, porque
así funciona el enrolamiento diferido—, la corrección se anota aparte, con
motivo y hora. El inspector ve qué pasó y qué se corrigió: eso es mejor
evidencia que un registro que finge no haber sido nunca ambiguo.
3 · Ninguna compuerta rechaza en silencio.
Cuando un frame se descarta, la pantalla dice por qué —"acércate un poco",
"mira de frente", "abre los ojos"— y el panel de estado lleva la cuenta de qué
compuerta descarta más. Calibrar deja de ser adivinar.
El peor fallo de un sistema biométrico no es el que no reconoce a nadie. Es el
que reconoce a la persona equivocada y nadie lo cuestiona hasta que hay una
demanda laboral de por medio.
QUÉ HACE
En la entrada
- Kiosco a pantalla completa, sin botones en el flujo normal: te paras enfrente
y checa. - Acumula 5 frames del mismo rostro antes de decidir, y promedia. Cuesta un
segundo y es la diferencia entre un sistema errático y uno confiable. - Prueba de vida con retos aleatorios (parpadea, gira la cabeza), desactivable.
- Entrada o salida se infiere: no se le pregunta a nadie.
- Anti doble-checada configurable, para el error más común de todos los
checadores. - Checar con PIN siempre a la vista, para quien no tiene rostro enrolado, no
dio consentimiento biométrico o simplemente no está siendo reconocido hoy.
Los dos caminos para poblar el sistema
- Alta asistida: datos, PIN, consentimiento firmado en pantalla y 5 tomas
guiadas. Menos de un minuto por persona. - Enrolamiento diferido: instalas con cero personas dadas de alta y dejas
que todos chequen. Cada cara desconocida forma un grupo por sí sola. Días
después le pones nombre a los grupos con dos toques, y todo el histórico se
reasigna hacia atrás.
El enrolamiento diferido es el argumento de venta, no una función más.
Convierte un ritual coordinado de 40 minutos con toda la plantilla parada en
media hora de trabajo asíncrono del administrador.
Para el administrador
- Pendientes de identificar: galería de caras sin nombre, resueltas con dos
toques. - Reportes por día y por rango, con la evidencia fotográfica de cada checada.
- Verificación de la cadena de integridad con un botón: dice si algún
registro fue alterado y cuál es el primero que no cuadra. - Alta y baja de empleados, con reactivación si la baja fue un error.
- Ajustes de umbrales y de cada compuerta de captura, con deslizantes y sin
recompilar. - Prueba de reconocimiento: enseña el recorte exacto que recibe el modelo y
el parecido contra cada empleado en vivo, sin registrar nada.
Debajo, donde no se ve
- Aprendizaje progresivo: cuando alguien se identifica con PIN tras no ser
reconocido, el sistema aprende de ese error concreto. - Margen entre el mejor y el segundo mejor empleado —no el segundo mejor
template—, que es lo que protege del caso "dos hermanos en la misma empresa". - Corrección de reloj contra el servidor, con la confiabilidad de la hora
marcada en cada registro. - Ubicación y detección de GPS falso: se anota, nunca bloquea.
QUÉ TE LLEVAS EN EL ZIP
| | |
|---|---|
| La aplicación | 48 archivos Dart · 11.147 líneas |
| Las pruebas | 7 archivos · 983 líneas · 42 pruebas automatizadas |
| Las pantallas | 10 pantallas completas |
| Los servicios | 12 servicios de dominio · 2.035 líneas |
| La base de datos | esquema SQLite de 7 tablas |
| La documentación | README técnico en español |
12.130 líneas de Dart en total. Ponle tú el número de semanas que te tomaría
escribirlas — y súmale las que se van en hacer funcionar la cámara de Android
con ML Kit, que no se ven en el conteo.
TRES COSAS QUE NO ESPERAS ENCONTRAR
1 · Un banco de pruebas del reconocimiento dentro de la propia app.
Panel → Prueba de reconocimiento. Enseña el recorte de 112×112 que recibe el
modelo y el porcentaje de parecido contra cada persona enrolada, en vivo. Si
la cara sale torcida o descentrada, el problema no es el umbral y lo ves en dos
segundos. Ninguna app de este tipo te deja mirar ahí dentro.
2 · El kiosco te dice por qué está tardando.
El panel de estado lleva la cuenta de qué compuerta descarta más frames y
cuántos milisegundos cuesta cada uno. "Tarda mucho en reconocerme" deja de ser
una queja y pasa a ser un número con nombre.
3 · Las compuertas se calibran con deslizantes, no recompilando.
Giro, inclinación, ladeo, ojos, tamaño mínimo y nitidez. Cada deslizante dice
con qué mensaje rechaza, para cruzarlo con el diagnóstico. Se guardan en la base
y sobreviven al reinicio.
LO QUE NO HACE
Ésta es la sección que las otras fichas no tienen. Léela entera: si algo de aquí
es imprescindible para ti, no compres.
- El modelo facial no viene incluido. Hay que conseguir un MobileFaceNet
.tflite(entrada 112×112, salida de 128, 192 o 512 dimensiones) y colocarlo
enassets/models/o copiarlo al teléfono. No se incluye porque no puedo
redistribuir un modelo cuya licencia no controlo, y prefiero decírtelo aquí
que dejar que lo descubras después de pagar. Sin él la app arranca igual, en
modo PIN, que ya cumple el requisito de registro electrónico. - Solo se ha probado en Android. El código de iOS está escrito y las
dependencias lo soportan, pero no se ha ejecutado en un iPhone. Si lo
necesitas en iOS, cuenta con trabajo de integración. - No hay servidor. El cliente de sincronización está hecho, con su cola y su
reintento, y el contrato JSON está definido en el código. El endpoint que
recibe no existe: lo escribes tú. Hasta entonces, cada teléfono es una isla. - Los umbrales no están calibrados con muestra real. Los valores que trae son
un punto de partida. La calibración de verdad es 30 personas y 300 checadas en
el lugar real; el procedimiento está documentado, pero hacerlo te toca a ti. - Si se pierde el teléfono, se pierden los templates. No hay respaldo de
biometría al servidor todavía. Es el punto donde un cliente decide si te odia
o te ama, y hoy está sin resolver. - No es multi-sucursal. Un teléfono, un centro de trabajo.
- No hace nómina, ni incidencias, ni vacaciones, ni expediente STPS.
- No exporta a PDF ni a Excel. Los reportes se ven en pantalla.
- No hay historial de versiones etiquetadas que enseñarte. El proyecto no
está bajo control de versiones público. Lo que hay es el código de hoy. - El reconocimiento tarda entre uno y tres segundos en un teléfono de gama
media-baja. No es instantáneo como el desbloqueo facial de tu móvil, que corre
sobre silicio dedicado.
REQUISITOS
- Android 7.0 (API 24) o superior. Probado en un Redmi 9 — MediaTek Helio
G80, gama baja de 2020. - Cámara frontal. Cualquiera sirve; el pipeline trabaja a 720×480.
- Un modelo
mobilefacenet.tfliteque consigas por tu cuenta. - Para tocar el código: Flutter 3.35 o superior y cualquier editor.
Sobre la velocidad, porque es donde se ajustan las expectativas. En ese
Redmi 9, procesar un frame cuesta entre 340 y 380 milisegundos, y una
checada necesita cinco frames buenos. En un teléfono decente baja bastante. La
app trae el cronómetro incorporado para que lo midas en el tuyo antes de
prometerle nada a un cliente.
Sobre la precisión. En pruebas del autor con un rostro enrolado, el parecido
contra sus propias capturas queda entre 90 % y 96 %, con el umbral de
aceptación en 62 %. Es una muestra de una persona en condiciones controladas:
sirve para saber que la cadena funciona, no como estadística de campo.
Los datos viven en una base SQLite dentro del teléfono. Los vectores
faciales se guardan como números, no como fotos: del enrolamiento no se
almacena ninguna imagen.
POR QUÉ CUESTA LO QUE CUESTA
Un checador biométrico de pared cuesta entre 3.000 y 8.000 pesos por punto, más
el software. Las nubes de asistencia cobran por empleado y por mes, para
siempre.
Esto es pago único, con el código, y corre en un teléfono que en muchas
oficinas está en un cajón.
[PRECIO — completar antes de publicar.] La ficha de easyRest justifica sus
37 dólares contra el coste mensual de un TPV en la nube. Aquí el argumento
equivalente es el coste por punto de checada. El número lo pones tú; lo que
esta página no va a hacer es inventarlo.
NO HAY TESTIMONIOS, Y NO VOY A INVENTARLOS
face_go se publica ahora. No tengo clientes que enseñarte y no pienso fabricar
reseñas.
Y voy más lejos, porque este producto es más joven que easyRest y sería fácil
disimularlo: lo único que puedo enseñarte es el código, las 42 pruebas
automatizadas y esta lista de limitaciones. No hay diez versiones etiquetadas
detrás ni cuarenta mil palabras de documentación. Hay un sistema que funciona,
recién terminado, con sus costuras a la vista.
Un testimonio se escribe en un minuto. Doce mil líneas y un pipeline de visión
que de verdad reconoce caras, no.
CÓMO SE ENTREGA, Y QUÉ LICENCIA LLEVA
Un zip con el código fuente completo de la aplicación Flutter, el proyecto
Android, las pruebas y la documentación. Versión 1.5.0. Acceso de por vida a las
actualizaciones que se publiquen.
Lo que la licencia te deja hacer
- Instalarlo en todos los centros de trabajo de clientes que quieras. Sin
límite de instalaciones, sin pagar más y sin porcentaje. - Ponerle tu marca: nombre, logotipo, colores e icono, y venderlo como
producto tuyo. - Modificar el código todo lo que necesites.
Lo que no
- Redistribuir el código fuente: ni publicarlo, ni revenderlo, ni incluirlo
en otro producto que se venda como código. A tus clientes les entregas la app
funcionando, no el fuente. - Ceder o revender la licencia.
El texto completo va dentro del zip como LICENCIA.md, en español llano.
Las licencias de terceros están revisadas una por una y listadas. Casi todo
es MIT, BSD o Apache 2.0, pero ML Kit no: el detector de rostros de Google
se rige por los términos de servicio de Google, no por una licencia de código
abierto, y eso impone condiciones sobre lo que entregas. Va explicado en la
licencia.
Y el modelo facial es tu responsabilidad legal, no la mía. No se incluye
ninguno. El .tflite que elijas trae su propia licencia, y comprobar que puedes
usarlo comercialmente te toca a ti. Es justo el detalle que después da
problemas y que nadie te dice antes de cobrarte.
Una advertencia, porque este programa trata datos biométricos. Un rostro es
un dato personal sensible. En México lo regula la LFPDPPP: hace falta aviso de
privacidad y consentimiento expreso, y por eso la app trae la firma de
consentimiento incorporada. Pero cumplir la ley es del patrón que usa el
sistema y de quien se lo instala, nunca del autor. Se entrega tal como está,
sin garantía, y la responsabilidad máxima es el importe que pagaste.