oceansweep commited on
Commit
22a38f7
1 Parent(s): 7a303e8

Update App_Function_Libraries/System_Checks_Lib.py

Browse files
App_Function_Libraries/System_Checks_Lib.py CHANGED
@@ -1,184 +1,184 @@
1
- # System_Checks_Lib.py
2
- #########################################
3
- # System Checks Library
4
- # This library is used to check the system for the necessary dependencies to run the script.
5
- # It checks for the OS, the availability of the GPU, and the availability of the ffmpeg executable.
6
- # If the GPU is available, it asks the user if they would like to use it for processing.
7
- # If ffmpeg is not found, it asks the user if they would like to download it.
8
- # The script will exit if the user chooses not to download ffmpeg.
9
- ####
10
-
11
- ####################
12
- # Function List
13
- #
14
- # 1. platform_check()
15
- # 2. cuda_check()
16
- # 3. decide_cpugpu()
17
- # 4. check_ffmpeg()
18
- # 5. download_ffmpeg()
19
- #
20
- ####################
21
-
22
-
23
-
24
-
25
- # Import necessary libraries
26
- import logging
27
- import os
28
- import platform
29
- import requests
30
- import shutil
31
- import subprocess
32
- import zipfile
33
- # Import Local Libraries
34
- #from App_Function_Libraries import
35
- #
36
- #######################################################################################################################
37
- # Function Definitions
38
- #
39
-
40
- def platform_check():
41
- global userOS
42
- if platform.system() == "Linux":
43
- print("Linux OS detected \n Running Linux appropriate commands")
44
- userOS = "Linux"
45
- elif platform.system() == "Windows":
46
- print("Windows OS detected \n Running Windows appropriate commands")
47
- userOS = "Windows"
48
- else:
49
- print("Other OS detected \n Maybe try running things manually?")
50
- exit()
51
-
52
-
53
- # Check for NVIDIA GPU and CUDA availability
54
- def cuda_check():
55
- global processing_choice
56
- try:
57
- # Run nvidia-smi to capture its output
58
- nvidia_smi_output = subprocess.check_output("nvidia-smi", shell=True).decode()
59
-
60
- # Look for CUDA version in the output
61
- if "CUDA Version" in nvidia_smi_output:
62
- cuda_version = next(
63
- (line.split(":")[-1].strip() for line in nvidia_smi_output.splitlines() if "CUDA Version" in line),
64
- "Not found")
65
- print(f"NVIDIA GPU with CUDA Version {cuda_version} is available.")
66
- processing_choice = "cuda"
67
- else:
68
- print("CUDA is not installed or configured correctly.")
69
- processing_choice = "cpu"
70
-
71
- except subprocess.CalledProcessError as e:
72
- print(f"Failed to run 'nvidia-smi': {str(e)}")
73
- processing_choice = "cpu"
74
- except Exception as e:
75
- print(f"An error occurred: {str(e)}")
76
- processing_choice = "cpu"
77
-
78
- # Optionally, check for the CUDA_VISIBLE_DEVICES env variable as an additional check
79
- if "CUDA_VISIBLE_DEVICES" in os.environ:
80
- print("CUDA_VISIBLE_DEVICES is set:", os.environ["CUDA_VISIBLE_DEVICES"])
81
- else:
82
- print("CUDA_VISIBLE_DEVICES not set.")
83
-
84
-
85
- # Ask user if they would like to use either their GPU or their CPU for transcription
86
- def decide_cpugpu():
87
- global processing_choice
88
- processing_input = input("Would you like to use your GPU or CPU for transcription? (1/cuda)GPU/(2/cpu)CPU): ")
89
- if processing_choice == "cuda" and (processing_input.lower() == "cuda" or processing_input == "1"):
90
- print("You've chosen to use the GPU.")
91
- logging.debug("GPU is being used for processing")
92
- processing_choice = "cuda"
93
- elif processing_input.lower() == "cpu" or processing_input == "2":
94
- print("You've chosen to use the CPU.")
95
- logging.debug("CPU is being used for processing")
96
- processing_choice = "cpu"
97
- else:
98
- print("Invalid choice. Please select either GPU or CPU.")
99
-
100
-
101
- # check for existence of ffmpeg
102
- def check_ffmpeg():
103
- if shutil.which("ffmpeg") or (os.path.exists("Bin") and os.path.isfile(".\\Bin\\ffmpeg.exe")):
104
- logging.debug("ffmpeg found installed on the local system, in the local PATH, or in the './Bin' folder")
105
- pass
106
- else:
107
- logging.debug("ffmpeg not installed on the local system/in local PATH")
108
- print(
109
- "ffmpeg is not installed.\n\n You can either install it manually, or through your package manager of "
110
- "choice.\n Windows users, builds are here: https://www.gyan.dev/ffmpeg/builds/")
111
- if userOS == "Windows":
112
- download_ffmpeg()
113
- elif userOS == "Linux":
114
- print(
115
- "You should install ffmpeg using your platform's appropriate package manager, 'apt install ffmpeg',"
116
- "'dnf install ffmpeg' or 'pacman', etc.")
117
- else:
118
- logging.debug("running an unsupported OS")
119
- print("You're running an unspported/Un-tested OS")
120
- exit_script = input("Let's exit the script, unless you're feeling lucky? (y/n)")
121
- if exit_script == "y" or "yes" or "1":
122
- exit()
123
-
124
-
125
- # Download ffmpeg
126
- def download_ffmpeg():
127
- user_choice = input("Do you want to download ffmpeg? (y)Yes/(n)No: ")
128
- if user_choice.lower() in ['yes', 'y', '1']:
129
- print("Downloading ffmpeg")
130
- url = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
131
- response = requests.get(url)
132
-
133
- if response.status_code == 200:
134
- print("Saving ffmpeg zip file")
135
- logging.debug("Saving ffmpeg zip file")
136
- zip_path = "ffmpeg-release-essentials.zip"
137
- with open(zip_path, 'wb') as file:
138
- file.write(response.content)
139
-
140
- logging.debug("Extracting the 'ffmpeg.exe' file from the zip")
141
- print("Extracting ffmpeg.exe from zip file to '/Bin' folder")
142
- with zipfile.ZipFile(zip_path, 'r') as zip_ref:
143
- # Find the ffmpeg.exe file within the zip
144
- ffmpeg_path = None
145
- for file_info in zip_ref.infolist():
146
- if file_info.filename.endswith("ffmpeg.exe"):
147
- ffmpeg_path = file_info.filename
148
- break
149
-
150
- if ffmpeg_path is None:
151
- logging.error("ffmpeg.exe not found in the zip file.")
152
- print("ffmpeg.exe not found in the zip file.")
153
- return
154
-
155
- logging.debug("checking if the './Bin' folder exists, creating if not")
156
- bin_folder = "Bin"
157
- if not os.path.exists(bin_folder):
158
- logging.debug("Creating a folder for './Bin', it didn't previously exist")
159
- os.makedirs(bin_folder)
160
-
161
- logging.debug("Extracting 'ffmpeg.exe' to the './Bin' folder")
162
- zip_ref.extract(ffmpeg_path, path=bin_folder)
163
-
164
- logging.debug("Moving 'ffmpeg.exe' to the './Bin' folder")
165
- src_path = os.path.join(bin_folder, ffmpeg_path)
166
- dst_path = os.path.join(bin_folder, "ffmpeg.exe")
167
- shutil.move(src_path, dst_path)
168
-
169
- logging.debug("Removing ffmpeg zip file")
170
- print("Deleting zip file (we've already extracted ffmpeg.exe, no worries)")
171
- os.remove(zip_path)
172
-
173
- logging.debug("ffmpeg.exe has been downloaded and extracted to the './Bin' folder.")
174
- print("ffmpeg.exe has been successfully downloaded and extracted to the './Bin' folder.")
175
- else:
176
- logging.error("Failed to download the zip file.")
177
- print("Failed to download the zip file.")
178
- else:
179
- logging.debug("User chose to not download ffmpeg")
180
- print("ffmpeg will not be downloaded.")
181
-
182
- #
183
- #
184
- #######################################################################################################################
 
