-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvosk_model_downloader.py
94 lines (80 loc) · 2.97 KB
/
vosk_model_downloader.py
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
#!/usr/bin/env python3
import subprocess
import sys
import os
import requests
from tqdm import tqdm
import zipfile
def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
def download_file(url, filename):
response = requests.get(url, stream=True)
total_size = int(response.headers.get('content-length', 0))
block_size = 1024
with open(filename, "wb") as f, tqdm(
desc=filename,
total=total_size,
unit='iB',
unit_scale=True,
unit_divisor=1024,
) as progress_bar:
for data in response.iter_content(block_size):
size = f.write(data)
progress_bar.update(size)
def setup():
print("Installing required packages...")
packages = ["vosk"]
for package in packages:
install(package)
# Vosk model selection and download
vosk_models = {
"fr": {
"small": {
"name": "vosk-model-small-fr-0.22",
"url": "https://alphacephei.com/vosk/models/vosk-model-small-fr-0.22.zip",
"size": "41M"
},
"big": {
"name": "vosk-model-fr-0.22",
"url": "https://alphacephei.com/vosk/models/vosk-model-fr-0.22.zip",
"size": "1.4G"
}
},
"en": {
"small": {
"name": "vosk-model-small-en-us-0.15",
"url": "https://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip",
"size": "40M"
},
"big": {
"name": "vosk-model-en-us-0.22",
"url": "https://alphacephei.com/vosk/models/vosk-model-en-us-0.22.zip",
"size": "1.8G"
}
}
}
print("\nVosk model selection:")
lang = input("Choose language (fr/en): ").lower()
while lang not in vosk_models:
lang = input("Invalid choice. Choose language (fr/en): ").lower()
size = input("Choose model size (small/big): ").lower()
while size not in vosk_models[lang]:
size = input("Invalid choice. Choose model size (small/big): ").lower()
selected_model = vosk_models[lang][size]
print(f"\nDownloading Vosk model: {selected_model['name']} ({selected_model['size']})")
model_dir = "./vosk_model"
os.makedirs(model_dir, exist_ok=True)
zip_path = os.path.join(model_dir, f"{selected_model['name']}.zip")
download_file(selected_model['url'], zip_path)
print("Extracting Vosk model...")
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(model_dir)
os.remove(zip_path)
# Update the symbolic link for the selected model
selected_link = os.path.join(model_dir, "selected")
if os.path.islink(selected_link) or os.path.exists(selected_link):
os.remove(selected_link) # Remove existing link or file
os.symlink(selected_model['name'], selected_link) # Corrected line
print("\nSetup complete!")
if __name__ == "__main__":
setup()