Este projeto fornece um aplicativo da Web que gera avatares a partir de tiros na cabeça capturados via webcam ou arquivos enviados. Ele aproveita a funcionalidade img2img
da API de REST de difusão estável, que é integrada através da Webui de difusão estável.
O projeto está centrado em um aplicativo Python ( app.py
) que expõe uma API REST. Essa API processa uma imagem original, juntamente com parâmetros opcionais (nível de fantasia e preferência de gênero) e retorna o avatar gerado. Os seguintes diretórios e arquivos estão incluídos:
.
├── 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
O aplicativo Python está configurado para conectar -se à API de REST de difusão estável em http://localhost:7861/sdapi/v1/img2img
por padrão. Siga estas etapas para instalar e configurar a API REST localmente:
Clone o repositório estável de difusão webui
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
Baixe um modelo de difusão estável de abraçar o rosto
cd models/Stable-diffusion
wget https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/realisticVisionV51_v51VAE.safetensors
cd ../..
Crie um ambiente virtual
python3 -m venv venv
source venv/bin/activate
Instale dependências e inicie o webui
Execute o script para instalar os requisitos e iniciar o aplicativo:
./webui.sh
Depois que o aplicativo estiver em execução em http://127.0.0.1:7860
, você pode detê -lo com Ctrl+C
.
Nota: Esta etapa é necessária apenas durante a configuração inicial.
Comece o resto da API
Se você não tiver uma GPU, pode iniciar a API usando a CPU:
python3 launch.py --nowebui --skip-python-version-check --always-cpu --skip-torch-cuda-test
A API estará acessível através do seu navegador em http://localhost:7861/docs#/default/img2imgapi_sdapi_v1_img2img_post
.
Para testar o aplicativo localmente:
Inicie a API REST de difusão estável e verifique http://localhost:7861/sdapi/v1/img2img
está acessível.
Inicie o aplicativo da web
Configure o ambiente Python e execute o aplicativo:
python3 -m venv venv
source venv/bin/activate
pip install flask requests Pillow boto3
python3 app.py
Acesse o aplicativo da web
Abra um navegador da web e navegue para http://localhost:5000
para usar o gerador de avatar.
Para implantar o aplicativo em uma instância do AWS EC2, siga o processo usual de configuração de um servidor, garantindo que o Python 3.10, o Webs de difusão estável e outras dependências sejam instaladas corretamente. Ajuste os grupos de segurança e os tipos de instância com base no uso de uma GPU. Consulte a documentação da AWS para obter instruções detalhadas.
Este guia descreve as etapas para implantar o aplicativo Avatar Generator em uma instância do AWS EC2 equipada com uma GPU.
g4dn.xlarge
Atualizar pacotes do sistema
sudo apt-get update
sudo apt-get upgrade -y
Verifique a presença do dispositivo Nvidia
sudo lshw -c video
Você deve ver a saída indicando a presença de uma GPU da NVIDIA, como:
*-display:1
description: 3D controller
product: TU104GL [Tesla T4]
vendor: NVIDIA Corporation
Instale os drivers da NVIDIA
sudo apt install -y ubuntu-drivers-common
sudo ubuntu-drivers autoinstall
Reinicie a instância
sudo reboot
Após a reinicialização, verifique se os motoristas da NVIDIA estão instalados corretamente:
nvidia-smi
A saída esperada deve mostrar a versão do driver da NVIDIA e a versão CUDA.
Para obter detalhes adicionais sobre a instalação dos drivers da NVIDIA, consulte a documentação do Ubuntu.
Clone o repositório estável de difusão webui
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
Baixar modelo de difusão estável
cd models/Stable-diffusion
wget https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/realisticVisionV51_v51VAE.safetensors
cd ../..
Instale o instalador do pacote Python
sudo apt install python3-pip
Criar e ativar um ambiente virtual
python3 -m venv venv
source venv/bin/activate
Instale dependências e inicie Webui
./webui.sh
Você pode interromper o aplicativo com Ctrl+C
depois de começar a executar em http://127.0.0.1:7860
.
Comece o resto da API
python3 launch.py --nowebui --skip-python-version-check --skip-torch-cuda-test
Crie um script de inicialização para a API REST
Crie um script para iniciar facilmente a API no 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 "
Clone o repositório de aplicativos da web
git clone https://github.com/aborroy/communitylive-avatar.git
cd communitylive-avatar
Crie um ambiente virtual e inicie o aplicativo
python3 -m venv venv
source venv/bin/activate
pip install flask requests Pillow boto3
python3 app.py
Crie um script de inicialização para o aplicativo da web
Crie um script para iniciar facilmente o aplicativo da 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 "
Como o aplicativo usa uma webcam, é necessária uma conexão HTTPS segura. Use a AWS Route 53 para rotear o tráfego para a instância do EC2. Exemplo DNS: communitylive-avatar.alfdemo.com
.
Instale o nginx
sudo apt-get install nginx
Instale o CertBot e o Nginx Plugin
sudo apt-get install certbot python3-certbot-nginx
Configure nginx
Crie um arquivo de configuração nginx:
sudo vi /etc/nginx/sites-available/app
Adicione a seguinte configuração:
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 ;
}
}
Habilite a configuração Nginx
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled
Teste a configuração e recarregar nginx
sudo nginx -t
sudo systemctl reload nginx
Obter um certificado SSL
sudo certbot --nginx -d communitylive-avatar.alfdemo.com
O CERTBOT configurará automaticamente o NGINX para usar o TLS na porta 443.
Para ativar a entrega por email de avatares usando a AWS SES (serviço de email simples), siga estas etapas:
Instale a AWS CLI :
Configure a AWS CLI :
aws configure
Configure a AWS SES :
aws ses verify-email-identity --email-address [email protected]
Teste o envio de e -mail do SES :
aws ses send-email --from [email protected] --destination [email protected] --message " Subject={Data=Test Email},Body={Text={Data=Hello!}} "
Com o AWS SES configurado, seu aplicativo poderá enviar os avatares gerados por e -mail para os destinatários especificados.
Se todas as etapas forem concluídas com sucesso, seu aplicativo estará acessível em https://communitylive-avatar.alfdemo.com.