# import gradio as gr # import os # HF_TOKEN = os.getenv('HW_Token') # hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "save_audio") # import gradio as gr # import os # class TextFileReader: # def __init__(self): # self.lines = [] # self.current_index = 0 # def read_lines(self, file): # self.lines = file.decode('utf-8').splitlines() # self.current_index = 0 # return self.get_current_line() # def get_current_line(self): # if 0 <= self.current_index < len(self.lines): # return self.lines[self.current_index] # else: # return "End of file reached." # def forward_line(self): # self.current_index = min(self.current_index + 1, len(self.lines) - 1) # return self.get_current_line() # def backward_line(self): # self.current_index = max(self.current_index - 1, 0) # return self.get_current_line() # reader = TextFileReader() # # Define a function to save the text lines to a file # def save_text_lines(file): # lines = reader.read_lines(file) # with open("text_lines.txt", "w") as f: # f.write("\n".join(reader.lines)) # return lines # # Define a function to save the audio file and corresponding text # def save_audio_text(audio, text): # if not os.path.exists("recordings"): # os.makedirs("/recordings") # # Debugging to print out the structure of the audio variable # print("Received audio data:", audio) # # Check if audio is a dictionary and contains 'data' # if isinstance(audio, dict) and 'data' in audio: # audio_data = audio['data'] # audio_path = f"/recordings/line_{reader.current_index}.wav" # text_path = f"/recordings/line_{reader.current_index}.txt" # with open(audio_path, "wb") as f: # f.write(audio_data) # with open(text_path, "w") as f: # f.write(text) # # Move to the next line after saving # next_line = reader.forward_line() # return next_line # else: # return "Audio data is not in the expected format." # # Define the Gradio interface # with gr.Blocks() as demo: # with gr.Row(): # file_upload = gr.File(label="Upload a text file", type="binary") # generate_button = gr.Button("Generate Lines") # current_line = gr.Textbox(label="Current Line") # def update_output(file): # lines = reader.read_lines(file) # save_text_lines(file) # Save the text lines to a file # return lines # generate_button.click(fn=update_output, inputs=file_upload, outputs=current_line) # with gr.Row(): # audio_record = gr.Audio(sources=["microphone","upload"], type="filepath") # save_button = gr.Button("Save Audio and Next Line") # save_button.click(fn=save_audio_text, inputs=[audio_record, current_line], outputs=current_line) # demo.launch() # import gradio as gr # def calculator(num1, operation, num2): # if operation == "add": # return num1 + num2 # elif operation == "subtract": # return num1 - num2 # elif operation == "multiply": # return num1 * num2 # elif operation == "divide": # return num1 / num2 # iface = gr.Interface( # calculator, # ["number", gr.Radio(["add", "subtract", "multiply", "divide"]), "number"], # "number", # allow_flagging="manual", # flagging_options=["correct", "wrong"] # ) # iface.launch() # import os # HF_TOKEN = os.getenv('HF_TOKEN') # hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "crowdsourced") # iface = gr.Interface( # calculator, # ["number", gr.Radio(["add", "subtract", "multiply", "divide"]), "number"], # "number", # description="Check out the crowd-sourced dataset at: [https://huggingface.co/Sajjo/crowdsourced](https://huggingface.co/Sajjo/crowdsourced)", # allow_flagging="manual", # flagging_options=["wrong sign", "off by one", "other"], # flagging_callback=hf_writer # ) # iface.launch() # import numpy as np # import gradio as gr # def sepia(input_img, strength): # sepia_filter = strength * np.array( # [[0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131]] # ) + (1-strength) * np.identity(3) # sepia_img = input_img.dot(sepia_filter.T) # sepia_img /= sepia_img.max() # return sepia_img # callback = gr.CSVLogger() # with gr.Blocks() as demo: # with gr.Row(): # with gr.Column(): # img_input = gr.Image() # strength = gr.Slider(0, 1, 0.5) # img_output = gr.Image() # with gr.Row(): # btn = gr.Button("Flag") # # This needs to be called at some point prior to the first call to callback.flag() # callback.setup([img_input, strength, img_output], "flagged_data_points") # img_input.change(sepia, [img_input, strength], img_output) # strength.change(sepia, [img_input, strength], img_output) # # We can choose which components to flag -- in this case, we'll flag all of them # btn.click(lambda *args: callback.flag(args), [img_input, strength, img_output], None, preprocess=False) # demo.launch() # import gradio as gr # import os # import wave # import tempfile # import numpy as np # # Global variables to store file and line index # file_index = 0 # line_index = 0 # lines = [] # # Hugging Face token and dataset saver # HF_TOKEN = os.getenv('HF_TOKEN') # hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "crowdsourced-calculator-demo") # # Function to read lines from a file # def read_lines_from_file(file_path): # global lines # with open(file_path, 'r') as file: # lines = file.readlines() # # Function to save audio to a WAV file # def save_audio_to_file(audio): # sample_rate, data = audio # audio is a tuple (sample_rate, data) # # Save the audio data as a WAV file in a temporary location # with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp_file: # with wave.open(tmp_file.name, 'wb') as wav_file: # wav_file.setnchannels(1) # Mono audio # wav_file.setsampwidth(2) # 2 bytes per sample (16-bit PCM) # wav_file.setframerate(sample_rate) # wav_file.writeframes(data.tobytes()) # # Return the path to the saved WAV file # return tmp_file.name # # Function to save data to the Hugging Face dataset # def save_to_hf_dataset(text, audio_path): # with open(audio_path, "rb") as f: # audio_data = f.read() # hf_writer.save({"text": text, "audio": audio_data}) # # Gradio interface function # def audio_capture_interface(): # global file_index, line_index, lines # # Initial file to read # files = os.listdir('./audio_samples') # read_lines_from_file(os.path.join('./audio_samples', files[file_index])) # # Define the interface components # audio_input = gr.Audio(source="microphone", type="numpy", label="Speak and click submit") # output_text = gr.Textbox(label="Status", placeholder="Status will appear here") # # Function to capture and process the audio input # def process_audio(audio): # global line_index, lines # try: # text_line = lines[line_index].strip() # file_path = save_audio_to_file(audio) # save_to_hf_dataset(text_line, file_path) # return f"Audio saved to {file_path} and uploaded to Hugging Face Dataset." # except Exception as e: # return f"Error saving audio: {str(e)}" # # Function to handle navigation buttons # def navigate_lines(button): # global line_index, lines # if button == 'forward': # line_index = min(line_index + 1, len(lines) - 1) # elif button == 'previous': # line_index = max(line_index - 1, 0) # output_text.value = lines[line_index] # # Create the Gradio interface # with gr.Blocks() as iface: # with gr.Row(): # gr.Textbox(label="Text", value=lines[line_index], interactive=False) # with gr.Row(): # audio_input.render() # with gr.Row(): # gr.Button("Previous").click(lambda: navigate_lines('previous'), outputs=output_text) # gr.Button("Forward").click(lambda: navigate_lines('forward'), outputs=output_text) # gr.Button("Submit").click(process_audio, inputs=audio_input, outputs=output_text) # return iface # # Launch the interface # iface = audio_capture_interface() # iface.launch() import gradio as gr import os import wave import tempfile import numpy as np # Global variables to store line index and lines line_index = 0 lines = [] # Hugging Face token and dataset saver HF_TOKEN = os.getenv('HF_TOKEN') hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "crowdsourced-calculator-demo") # Function to read lines from a file def read_lines_from_file(file_path): global lines, line_index with open(file_path, 'r') as file: lines = file.readlines() line_index = 0 # Reset line index when a new file is loaded return lines[line_index].strip() if lines else "No lines found in the file." # Function to save audio to a WAV file def save_audio_to_file(audio): sample_rate, data = audio # audio is a tuple (sample_rate, data) # Save the audio data as a WAV file in a temporary location with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp_file: with wave.open(tmp_file.name, 'wb') as wav_file: wav_file.setnchannels(1) # Mono audio wav_file.setsampwidth(2) # 2 bytes per sample (16-bit PCM) wav_file.setframerate(sample_rate) wav_file.writeframes(data.tobytes()) # Return the path to the saved WAV file return tmp_file.name # Function to save data to the Hugging Face dataset def save_to_hf_dataset(text, audio_path): with open(audio_path, "rb") as f: audio_data = f.read() hf_writer.save({"text": text, "audio": audio_data}) # Function to capture and process the audio input def process_audio(audio): global line_index, lines try: text_line = lines[line_index].strip() file_path = save_audio_to_file(audio) save_to_hf_dataset(text_line, file_path) return f"Audio saved to {file_path} and uploaded to Hugging Face Dataset." except Exception as e: return f"Error saving audio: {str(e)}" # Function to handle navigation buttons def navigate_lines(button): global line_index, lines if button == 'forward': line_index = min(line_index + 1, len(lines) - 1) elif button == 'previous': line_index = max(line_index - 1, 0) return lines[line_index].strip() if lines else "No lines found." # Function to handle file upload def upload_file(file): if file is not None: file_path = file.name return read_lines_from_file(file_path) else: return "No file uploaded." # Gradio interface function def audio_capture_interface(): with gr.Blocks() as iface: with gr.Row(): file_upload = gr.File(label="Upload a text file", file_types=["text"]) text_display = gr.Textbox(label="Text", value="Please upload a file to begin.", interactive=False) with gr.Row(): audio_input = gr.Audio(sources=["microphone","upload"], type="filepath", label="Speak and click submit") with gr.Row(): status_output = gr.Textbox(label="Status", placeholder="Status will appear here") with gr.Row(): gr.Button("Previous").click(lambda: navigate_lines('previous'), None, text_display) gr.Button("Forward").click(lambda: navigate_lines('forward'), None, text_display) gr.Button("Submit").click(process_audio, inputs=audio_input, outputs=status_output) file_upload.upload(upload_file, outputs=text_display) return iface # Launch the interface iface = audio_capture_interface() iface.launch()