go-idvalidator es una librería escrita 100% en Go que permite analizar imágenes de documentos de identidad (DNI) y videos de rostros para validar la identidad de una persona. Diseñada como base para un sistema más robusto, esta librería busca ofrecer un primer nivel de coincidencia entre el documento físico y el rostro mediante procesamiento de imágenes.
Crear un wrapper/librería en Go que reciba como entrada:
- 2 imágenes del DNI (
frontalyposterior) - 1 video corto (o secuencia de imágenes) del rostro actual
Y entregue como salida:
{
"match_percentage": 92.5,
"valid": true,
"reason": "Coincidencia facial aceptable"
}Go 1.21+
- go-face para análisis facial (bindings de Dlib)
- ffmpeg para extracción de frames desde el video
- Go image libraries para procesamiento
identity-validator/
├── go.mod
├── go.sum
├── README.md
├── cmd/
│ ├── demo/
│ │ └── main.go # Ejecutable para realizar pruebas
│ └── main.go # Ejecutable para el CLI
├── pkg/
│ ├── validator/
│ │ ├── analize.go # Punto de entrada del análisis
│ │ └── types.go # Definición de tipos Input/Result
├── internal/
│ ├── validation/
│ │ └── validation.go # funcioenes base para el analisis
│ └── face/
│ │ ├── recognizer.go # Comparacion de imagenes
│ │ └── models/ # Modelos descargados pre entrenados para el analisis
│ └── utils/
│ │ └── convertor.go # Funciones para transformar png to jpg/jpeg
│ └── encryption/
│ │ └── encrypt.go # Funciones para encriptar / desencriptar
│ └── config/
│ └── config.go # Funciones para cargar secrets
└── testdata/
├── sample_front_dni.jpg
├── sample_back_dni.jpg
└── sample_video_face.mp4Requisitos previos
- Instalar ffmpeg:
brew install ffmpeg jpeg libpng libtiff- Dlib instalado (v19.10 o superior)
brew install dlib boost
# Modelos preentrenados de Dlib
wget http://dlib.net/files/shape_predictor_5_face_landmarks.dat.bz2
wget http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2
bunzip2 *.bz2- Instalar librerías necesarias para go-face:
# Requiere CMake, Dlib y pkg-config
brew install cmake pkg-configDesde código Go
input := validator.Input{
FrontDNIPath: "testdata/dni_front.jpg",
BackDNIPath: "testdata/dni_back.jpg",
VideoPath: "testdata/face_video.mp4",
}
encrypted, err := validator.Analyze(input)
if err != nil {
log.Fatal(err)
}
result, err := validator.DecryptAnalysis(encrypted)
if err != nil {
log.Fatalf("Error in decrypting: %v", err)
}
fmt.Printf("Resultado: %+v\n", result)Desde CLI
go run cmd/main.go \
--front testdata/dni_front_1.png \
--back testdata/dni_back.jpg \
--video testdata/face_video.mp4 \
--selfie testdata/selfie_0.png
{
"match_percentage": 94.3,
"confidence_level": "high",
"valid": true,
"dni_text": {
"name": "JUAN PEREZ",
"id_number": "12345678-9"
},
"reason": "Coincidencia facial aceptable"
}- OCR de cara frontal del DNI
- Matching facial con go-face
- Persistencia encriptada de resultados
- Extracción de frame facial del video
- Validación de estructura de DNI
Los datos procesados se consideran sensibles. En futuras versiones se incluirá:
- Encriptación AES de los resultados
- Firma digital de los resultados
- TTL de almacenamiento temporal
go-identity-validator is licensed under CC0.