paint-brush
Prueba de la aplicación de reconocimiento facial ICP: el resultado final te sorprenderápor@induction
338 lecturas
338 lecturas

Prueba de la aplicación de reconocimiento facial ICP: el resultado final te sorprenderá

por Vision NP9m2024/09/21
Read on Terminal Reader

Demasiado Largo; Para Leer

El Protocolo de Internet para Computadoras (ICP) está trabajando para descentralizar la IA al permitir que las aplicaciones se ejecuten en una infraestructura de nube completamente descentralizada. Este tipo de enfoque de descentralización garantiza que las operaciones de IA sean transparentes, resistentes a la censura y menos propensas a puntos únicos de falla. Verificaremos cómo funciona la descentralización de la IA de manera objetiva con demostraciones sutiles de cada paso.
featured image - Prueba de la aplicación de reconocimiento facial ICP: el resultado final te sorprenderá
Vision NP HackerNoon profile picture
0-item
1-item

Los últimos años han sido especiales para los modelos de IA basados en servidores centralizados como ChatGPT, Gemini de Google, Copilot de Microsoft, etc. No hay duda de que estos modelos de IA han transformado muchos aspectos. Pero, por otro lado, tienen algunas desventajas. Probablemente, también hayas oído hablar de las varias interrupciones de ChatGPT .


Los modelos centralizados basados en servidores corren un gran riesgo de tener un único punto de fallo, pero ahora los tiempos han cambiado. La tecnología blockchain también está revolucionando muchos campos, incluida la inteligencia artificial (IA).


El Protocolo de Internet para Computadoras (ICP), desarrollado por Dfinity, está trabajando para descentralizar la IA al permitir que las aplicaciones de IA se ejecuten en una infraestructura de nube completamente descentralizada. Lo singular es que el ICP permite que los modelos y servicios de IA se implementen en una red de centros de datos independientes. Este tipo de enfoque de descentralización garantiza que las operaciones de IA sean transparentes, resistentes a la censura y menos propensas a puntos únicos de falla.


Este artículo contrasta con la prueba práctica de la aplicación descentralizada de reconocimiento facial que se basa en el ICP. Comprobaremos cómo funciona la descentralización de la IA de forma objetiva con demostraciones sutiles de cada paso. Hemos intentado desglosar conceptos técnicos complejos en tutoriales fáciles de entender, así que comencemos.


Todo el proceso de desarrollo y prueba del proyecto se llevó a cabo en una máquina basada en Windows, por lo que aquí estamos creando un subsistema Linux porque muchas herramientas y scripts de desarrollo de ICP están optimizados para entornos basados en Linux.


📥Prerrequisitos:

  • Sistema operativo : Windows con el subsistema Windows para Linux (WSL) instalado. Consulta esta guía para realizar la instalación.


  • Conocimiento :

    • Comprensión básica de JavaScript , React.js , Rust y WebAssembly .

    • Familiaridad con conceptos de desarrollo web.


  • Herramientas :

    • DFX SDK (marco de desarrollo ICP) .
    • Node.js y npm.
    • Rust: instala la cadena de herramientas Rust.
    • Git: lo necesitas para clonar el repositorio. Sigue sus instrucciones para instalarlo.
    • wasi2ic: una herramienta para convertir el módulo Wasm dependiente de WASI para que se ejecute en el ICP.
    • wasm-opt: El optimizador de WebAssembly.


📥Configurar el entorno de desarrollo:

  1. Abra su terminal WSL y ejecute el siguiente comando para instalar DFX:
 sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)"


👉Para confirmar la instalación:

 dfx –version


  1. Instale Rust ejecutando el siguiente comando:
 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env

👉Para verificar la instalación, ejecute:

 rustc –version


3. Instale Node.js ejecutando el siguiente comando:

 curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs


👉Para verificar la instalación, ejecute:

 node -v npm -v


  1. Instalar wasi2ic: Primero clonar su repositorio de GitHub.
 git clone https://github.com/wasm-forge/wasi2ic.git cd wasi2ic cargo install --path .


👉Para comprobar la instalación, ejecute:

 echo $PATH wasi2ic –help


  1. Instalar wasm-opt:
 cargo install wasm-opt


📥Clonar el proyecto:

Estamos usando el repositorio de GitHub del proyecto para realizar pruebas. Puedes consultar su repositorio aquí .


1. Clona el repositorio y navega hasta el proyecto de reconocimiento facial:

 git clone https://github.com/dfinity/examples.git cd examples/rust/face-recognition

Nota: Puede acceder a los archivos del subsistema Linux buscando \\wsl$ en el Explorador de archivos o mediante la función de búsqueda directa en el sistema operativo Windows.


📥Descargar modelos para reconocimiento facial


  1. Descargar el modelo de detección de rostros:

El modelo de detección de rostros se utilizará para detectar rostros en una imagen. Ejecutar:

 ./download-face-detection-model.sh


  1. Descargar el modelo de reconocimiento facial:

