EKNA_V1 / setup.py
fireedman's picture
Conflictos resueltos en merge master -> main
0ba712a
# 2024/03/11 setup.py
import os
import subprocess
import sys
import requests
from pathlib import Path
# Definición de las carpetas del proyecto
PROJECT_DIRECTORIES = [
"assets",
"assets/audio",
"assets/video",
"checkpoints",
"models",
"src",
"src/utils",
"tests",
"results"
]
# URLs de las utilidades de OpenVINO Notebooks
OPENVINO_UTILS = {
"notebook_utils.py": "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks/latest/utils/notebook_utils.py",
"pip_helper.py": "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks/latest/utils/pip_helper.py"
}
# URLs de los archivos de ayuda de Wav2Lip
WAV2LIP_HELPERS = {
"gradio_helper.py": "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks/latest/notebooks/wav2lip/gradio_helper.py",
"ov_inference.py": "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks/latest/notebooks/wav2lip/ov_inference.py",
"ov_wav2lip_helper.py": "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks/latest/notebooks/wav2lip/ov_wav2lip_helper.py"
}
WAV2LIP_HELPERS_DIR = Path("src")
OPENVINO_UTILS_DIR = Path("src/utils")
# URLs de los archivos de ejemplo de entrada
EXAMPLE_FILES = {
"audio_example": {
"filename": "data_audio_sun_5s.wav",
"url": "https://github.com/sammysun0711/openvino_aigc_samples/blob/main/Wav2Lip/data_audio_sun_5s.wav?raw=true",
"folder": "assets/audio"
},
"video_example": {
"filename": "data_video_sun_5s.mp4",
"url": "https://github.com/sammysun0711/openvino_aigc_samples/blob/main/Wav2Lip/data_video_sun_5s.mp4?raw=true",
"folder": "assets/video"
}
}
# Función para crear la estructura general del proyecto
def create_project_structure():
"""
Crea la estructura de las carpetas del proyecto
"""
for directory in PROJECT_DIRECTORIES:
path = Path(directory)
if not path.exists():
path.mkdir(parents=True, exist_ok=True)
print(f"Carpeta '{directory}' creada.")
else:
print(f"Carpeta '{directory}' ya existe.")
# Función para crear el entorno virtual
def create_virtual_environment():
"""
Crea el entorno virtual si no existe.
"""
env_path = Path("env")
if not env_path.exists():
print("Creando el entorno virtual...")
subprocess.check_call([sys.executable, "-m", "venv", "env"])
print(f"Entorno virtual creado en '{env_path}'.")
else:
print(f"El entorno virtual '{env_path}' ya existe.")
# Función que activa y define pip y python
def activate_virtual_environment():
"""
Activa el entorno virtual y devuelve las rutas de pip y python.
"""
if os.name == 'nt': # Windows
python_path = str(Path("env") / "Scripts" / "python.exe")
pip_path = str(Path("env") / "Scripts" / "pip.exe")
else: # Unix/MacOS
python_path = str(Path("env") / "bin" / "python")
pip_path = str(Path("env") / "bin" / "pip")
# Actualizar pip a la última versión en el entorno virtual usando python -m pip
try:
subprocess.check_call([python_path, "-m", "pip", "install", "--upgrade", "pip"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
print("pip actualizado a la última versión.")
except subprocess.CalledProcessError:
print("Error al actualizar pip.")
try:
subprocess.check_call([pip_path, "install", "tqdm"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar tqdm.")
return python_path, pip_path
# Funcion para instalar las dependencias desde requirements.txt con barra de progreso
def install_requirements(pip_path):
"""
Instala las dependencias de requirements.txt con una barra de progreso.
"""
print("Instalando dependencias...")
# Instalar tqdm en el entorno virtual si no está instalado
try:
subprocess.check_call([pip_path, "install", "tqdm"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar tqdm.")
from tqdm import tqdm # Importar tqdm para la barra de progreso
# Leer requirements.txt y mostrar barra de progreso
requirements_path = Path("requirements.txt")
if not requirements_path.exists():
print("Archivo requirements.txt no encontrado.")
return
with open(requirements_path, "r") as f:
dependencies = f.read().splitlines()
# Instalar cada dependencia con barra de progreso
for dependency in tqdm(dependencies, desc="Instalando dependencias", unit="paquete"):
try:
subprocess.check_call([pip_path, "install", dependency], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print(f"\nError al instalar {dependency}.")
print("Todas las dependencias fueron instaladas correctamente.")
# Funcion para descargar los archivos de utilidades de OpenVINO Notebooks
def download_openvino_utils(pip_path):
"""
Descarga los archivos de utilidades de OpenVINO Notebooks en src/utils si no existen.
"""
# Crear la carpeta de utilidades si no existe
OPENVINO_UTILS_DIR.mkdir(parents=True, exist_ok=True)
# Instalar requests en el entorno virtual si no está instalado
try:
subprocess.check_call([pip_path, "install", "requests"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar requests.")
# Instalar tqdm en el entorno virtual si no está instalado
try:
subprocess.check_call([pip_path, "install", "tqdm"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar tqdm.")
from tqdm import tqdm # Importar tqdm para la barra de progreso
for filename, url in tqdm(OPENVINO_UTILS.items(), desc="Descargando utilidades de OpenVINO", unit="archivo"):
file_path = OPENVINO_UTILS_DIR / filename
if not file_path.exists():
response = requests.get(url)
if response.status_code == 200:
with open(file_path, "wb") as f:
f.write(response.content)
else:
print(f"Error al descargar {filename} desde {url}")
# Función para descargar los archivos de ayuda específicos de Wav2Lip
def download_wav2lip_helpers(pip_path):
"""
Descarga los archivos de ayuda específicos de Wav2Lip si no existen.
"""
WAV2LIP_HELPERS_DIR.mkdir(parents=True, exist_ok=True) # Crea `src` si no existe
# Instalar requests en el entorno virtual si no está instalado
try:
subprocess.check_call([pip_path, "install", "requests"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar requests.")
try:
subprocess.check_call([pip_path, "install", "tqdm"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar tqdm.")
from tqdm import tqdm # Importar tqdm para la barra de progreso
for filename, url in tqdm(WAV2LIP_HELPERS.items(), desc="Descargando ayudas de Wav2Lip", unit="archivo"):
file_path = WAV2LIP_HELPERS_DIR / filename
if not file_path.exists():
response = requests.get(url)
if response.status_code == 200:
with open(file_path, "wb") as f:
f.write(response.content)
# Función para descargar los archivos de ejemplo de entrada (audio y video)
def download_example_files():
"""
Descarga los archivos de ejemplo de entrada (audio y video) en sus carpetas correspondientes.
"""
# Instalar requests en el entorno virtual si no está instalado
try:
subprocess.check_call([pip_path, "install", "requests"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar requests.")
try:
subprocess.check_call([pip_path, "install", "tqdm"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar tqdm.")
from tqdm import tqdm # Importar tqdm para la barra de progreso
for example_name, example_info in tqdm(EXAMPLE_FILES.items(), desc="Descargando archivos de ejemplo", unit="archivo"):
folder_path = Path(example_info["folder"])
file_path = folder_path / example_info["filename"]
# Crear la carpeta si no existe
folder_path.mkdir(parents=True, exist_ok=True)
# Descargar el archivo si no existe
if not file_path.exists():
response = requests.get(example_info["url"])
if response.status_code == 200:
with open(file_path, "wb") as f:
f.write(response.content)
def clone_wav2lip_repo():
"""
Clona el repositorio oficial de Wav2Lip, ocultando el progreso mediante tqdm.
"""
repo_url = "https://github.com/Rudrabha/Wav2Lip"
clone_path = "src/Wav2Lip"
try:
subprocess.check_call([pip_path, "install", "requests"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar requests.")
try:
subprocess.check_call([pip_path, "install", "tqdm"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError:
print("Error al instalar tqdm.")
from tqdm import tqdm # Importar tqdm para la barra de progreso
# Verifica si el repositorio ya existe para evitar clonarlo nuevamente
if os.path.exists(clone_path):
print(f"El repositorio '{clone_path}' ya existe.")
return
# Inicia el proceso de clonación con tqdm para ocultar el progreso
print("Clonando el repositorio de Wav2Lip...")
with tqdm(total=100, desc="Clonación en progreso", ncols=100, bar_format="{l_bar}{bar}") as pbar:
# Ejecuta el comando de clonación
exit_code = subprocess.call(["git", "clone", repo_url, clone_path], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
if exit_code != 0:
raise Exception("Error: La clonación del repositorio ha fallado.")
else:
pbar.update(100)
print("Repositorio clonado exitosamente en 'Wav2Lip'.")
if __name__ == "__main__":
create_project_structure()
create_virtual_environment()
python_path, pip_path = activate_virtual_environment()
download_openvino_utils(pip_path)
download_wav2lip_helpers(pip_path)
download_example_files()
install_requirements(pip_path)
clone_wav2lip_repo()