1
+ # System_Checks_Lib.py
2
+ #########################################
3
+ # System Checks Library
4
+ # This library is used to check the system for the necessary dependencies to run the script.
5
+ # It checks for the OS, the availability of the GPU, and the availability of the ffmpeg executable.
6
+ # If the GPU is available, it asks the user if they would like to use it for processing.
7
+ # If ffmpeg is not found, it asks the user if they would like to download it.
8
+ # The script will exit if the user chooses not to download ffmpeg.
9
+ ####
10
+
11
+ ####################
12
+ # Function List
13
+ #
14
+ # 1. platform_check()
15
+ # 2. cuda_check()
16
+ # 3. decide_cpugpu()
17
+ # 4. check_ffmpeg()
18
+ # 5. download_ffmpeg()
19
+ #
20
+ ####################
21
+
22
+
23
+
24
+
25
+ # Import necessary libraries
26
+ import logging
27
+ import os
28
+ import platform
29
+ import requests
30
+ import shutil
31
+ import subprocess
32
+ import zipfile
33
+ # Import Local Libraries
34
+ #from App_Function_Libraries import
35
+ #
36
+ #######################################################################################################################
37
+ # Function Definitions
38
+ #
39
+
40
+ def platform_check():
41
+ global userOS
42
+ if platform.system() == "Linux":
43
+ print("Linux OS detected \n Running Linux appropriate commands")
44
+ userOS = "Linux"
45
+ elif platform.system() == "Windows":
46
+ print("Windows OS detected \n Running Windows appropriate commands")
47
+ userOS = "Windows"
48
+ else:
49
+ print("Other OS detected \n Maybe try running things manually?")
50
+ exit()
51
+
52
+
53
+ # Check for NVIDIA GPU and CUDA availability
54
+ def cuda_check():
55
+ global processing_choice
56
+ try:
57
+ # Run nvidia-smi to capture its output
58
+ nvidia_smi_output = subprocess.check_output("nvidia-smi", shell=True).decode()
59
+
60
+ # Look for CUDA version in the output
61
+ if "CUDA Version" in nvidia_smi_output:
62
+ cuda_version = next(
63
+ (line.split(":")[-1].strip() for line in nvidia_smi_output.splitlines() if "CUDA Version" in line),
64
+ "Not found")
65
+ print(f"NVIDIA GPU with CUDA Version {cuda_version} is available.")
66
+ processing_choice = "cuda"
67
+ else:
68
+ print("CUDA is not installed or configured correctly.")
69
+ processing_choice = "cpu"
70
+
71
+ except subprocess.CalledProcessError as e:
72
+ print(f"Failed to run 'nvidia-smi': {str(e)}")
73
+ processing_choice = "cpu"
74
+ except Exception as e:
75
+ print(f"An error occurred: {str(e)}")
76
+ processing_choice = "cpu"
77
+
78
+ # Optionally, check for the CUDA_VISIBLE_DEVICES env variable as an additional check
79
+ if "CUDA_VISIBLE_DEVICES" in os.environ:
80
+ print("CUDA_VISIBLE_DEVICES is set:", os.environ["CUDA_VISIBLE_DEVICES"])
81
+ else:
82
+ print("CUDA_VISIBLE_DEVICES not set.")
83
+
84
+
85
+ # Ask user if they would like to use either their GPU or their CPU for transcription
86
+ def decide_cpugpu():
87
+ global processing_choice
88
+ processing_input = input("Would you like to use your GPU or CPU for transcription? (1/cuda)GPU/(2/cpu)CPU): ")
89
+ if processing_choice == "cuda" and (processing_input.lower() == "cuda" or processing_input == "1"):
90
+ print("You've chosen to use the GPU.")
91
+ logging.debug("GPU is being used for processing")
92
+ processing_choice = "cuda"
93
+ elif processing_input.lower() == "cpu" or processing_input == "2":
94
+ print("You've chosen to use the CPU.")
95
+ logging.debug("CPU is being used for processing")
96
+ processing_choice = "cpu"
97
+ else:
98
+ print("Invalid choice. Please select either GPU or CPU.")
99
+
100
+
101
+ # check for existence of ffmpeg
102
+ def check_ffmpeg():
103
+ if shutil.which("ffmpeg") or (os.path.exists("Bin") and os.path.isfile(".\\Bin\\ffmpeg.exe")):
104
+ logging.debug("ffmpeg found installed on the local system, in the local PATH, or in the './Bin' folder")
105
+ pass
106
+ else:
107
+ logging.debug("ffmpeg not installed on the local system/in local PATH")
108
+ print(
109
+ "ffmpeg is not installed.\n\n You can either install it manually, or through your package manager of "
110
+ "choice.\n Windows users, builds are here: https://www.gyan.dev/ffmpeg/builds/")
111
+ if userOS == "Windows":
112
+ download_ffmpeg()
113
+ elif userOS == "Linux":
114
+ print(
115
+ "You should install ffmpeg using your platform's appropriate package manager, 'apt install ffmpeg',"
116
+ "'dnf install ffmpeg' or 'pacman', etc.")
117
+ else:
118
+ logging.debug("running an unsupported OS")
119
+ print("You're running an unspported/Un-tested OS")
120
+ exit_script = input("Let's exit the script, unless you're feeling lucky? (y/n)")
121
+ if exit_script == "y" or "yes" or "1":
122
+ exit()
123
+
124
+
125
+ # Download ffmpeg
126
+ def download_ffmpeg():
127
+ user_choice = input("Do you want to download ffmpeg? (y)Yes/(n)No: ")
128
+ if user_choice.lower() in ['yes', 'y', '1']:
129
+ print("Downloading ffmpeg")
130
+ url = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
131
+ response = requests.get(url)
132
+
133
+ if response.status_code == 200:
134
+ print("Saving ffmpeg zip file")
135
+ logging.debug("Saving ffmpeg zip file")
136
+ zip_path = "ffmpeg-release-essentials.zip"
137
+ with open(zip_path, 'wb') as file:
138
+ file.write(response.content)
139
+
140
+ logging.debug("Extracting the 'ffmpeg.exe' file from the zip")
141
+ print("Extracting ffmpeg.exe from zip file to '/Bin' folder")
142
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
143
+ # Find the ffmpeg.exe file within the zip
144
+ ffmpeg_path = None
145
+ for file_info in zip_ref.infolist():
146
+ if file_info.filename.endswith("ffmpeg.exe"):
147
+ ffmpeg_path = file_info.filename
148
+ break
149
+
150
+ if ffmpeg_path is None:
151
+ logging.error("ffmpeg.exe not found in the zip file.")
152
+ print("ffmpeg.exe not found in the zip file.")
153
+ return
154
+
155
+ logging.debug("checking if the './Bin' folder exists, creating if not")
156
+ bin_folder = "Bin"
157
+ if not os.path.exists(bin_folder):
158
+ logging.debug("Creating a folder for './Bin', it didn't previously exist")
159
+ os.makedirs(bin_folder)
160
+
161
+ logging.debug("Extracting 'ffmpeg.exe' to the './Bin' folder")
162
+ zip_ref.extract(ffmpeg_path, path=bin_folder)
163
+
164
+ logging.debug("Moving 'ffmpeg.exe' to the './Bin' folder")
165
+ src_path = os.path.join(bin_folder, ffmpeg_path)
166
+ dst_path = os.path.join(bin_folder, "ffmpeg.exe")
167
+ shutil.move(src_path, dst_path)
168
+
169
+ logging.debug("Removing ffmpeg zip file")
170
+ print("Deleting zip file (we've already extracted ffmpeg.exe, no worries)")
171
+ os.remove(zip_path)
172
+
173
+ logging.debug("ffmpeg.exe has been downloaded and extracted to the './Bin' folder.")
174
+ print("ffmpeg.exe has been successfully downloaded and extracted to the './Bin' folder.")
175
+ else:
176
+ logging.error("Failed to download the zip file.")
177
+ print("Failed to download the zip file.")
178
+ else:
179
+ logging.debug("User chose to not download ffmpeg")
180
+ print("ffmpeg will not be downloaded.")
181
+
182
+ #
183
+ #
184
+ #######################################################################################################################