Debes exportar el modelo en formato ONNX con PyTorch y facenet-pytorch . Comienza instalando estas bibliotecas de Python:

 pip install torch facenet-pytorch onnx


Nota: Si Python aún no está instalado en su subsistema, intente instalar Python y pip desde aquí: https://packaging.python.org/en/latest/tutorials/installing-packages/ .


  1. Exportar el modelo ONNX:

En un archivo o shell de Python, ejecute lo siguiente: Escriba python3 en la terminal y luego ejecute el siguiente código. Después de la ejecución, escriba exit().

 import torch import facenet_pytorch resnet = facenet_pytorch.InceptionResnetV1(pretrained='vggface2').eval() input = torch.randn(1, 3, 160, 160) torch.onnx.export(resnet, input, "face-recognition.onnx", verbose=False, opset_version=11)


Esto generará el archivo face-recognition.onnx . Cópielo en la raíz de su repositorio.


📥Construir

Ahora es el momento de crear el proyecto. Ejecutar:

 dfx start --background dfx deploy


Si todo va correctamente, podrás ver la URL del frontend en la terminal.

Figura 1. Mensaje de implementación exitosa en las terminales con las URL del frontend

Nota: Si enfrenta algún error debido a la falta del cliente, intente instalar webpack y webpack-cli globalmente usando npm:

sudo npm install -g webpack webpack-cli


Y, dependencias locales:

npm install


📥Crea el contenedor, ejecuta:

 dfx canister create backend


Puedes ver el siguiente mensaje en la terminal.

Figura 2. Mensaje exhibido en la terminal con una indicación de creación exitosa del contenedor

👉Ahora puedes verificar el estado del backend del contenedor:

 dfx canister status backend


Puedes ver algo como esto en la terminal.

Figura 3. Estado del contenedor en el backend

📥Carga de fragmentos de modelos

Dado que los modelos de IA suelen ser grandes, no se pueden incorporar directamente en el binario WebAssembly (Wasm) de un contrato inteligente. En cambio, estos modelos deben cargarse por separado. Para manejar esto, DecideAI desarrolló una herramienta para cargar modelos de forma incremental. Puede encontrar la herramienta aquí: ic-file-uploader .


👉Para instalar la herramienta, utilice el siguiente comando:

 cargo install ic-file-uploader


Una vez instalado, puede utilizar el script upload-models-to-canister.sh ejecutando ./upload-models-to-canister.sh en la terminal para cargar los modelos. Este script realiza los siguientes pasos:


  1. Borra los modelos de IA existentes del contenedor:
 dfx canister call backend clear_face_detection_model_bytes dfx canister call backend clear_face_recognition_model_bytes


  1. Carga los nuevos modelos de forma incremental:
 ic-file-uploader backend append_face_detection_model_bytes version-RFB-320.onnx ic-file-uploader backend append_face_recognition_model_bytes face-recognition.onnx


  1. Finalmente, el script configura los modelos cargados:
 dfx canister call backend setup_models


Ahora, puedes interactuar con el Frontend usando la URL que recibiste en la terminal mientras ejecutabas el comando dfx deploy (Figura 1)


Figura 4. Interfaz de usuario de la dApp con la foto cargada de Nikola Tesla. Aparece un cuadro de diálogo para agregar el nombre después de hacer clic en el botón "Agregar persona".


Una vez que cargue una imagen haciendo clic en el logotipo de ICP, intente agregar el nombre de una persona haciendo clic en el botón " Agregar persona " para entrenar el modelo.

Detecta el rostro con una marca rectangular automática en el rostro. Una vez que se establece el nombre, se muestra un mensaje de adición exitosa como el siguiente:

Figura 5. Mensaje que se muestra después de agregar el nombre

La IA recuerda el nombre que le asignaste a la cara para que puedas probar si detecta las caras de diferentes fotos de la misma persona o no. Aquí, se toman diferentes fotos de Nikola Tesla. Para cargar otra foto para la detección de rostros, recarga la página y luego haz clic en la opción " Reconocer ". Veamos; ha identificado con éxito el rostro de Nikola Tesla con una ligera diferencia con respecto al inicial.

Figura 6. La IA ha detectado con éxito el rostro de Nikola Tesla en otra foto con una diferencia de 0,68

Aquí, una foto de Nikola Tesla generada por IA se envía al modelo y, sorprendentemente, ha detectado con precisión el rostro, veámoslo aquí:

Figura 7. La cara de Nikola Tesla generada por IA ha sido detectada por dApp con solo 0,77 de diferencia

Se ha verificado con éxito que la aplicación de reconocimiento facial ICP funciona perfectamente, ya que ha detectado con éxito los rostros de Nikola Tesla. Puedes probarlo tú mismo.


Dado que se trata de una prueba, la interfaz de usuario y las funciones son limitadas. Puede agregar funciones y servicios adicionales si se apresura a crear la aplicación descentralizada lista para producción en ICP para fines de reconocimiento facial. Puede probar las siguientes funciones con ejemplos de código. Tenga en cuenta que debe agregar o personalizar códigos según sus requisitos.


