Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import customtkinter as ctk
- import tkinter as tk
- from tkinter import messagebox as mbox
- from PIL import Image, ImageDraw, ImageFont, ImageTk
- import speech_recognition as sr
- import socket
- import os # Import the os module for file path manipulation
- # === SETUP ===
- ctk.set_appearance_mode("light")
- root = ctk.CTk()
- root.title("Voice to Image")
- root.geometry("500x450")
- root.configure(bg="white")
- PINK = "#ff69b4"
- WHITE = "#ffffff"
- # === INTERNET CHECK ===
- def check_internet():
- try:
- socket.create_connection(("www.google.com", 80))
- return True
- except OSError:
- return False
- # === SPEECH TO TEXT FUNCTION ===
- def recognize_speech():
- recognizer = sr.Recognizer()
- # List available microphones for debugging
- print("Available microphones:")
- for i, mic in enumerate(sr.Microphone.list_microphone_names()):
- print(f"{i}: {mic}")
- if not check_internet():
- mbox.showerror("Error", "No internet connection.")
- return
- try:
- with sr.Microphone(device_index=1) as source: # Add device_index if needed, e.g., device_index=1
- mbox.showinfo("Recording", "Adjusting for ambient noise... Please wait.")
- recognizer.adjust_for_ambient_noise(source, duration=3)
- mbox.showinfo("Recording", "Speak now...")
- audio = recognizer.listen(source, timeout=10, phrase_time_limit=5)
- text = recognizer.recognize_google(audio)
- textbox.delete("1.0", "end")
- textbox.insert("1.0", text)
- mbox.showinfo("Success", "Text inserted into box.")
- except sr.UnknownValueError:
- mbox.showerror("Error", "Could not understand audio.")
- except sr.RequestError as e:
- mbox.showerror("Error", f"API error: {str(e)}")
- except sr.WaitTimeoutError:
- mbox.showerror("Error", "No speech detected in time.")
- except Exception as e:
- mbox.showerror("Error", f"Unexpected error: {str(e)}")
- # === TEXT TO IMAGE FUNCTION ===
- def generate_image():
- text = textbox.get("1.0", "end").strip()
- if not text:
- mbox.showwarning("Warning", "Textbox is empty.")
- return
- width, height = 800, 400
- image = Image.new("RGB", (width, height), WHITE)
- draw = ImageDraw.Draw(image)
- try:
- font = ImageFont.truetype("arial.ttf", 24)
- except:
- font = ImageFont.load_default()
- margin = 40
- draw.text((margin, margin), text, fill=PINK, font=font)
- # Get the user's Downloads folder path
- downloads_path = os.path.join(os.path.expanduser("~"), "Downloads")
- image_path = os.path.join(downloads_path, "text_image.png")
- image.save(image_path)
- mbox.showinfo("Success", f"Image saved to: {image_path}") # Inform the user where the image is saved
- show_image_preview(image)
- # === IMAGE PREVIEW ===
- def show_image_preview(image):
- preview_win = tk.Toplevel(root)
- preview_win.title("Image Preview")
- preview_win.configure(bg="white")
- display_image = image.copy()
- display_image.thumbnail((600, 400))
- tk_image = ImageTk.PhotoImage(display_image)
- label = tk.Label(preview_win, image=tk_image, bg="white")
- label.image = tk_image
- label.pack(padx=10, pady=10)
- # === WIDGETS ===
- textbox = ctk.CTkTextbox(root, height=200, width=460, fg_color=WHITE, text_color="black", border_color=PINK, border_width=2)
- textbox.pack(pady=20)
- record_button = ctk.CTkButton(root, text="🎙️ Record Voice", command=recognize_speech, fg_color=PINK, hover_color="#ff85c1", text_color="white")
- record_button.pack(pady=5)
- generate_button = ctk.CTkButton(root, text="Generate Image", command=generate_image, fg_color=PINK, hover_color="#ff85c1", text_color="white")
- generate_button.pack(pady=10)
- # === RUN ===
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment