Este proyecto proporciona una aplicación web que genera avatares a partir de disparos en la cabeza capturados a través de la cámara web o los archivos cargados. Aprovecha la funcionalidad img2img
de la API de REST de difusión estable, que se integra a través de la WebUI de difusión estable.
El proyecto se centra en una aplicación de Python ( app.py
) que expone una API REST. Esta API procesa una imagen original junto con parámetros opcionales (nivel de fantasía y preferencia de género) y devuelve el avatar generado. Se incluyen los siguientes directorios y archivos:
.
├── app.py # Main application file exposing REST API
├── static # Static resources for the web application
│ ├── Hyland_logo.png
│ └── style.css
└── templates # HTML templates
└── index.html
La aplicación Python está configurada para conectarse a la API de descanso de difusión estable en http://localhost:7861/sdapi/v1/img2img
de forma predeterminada. Siga estos pasos para instalar y configurar la API REST localmente:
Clon el repositorio de Webui de difusión estable
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
Descargue un modelo de difusión estable de la cara abrazada
cd models/Stable-diffusion
wget https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/realisticVisionV51_v51VAE.safetensors
cd ../..
Crear un entorno virtual
python3 -m venv venv
source venv/bin/activate
Instalar dependencias e iniciar la webui
Ejecute el script para instalar requisitos e inicie la aplicación:
./webui.sh
Una vez que la aplicación se ejecuta en http://127.0.0.1:7860
, puede detenerla con Ctrl+C
.
Nota: Este paso solo se requiere durante la configuración inicial.
Comience la API REST
Si no tiene una GPU, puede iniciar la API usando la CPU:
python3 launch.py --nowebui --skip-python-version-check --always-cpu --skip-torch-cuda-test
Se puede acceder a la API a través de su navegador en http://localhost:7861/docs#/default/img2imgapi_sdapi_v1_img2img_post
.
Para probar la aplicación localmente:
Comience la API de reposo de difusión estable y asegúrese de que http://localhost:7861/sdapi/v1/img2img
sea accesible.
Iniciar la aplicación web
Configure el entorno Python y ejecute la aplicación:
python3 -m venv venv
source venv/bin/activate
pip install flask requests Pillow boto3
python3 app.py
Acceder a la aplicación web
Abra un navegador web y navegue a http://localhost:5000
para usar el generador de avatar.
Para implementar la aplicación en una instancia de AWS EC2, siga el proceso habitual de configuración de un servidor, asegurando que Python 3.10, el WebUI de difusión estable y otras dependencias estén instaladas correctamente. Ajuste los grupos de seguridad y los tipos de instancias en función de si está utilizando una GPU. Consulte la documentación de AWS para obtener instrucciones detalladas.
Esta guía describe los pasos para implementar la aplicación del generador Avatar en una instancia de AWS EC2 equipada con una GPU.
g4dn.xlarge
Actualizar paquetes del sistema
sudo apt-get update
sudo apt-get upgrade -y
Verificar la presencia del dispositivo NVIDIA
sudo lshw -c video
Debería ver la salida que indica la presencia de una GPU NVIDIA, como:
*-display:1
description: 3D controller
product: TU104GL [Tesla T4]
vendor: NVIDIA Corporation
Instalar controladores NVIDIA
sudo apt install -y ubuntu-drivers-common
sudo ubuntu-drivers autoinstall
Reiniciar la instancia
sudo reboot
Después de reiniciar, verifique que los controladores NVIDIA estén instalados correctamente:
nvidia-smi
La salida esperada debe mostrar la versión del controlador NVIDIA y la versión CUDA.
Para obtener detalles adicionales sobre la instalación de controladores NVIDIA, consulte la documentación de Ubuntu.
Clon el repositorio de Webui de difusión estable
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
Descargar modelo de difusión estable
cd models/Stable-diffusion
wget https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/realisticVisionV51_v51VAE.safetensors
cd ../..
Instalar instalador de paquetes de Python
sudo apt install python3-pip
Crear y activar un entorno virtual
python3 -m venv venv
source venv/bin/activate
Instalar dependencias e iniciar webui
./webui.sh
Puede detener la aplicación con Ctrl+C
después de que comienza a funcionar en http://127.0.0.1:7860
.
Comience la API REST
python3 launch.py --nowebui --skip-python-version-check --skip-torch-cuda-test
Cree un script de inicio para la API REST
Cree un script para iniciar fácilmente la API en el futuro:
$ cat start_api.sh
#! /bin/bash
# Navigate to the stable-diffusion-webui directory
cd stable-diffusion-webui
# Create a virtual environment if it doesn't exist
if [ ! -d " venv " ] ; then
python3 -m venv venv
fi
# Activate the virtual environment
source venv/bin/activate
# Launch the application and write output to api.log
python3 launch.py --nowebui --skip-python-version-check --skip-torch-cuda-test > ../api.log 2>&1 &
# Print a message indicating the application has started
echo " API has started. Output is being written to api.log "
Clonar el repositorio de aplicaciones web
git clone https://github.com/aborroy/communitylive-avatar.git
cd communitylive-avatar
Crear un entorno virtual e iniciar la aplicación
python3 -m venv venv
source venv/bin/activate
pip install flask requests Pillow boto3
python3 app.py
Cree un script de inicio para la aplicación web
Cree un script para iniciar fácilmente la aplicación web:
$ cat start_app.sh
#! /bin/bash
# Navigate to the app directory
cd communitylive-avatar
# Create a virtual environment if it doesn't exist
if [ ! -d " venv " ] ; then
python3 -m venv venv
fi
# Activate the virtual environment
source venv/bin/activate
# Launch the application and write output to app.log
python3 app.py > ../app.log 2>&1 &
# Print a message indicating the application has started
echo " Application has started. Output is being written to app.log "
Dado que la aplicación usa una cámara web, se requiere una conexión HTTPS segura. Use AWS Route 53 para enrutar el tráfico a la instancia de EC2. Ejemplo DNS: communitylive-avatar.alfdemo.com
.
Instalar nginx
sudo apt-get install nginx
Instale el complemento CERTBOT y NGINX
sudo apt-get install certbot python3-certbot-nginx
Configurar nginx
Cree un archivo de configuración de Nginx:
sudo vi /etc/nginx/sites-available/app
Agregue la siguiente configuración:
server {
listen 80 ;
server_name communitylive-avatar.alfdemo.com;
client_max_body_size 64M ;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Forwarded-Proto $scheme ;
}
}
Habilitar la configuración de Nginx
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled
Probar la configuración y recargar Nginx
sudo nginx -t
sudo systemctl reload nginx
Obtener un certificado SSL
sudo certbot --nginx -d communitylive-avatar.alfdemo.com
CERTBOT configurará automáticamente NGINX para usar TLS en el puerto 443.
Para habilitar la entrega por correo electrónico de avatares utilizando AWS SES (servicio de correo electrónico simple), siga estos pasos:
Instale AWS CLI :
Configurar AWS CLI :
aws configure
Configurar AWS SES :
aws ses verify-email-identity --email-address [email protected]
Prueba de envío de correo electrónico de SES :
aws ses send-email --from [email protected] --destination [email protected] --message " Subject={Data=Test Email},Body={Text={Data=Hello!}} "
Con AWS SES configurado, su aplicación podrá enviar los avatares generados por correo electrónico a los destinatarios especificados.
Si todos los pasos se completan con éxito, se puede acceder a su solicitud en https://communitylive-avatar.alfdemo.com.