📥Aquí te dejamos algunos consejos:

  1. Añadir autenticación de usuario con identidad de Internet

Si agrega esta función a esta dApp, solo los usuarios registrados podrán acceder a la dApp. A continuación, se muestra cómo agregar autenticación mediante Internet Identity. Puede integrar Internet Identity agregando el botón de inicio de sesión de Internet Identity en la página de inicio. Una vez que el usuario inicie sesión, muestre un panel personalizado.


Cómo agregar:

👉Instalar dependencias de Identidad de Internet:

 npm install @dfinity/agent @dfinity/auth-client


👉Agrega el siguiente código a tu frontend para habilitar la autenticación:

 import { AuthClient } from "@dfinity/auth-client"; async function init() { const authClient = await AuthClient.create(); if (await authClient.isAuthenticated()) { // Display dashboard or personalized content } else { authClient.login({ identityProvider: "https://identity.ic0.app/#authorize", onSuccess: () => { // Once authenticated, display personalized features }, }); } } init();


👉Después de iniciar sesión, el usuario puede ver su historial de caras reconocidas u otros datos personalizados.


  1. Carga de imágenes con la función de arrastrar y soltar

Haga que la función y la experiencia de carga de imágenes sean más fluidas al permitir a los usuarios arrastrar y soltar imágenes para la detección de rostros.


Cómo agregar :

👉Utilice la funcionalidad de arrastrar y soltar de HTML5:

 <div id="drop-area"> <p>Drag and drop an image here or click to select</p> <input type="file" id="file-input" hidden /> </div>


👉Agrega JavaScript para manejar la acción de arrastrar y soltar:

 const dropArea = document.getElementById("drop-area"); dropArea.addEventListener("dragover", (event) => { event.preventDefault(); }); dropArea.addEventListener("drop", (event) => { event.preventDefault(); const files = event.dataTransfer.files; // Process the uploaded image });


👉Asegúrese de que se integre sin problemas con su funcionalidad de detección de rostro existente.


  1. Barra de progreso para reconocimiento facial

Será una característica interesante mostrar una barra de progreso cuando se carga una imagen para informar a los usuarios que el sistema está procesando la imagen.


Cómo agregar:

👉Utilice una barra de progreso HTML simple:

 <div id="progress-bar"> <div id="progress-fill" style="width: 0%;"></div> </div>


👉Actualiza dinámicamente la barra de progreso a medida que se procesa la imagen:

 const progressFill = document.getElementById("progress-fill"); let progress = 0; const interval = setInterval(() => { progress += 10; progressFill.style.width = `${progress}%`; if (progress === 100) { clearInterval(interval); } }, 100); // Simulate progress every 100ms


  1. Notificaciones de resultados de reconocimiento facial

Puede agregar una función para proporcionar notificaciones en tiempo real una vez que se complete el reconocimiento facial, ya sea a través de una notificación modal o de brindis.


Cómo agregar :

👉Puedes usar una biblioteca liviana como Toastr o notificaciones personalizadas.

 <div id="notification" class="hidden">Face Recognition Complete!</div>


👉En tu JavaScript, muestra la notificación cuando el backend devuelva el resultado:

 function showNotification(message) { const notification = document.getElementById("notification"); notification.innerHTML = message; notification.classList.remove("hidden"); setTimeout(() => { notification.classList.add("hidden"); }, 3000); // Hide notification after 3 seconds } // Call this after face recognition is done showNotification("Face detected and recognized!");


📥Pasos finales: reconstrucción e implementación

Después de implementar estas nuevas características:


👉Reconstruir el proyecto:

 dfx build


👉Implementar en la red de prueba: es para probar primero antes de apresurarse a ir a la red principal.

 dfx deploy --network ic


Estos son algunos ejemplos e ideas para fines de demostración. Puede probarlos usted mismo y dejarnos saber su progreso en la sección de comentarios. Además, puede hacer más con ellos para descentralizar la IA en ICP.

Conclusión:

Hemos probado con éxito la aplicación descentralizada de reconocimiento facial en ICP, lo que supone un verdadero intento de descentralizar la IA (DeAI). Según nuestras pruebas, las respuestas de la aplicación descentralizada fueron rápidas y la detección de rostros fue precisa. La infraestructura única de ICP podría ayudarnos a realizar tareas complejas, como el reconocimiento facial, sin depender de sistemas centralizados.


No solo mejora la seguridad y la privacidad, sino que también muestra el potencial para que las aplicaciones de IA descentralizada (DeAI) evolucionen rápidamente. A medida que ICP continúa desarrollándose, la capacidad de implementar modelos grandes y realizar inferencias de IA en cadena puede abrir nuevas posibilidades para la innovación. Podemos esperar que la IA descentralizada sea un actor clave en el futuro de las soluciones confiables y escalables. Los desarrolladores también tienen nuevas oportunidades para crear más productos y servicios en ICP.