📸 Captura y coincidencia
- Captura de foto de ID y selfie en vivo con la cámara.
- Coincidencia de rostro entre la foto de ID y la selfie.
- Decisión de mayoría de edad (18/21/personalizada) con mensajes claros.
Verificación de ID y rostro
Legal Age es una app móvil moderna y lista para agencias que permite verificar mayoría de edad y confirmar identidad comparando una foto de documento de identidad con una selfie en vivo. Soporta dos proveedores en la nube (AWS + Azure) con failover automático, manteniendo los secretos del lado servidor para mayor seguridad y cumplimiento.
Todo lo necesario para verificación de edad e ID en una sola app Flutter.
CompareFaces y DetectFaces.verify y detect?returnFaceAttributes=age.Separación limpia entre app Flutter, servicios proxy y proveedores cloud.
main.dart — entrada de la app, manejo global de errores, theming.id_scanner_app.dart — shell con navegador privado.id_scanner_home_page.dart — inicio con acciones rápidas.main_screen.dart — resumen guiado y acceso a verificación.face_verification_screen.dart — captura, verificación y resultados.settings_screen.dart — proveedor, umbrales y overrides en runtime.Flujo de datos
Cámara (ID y selfie) → App Flutter → Tu API Proxy (AWS o Azure). Si falla el
primario, el orquestador cae al secundario y devuelve resultados normalizados:
{ matched, confidence, estimatedAge, ageConfidence, provider }.
dependencies:
flutter:
sdk: flutter
http: ^1.2.2
image_picker: ^1.1.2
google_fonts: ^6.2.1
shared_preferences: ^2.3.2
Builds agnósticos de entorno usando --dart-define y overrides en la app.
| Dart Define | Ejemplo | Propósito |
|---|---|---|
AWS_API_BASE |
https://abc.execute-api.us-east-1.amazonaws.com/prod |
Base URL de API Gateway para Lambdas en AWS. |
AZURE_FN_BASE |
https://your-fn.azurewebsites.net |
Base URL del Function App en Azure. |
AZURE_FN_CODE |
… (opcional) |
Function key si tu nivel de auth lo requiere. |
AUTH_BEARER |
eyJhbGciOiJI... |
JWT/ID token para tus gateways (opcional). |
PRIMARY_PROVIDER |
aws o azure |
Proveedor preferido por defecto. |
Todos estos valores se pueden sobrescribir en la pantalla de Ajustes y se persisten con
SharedPreferences.
Info.plist<key>NSCameraUsageDescription</key>
<string>Camera is used to capture ID photos and selfies for verification.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Photo library access is used to pick images for verification.</string>
Patrones listos para AWS y Azure para tu equipo de infraestructura.
Política IAM del rol de Lambda:
{
"Version": "2012-10-17",
"Statement": [
{"Effect":"Allow","Action":["rekognition:CompareFaces","rekognition:DetectFaces"],"Resource":"*"},
{"Effect":"Allow","Action":["s3:GetObject"],"Resource":"*"}
]
}
POST /compare, POST /detect.idImage, selfieImage o image.Pruebas de ejemplo:
curl -X POST "$AWS_API_BASE/compare" \
-F idImage=@id.jpg -F selfieImage=@selfie.jpg
curl -X POST "$AWS_API_BASE/detect" \
-F image=@selfie.jpg
flutter pub get
flutter run \
--dart-define=AWS_API_BASE=https://abc.execute-api.us-east-1.amazonaws.com/prod \
--dart-define=AZURE_FN_BASE=https://your-fn.azurewebsites.net \
--dart-define=PRIMARY_PROVIDER=aws
flutter build apk --release \
--dart-define=AWS_API_BASE=... \
--dart-define=AZURE_FN_BASE=... \
--dart-define=PRIMARY_PROVIDER=aws
# o:
# flutter build appbundle --release ...
flutter build ios --release \
--dart-define=AWS_API_BASE=... \
--dart-define=AZURE_FN_BASE=... \
--dart-define=PRIMARY_PROVIDER=azure
# Luego archivar/firmar en Xcode como de costumbre
matched=true, alta confianza.matched=false, estimatedAge=null.--dart-define o en Ajustes.AZURE_FN_CODE o la configuración JWT.Cuéntanos sobre tu organización, requisitos de cumplimiento y cómo planeas usar Legal Age. Te enviaremos un dossier técnico detallado y próximos pasos.