| |
|
|
| import os |
| import subprocess |
| import sys |
| import requests |
|
|
| from pathlib import Path |
|
|
| |
| PROJECT_DIRECTORIES = [ |
| "assets", |
| "assets/audio", |
| "assets/video", |
| "checkpoints", |
| "models", |
| "src", |
| "src/utils", |
| "tests", |
| "results" |
| ] |
|
|
| |
| 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" |
| } |
|
|
| |
| 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") |
|
|
| |
| 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" |
| } |
| } |
|
|
| |
| 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.") |
|
|
| |
| 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.") |
|
|
| |
| def activate_virtual_environment(): |
| """ |
| Activa el entorno virtual y devuelve las rutas de pip y python. |
| """ |
| if os.name == 'nt': |
| python_path = str(Path("env") / "Scripts" / "python.exe") |
| pip_path = str(Path("env") / "Scripts" / "pip.exe") |
| else: |
| python_path = str(Path("env") / "bin" / "python") |
| pip_path = str(Path("env") / "bin" / "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 |
|
|
| |
| def install_requirements(pip_path): |
| """ |
| Instala las dependencias de requirements.txt con una barra de progreso. |
| """ |
| print("Instalando dependencias...") |
| |
| 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 |
|
|
| |
| 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() |
|
|
| |
| 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.") |
|
|
| |
| def download_openvino_utils(pip_path): |
| """ |
| Descarga los archivos de utilidades de OpenVINO Notebooks en src/utils si no existen. |
| """ |
| |
| OPENVINO_UTILS_DIR.mkdir(parents=True, exist_ok=True) |
|
|
| |
| 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 |
|
|
| 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}") |
|
|
| |
| 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) |
|
|
| |
| 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 |
| 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) |
|
|
| |
| def download_example_files(): |
| """ |
| Descarga los archivos de ejemplo de entrada (audio y video) en sus carpetas correspondientes. |
| """ |
| |
| 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 |
|
|
| 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"] |
|
|
| |
| folder_path.mkdir(parents=True, exist_ok=True) |
|
|
| |
| 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 |
| |
| |
| if os.path.exists(clone_path): |
| print(f"El repositorio '{clone_path}' ya existe.") |
| return |
|
|
| |
| print("Clonando el repositorio de Wav2Lip...") |
| with tqdm(total=100, desc="Clonaci贸n en progreso", ncols=100, bar_format="{l_bar}{bar}") as pbar: |
| |
| 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() |
|
|
|
|