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 :
📥Configurar el entorno de desarrollo:
sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)"
👉Para confirmar la instalación:
dfx –version
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
git clone https://github.com/wasm-forge/wasi2ic.git cd wasi2ic cargo install --path .
👉Para comprobar la instalación, ejecute:
echo $PATH wasi2ic –help
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
El modelo de detección de rostros se utilizará para detectar rostros en una imagen. Ejecutar:
./download-face-detection-model.sh
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/ .
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.
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.
👉Ahora puedes verificar el estado del backend del contenedor:
dfx canister status backend
Puedes ver algo como esto en la terminal.
📥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:
dfx canister call backend clear_face_detection_model_bytes dfx canister call backend clear_face_recognition_model_bytes
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
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)
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:
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.
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í:
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:
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.
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.
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
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.
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.