xi_arma

pirs2

Apr 16th, 2025
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. import customtkinter as ctk
  2. import tkinter as tk
  3. from tkinter import messagebox as mbox
  4. from PIL import Image, ImageDraw, ImageFont, ImageTk
  5. import speech_recognition as sr
  6. import socket
  7. import os # Import the os module for file path manipulation
  8.  
  9. # === SETUP ===
  10. ctk.set_appearance_mode("light")
  11. root = ctk.CTk()
  12. root.title("Voice to Image")
  13. root.geometry("500x450")
  14. root.configure(bg="white")
  15.  
  16. PINK = "#ff69b4"
  17. WHITE = "#ffffff"
  18.  
  19. # === INTERNET CHECK ===
  20. def check_internet():
  21. try:
  22. socket.create_connection(("www.google.com", 80))
  23. return True
  24. except OSError:
  25. return False
  26.  
  27. # === SPEECH TO TEXT FUNCTION ===
  28. def recognize_speech():
  29. recognizer = sr.Recognizer()
  30. # List available microphones for debugging
  31. print("Available microphones:")
  32. for i, mic in enumerate(sr.Microphone.list_microphone_names()):
  33. print(f"{i}: {mic}")
  34.  
  35. if not check_internet():
  36. mbox.showerror("Error", "No internet connection.")
  37. return
  38.  
  39. try:
  40. with sr.Microphone(device_index=1) as source: # Add device_index if needed, e.g., device_index=1
  41. mbox.showinfo("Recording", "Adjusting for ambient noise... Please wait.")
  42. recognizer.adjust_for_ambient_noise(source, duration=3)
  43. mbox.showinfo("Recording", "Speak now...")
  44. audio = recognizer.listen(source, timeout=10, phrase_time_limit=5)
  45. text = recognizer.recognize_google(audio)
  46. textbox.delete("1.0", "end")
  47. textbox.insert("1.0", text)
  48. mbox.showinfo("Success", "Text inserted into box.")
  49. except sr.UnknownValueError:
  50. mbox.showerror("Error", "Could not understand audio.")
  51. except sr.RequestError as e:
  52. mbox.showerror("Error", f"API error: {str(e)}")
  53. except sr.WaitTimeoutError:
  54. mbox.showerror("Error", "No speech detected in time.")
  55. except Exception as e:
  56. mbox.showerror("Error", f"Unexpected error: {str(e)}")
  57.  
  58. # === TEXT TO IMAGE FUNCTION ===
  59. def generate_image():
  60. text = textbox.get("1.0", "end").strip()
  61. if not text:
  62. mbox.showwarning("Warning", "Textbox is empty.")
  63. return
  64.  
  65. width, height = 800, 400
  66. image = Image.new("RGB", (width, height), WHITE)
  67. draw = ImageDraw.Draw(image)
  68.  
  69. try:
  70. font = ImageFont.truetype("arial.ttf", 24)
  71. except:
  72. font = ImageFont.load_default()
  73.  
  74. margin = 40
  75. draw.text((margin, margin), text, fill=PINK, font=font)
  76.  
  77. # Get the user's Downloads folder path
  78. downloads_path = os.path.join(os.path.expanduser("~"), "Downloads")
  79. image_path = os.path.join(downloads_path, "text_image.png")
  80. image.save(image_path)
  81. mbox.showinfo("Success", f"Image saved to: {image_path}") # Inform the user where the image is saved
  82. show_image_preview(image)
  83.  
  84. # === IMAGE PREVIEW ===
  85. def show_image_preview(image):
  86. preview_win = tk.Toplevel(root)
  87. preview_win.title("Image Preview")
  88. preview_win.configure(bg="white")
  89.  
  90. display_image = image.copy()
  91. display_image.thumbnail((600, 400))
  92. tk_image = ImageTk.PhotoImage(display_image)
  93.  
  94. label = tk.Label(preview_win, image=tk_image, bg="white")
  95. label.image = tk_image
  96. label.pack(padx=10, pady=10)
  97.  
  98. # === WIDGETS ===
  99. textbox = ctk.CTkTextbox(root, height=200, width=460, fg_color=WHITE, text_color="black", border_color=PINK, border_width=2)
  100. textbox.pack(pady=20)
  101.  
  102. record_button = ctk.CTkButton(root, text="🎙️ Record Voice", command=recognize_speech, fg_color=PINK, hover_color="#ff85c1", text_color="white")
  103. record_button.pack(pady=5)
  104.  
  105. generate_button = ctk.CTkButton(root, text="Generate Image", command=generate_image, fg_color=PINK, hover_color="#ff85c1", text_color="white")
  106. generate_button.pack(pady=10)
  107.  
  108. # === RUN ===
  109. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment