File size: 3,808 Bytes
65dc537 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
import os
import requests
from tqdm import tqdm
import subprocess
import shutil
import platform
import logging
logger = logging.getLogger(__name__)
URL_BASE = "https://huggingface.co./lj1995/VoiceConversionWebUI/resolve/main"
models_download = [
(
"pretrained/",
[
"D32k.pth",
"D40k.pth",
"D48k.pth",
"G32k.pth",
"G40k.pth",
"G48k.pth",
"f0D32k.pth",
"f0D40k.pth",
"f0D48k.pth",
"f0G32k.pth",
"f0G40k.pth",
"f0G48k.pth",
],
),
(
"pretrained_v2/",
[
"D32k.pth",
"D40k.pth",
"D48k.pth",
"G32k.pth",
"G40k.pth",
"G48k.pth",
"f0D32k.pth",
"f0D40k.pth",
"f0D48k.pth",
"f0G32k.pth",
"f0G40k.pth",
"f0G48k.pth",
],
),
("", ["ffmpeg.exe", "ffprobe.exe"]),
]
individual_files = [
("hubert_base.pt", "assets/hubert/"),
("rmvpe.pt", "assets/rmvpe/"),
("rmvpe.onnx", "assets/rmvpe/"),
]
folder_mapping = {
"pretrained/": "assets/pretrained/",
"pretrained_v2/": "assets/pretrained_v2/",
"": "",
}
def download_file_with_progress(url, destination_path):
response = requests.get(url, stream=True)
total_size = int(response.headers.get("content-length", 0))
block_size = 1024
with open(destination_path, "wb") as file, tqdm(
desc=os.path.basename(destination_path),
total=total_size,
unit="B",
unit_scale=True,
unit_divisor=1024,
) as bar:
for data in response.iter_content(block_size):
file.write(data)
bar.update(len(data))
if not os.path.exists("torchcrepe"):
os_name = platform.system()
print("Клонирование репозитория GitHub во временную директорию...")
mingit_path = os.path.join(os.getcwd(), "lib", "tools", "mingit", "cmd", "git.exe")
if os.path.exists(mingit_path):
subprocess.run(
[
mingit_path,
"clone",
"https://github.com/maxrmorrison/torchcrepe.git",
"temp_torchcrepe",
]
)
else:
subprocess.run(
[
"git",
"clone",
"https://github.com/maxrmorrison/torchcrepe.git",
"temp_torchcrepe",
]
)
print("Копирование папки torchcrepe...")
shutil.copytree("temp_torchcrepe/torchcrepe", "./torchcrepe")
print("Удаление временной директории...")
print(os_name)
if os_name == "Windows":
subprocess.run("rmdir /s /q temp_torchcrepe", shell=True)
if os_name == "Linux":
shutil.rmtree("temp_torchcrepe")
for remote_folder, file_list in models_download:
local_folder = folder_mapping.get(remote_folder, "")
for file in file_list:
destination_path = os.path.join(local_folder, file)
url = f"{URL_BASE}/{remote_folder}{file}"
if not os.path.exists(destination_path):
print(f"Скачивание {url} в {destination_path}...")
download_file_with_progress(url, destination_path)
for file_name, local_folder in individual_files:
destination_path = os.path.join(local_folder, file_name)
url = f"{URL_BASE}/{file_name}"
if not os.path.exists(destination_path):
print(f"Скачивание {url} в {destination_path}...")
download_file_with_progress(url, destination_path)
os.system("cls" if os.name == "nt" else "clear")
logger.info("Загрузка Kanoyo успешно продолжается...")
|