Spaces:
Runtime error
Runtime error
Simplify video transcription
Browse files
app.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
import os
|
2 |
import urllib.request
|
3 |
-
import subprocess
|
4 |
from dataclasses import dataclass
|
5 |
from time import sleep
|
6 |
from typing import Dict, List, Generator
|
@@ -28,24 +27,6 @@ class MockInterviewer:
|
|
28 |
self._assistant_id_cache: Dict[Config, str] = {}
|
29 |
self.clear_thread()
|
30 |
|
31 |
-
def convert_webm_to_mp3(input_webm, output_mp3):
|
32 |
-
command = [
|
33 |
-
'ffmpeg',
|
34 |
-
'-i', input_webm, # Input file
|
35 |
-
'-vn', # No video (remove video stream)
|
36 |
-
'-ab', '160k', # Audio bitrate
|
37 |
-
'-ar', '44100', # Audio sample rate
|
38 |
-
'-y', # Overwrite output file if it exists
|
39 |
-
'-f', 'mp3', # Output format
|
40 |
-
output_mp3 # Output file
|
41 |
-
]
|
42 |
-
try:
|
43 |
-
subprocess.run(command, check=True)
|
44 |
-
print(f"File converted successfully and saved as {output_mp3}")
|
45 |
-
except subprocess.CalledProcessError as e:
|
46 |
-
print(f"An error occurred while converting the file: {e}")
|
47 |
-
|
48 |
-
|
49 |
def chat_with_text(
|
50 |
self,
|
51 |
message: Dict,
|
@@ -61,7 +42,7 @@ class MockInterviewer:
|
|
61 |
config = Config(job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count)
|
62 |
yield self._chat(message, config)
|
63 |
|
64 |
-
def
|
65 |
self,
|
66 |
video: str,
|
67 |
job_role: str,
|
@@ -72,14 +53,12 @@ class MockInterviewer:
|
|
72 |
situational_count: int,
|
73 |
case_count: int
|
74 |
) -> str:
|
75 |
-
|
76 |
-
MockInterviewer.convert_webm_to_mp3(video,audio)
|
77 |
-
with open(audio, 'rb') as audio_file:
|
78 |
transcriptions = self._client.audio.transcriptions.create(
|
79 |
model='whisper-1',
|
80 |
-
file=
|
81 |
)
|
82 |
-
os.remove(
|
83 |
config = Config(job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count)
|
84 |
response = self._chat(transcriptions.text, config)
|
85 |
return [(transcriptions.text, response)]
|
@@ -206,14 +185,12 @@ with gr.Blocks(theme=theme) as demo:
|
|
206 |
additional_inputs=[job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count],
|
207 |
retry_btn=None,
|
208 |
undo_btn=None)
|
209 |
-
|
210 |
-
chat_interface.chatbot.height= '45vh'
|
211 |
|
212 |
chat_interface.load(mock_interviewer.clear_thread)
|
213 |
chat_interface.clear_btn.click(mock_interviewer.clear_thread)
|
214 |
|
215 |
video = gr.Video(sources='webcam', include_audio=True)
|
216 |
-
video.stop_recording(fn=mock_interviewer.
|
217 |
inputs=[video, job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count],
|
218 |
outputs=[chat_interface.chatbot],
|
219 |
api_name=False).then(lambda:None, None, video, queue=False)
|
|
|
1 |
import os
|
2 |
import urllib.request
|
|
|
3 |
from dataclasses import dataclass
|
4 |
from time import sleep
|
5 |
from typing import Dict, List, Generator
|
|
|
27 |
self._assistant_id_cache: Dict[Config, str] = {}
|
28 |
self.clear_thread()
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
def chat_with_text(
|
31 |
self,
|
32 |
message: Dict,
|
|
|
42 |
config = Config(job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count)
|
43 |
yield self._chat(message, config)
|
44 |
|
45 |
+
def chat_with_video(
|
46 |
self,
|
47 |
video: str,
|
48 |
job_role: str,
|
|
|
53 |
situational_count: int,
|
54 |
case_count: int
|
55 |
) -> str:
|
56 |
+
with open(video, 'rb') as file:
|
|
|
|
|
57 |
transcriptions = self._client.audio.transcriptions.create(
|
58 |
model='whisper-1',
|
59 |
+
file=file,
|
60 |
)
|
61 |
+
os.remove(video)
|
62 |
config = Config(job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count)
|
63 |
response = self._chat(transcriptions.text, config)
|
64 |
return [(transcriptions.text, response)]
|
|
|
185 |
additional_inputs=[job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count],
|
186 |
retry_btn=None,
|
187 |
undo_btn=None)
|
|
|
|
|
188 |
|
189 |
chat_interface.load(mock_interviewer.clear_thread)
|
190 |
chat_interface.clear_btn.click(mock_interviewer.clear_thread)
|
191 |
|
192 |
video = gr.Video(sources='webcam', include_audio=True)
|
193 |
+
video.stop_recording(fn=mock_interviewer.chat_with_video,
|
194 |
inputs=[video, job_role, company, job_description, behavioral_count, technical_count, situational_count, case_count],
|
195 |
outputs=[chat_interface.chatbot],
|
196 |
api_name=False).then(lambda:None, None, video, queue=False)
|