สร้างรูปภาพที่น่าทึ่งด้วย AI คำแนะนำทีละขั้นตอนในการสร้างแอปทดสอบเป็นรูปภาพ

ในโลกที่เปลี่ยนแปลงอย่างรวดเร็วของเรา AI กำลังเป็นศูนย์กลาง จึงไม่น่าแปลกใจที่ AI ดึงดูดความสนใจของเราเนื่องจากมีศักยภาพในการปรับปรุงประสิทธิภาพในอุตสาหกรรมต่างๆ คุณอาจเคยทดลองใช้เครื่องมือแปลงข้อความเป็นรูปภาพ เช่น Midjourney และ Dream Studio แต่ใน บทความนี้ ฉันจะแนะนำคุณทีละขั้นตอนในการสร้างแอปสร้างข้อความเป็นรูปภาพ "กลางการเดินทาง" ของคุณเองตั้งแต่ต้นโดยใช้การกระจายที่เสถียร. มีโค้ดประมาณ 30 บรรทัด เนื่องจากการแพร่กระจายที่เสถียรเป็นโอเพ่นซอร์ส โมเดลจึงไม่มีค่าใช้จ่าย

ข้อกำหนดเบื้องต้น

ตรวจสอบให้แน่ใจว่าคุณมีทุกสิ่งที่คุณต้องการก่อนที่จะเริ่มสร้างแอปสร้างข้อความเป็นรูปภาพของคุณเอง

  • คุณต้องมีแล็ปท็อปที่มี GPU ไม่ต้องกังวลหากคอมพิวเตอร์ของคุณไม่มี GPU คุณสามารถใช้ Google Colab เพื่อเข้าถึง GPU ฟรีได้ แต่การใช้แล็ปท็อปที่มี GPU จะเหมาะสมกว่า
  • ตั้งค่า Integrated Development Environment (IDE) ด้วยสภาพแวดล้อม Python

ด้วยเงื่อนไขสำคัญเหล่านี้ คุณก็พร้อมแล้ว

บทนำ

เรามาทำความเข้าใจโดยย่อเกี่ยวกับโลกแห่งแบบจำลองการแพร่กระจายซึ่งใช้ในการสร้างภาพจากข้อความ แบบจำลองการแพร่กระจายใช้ลูกโซ่มาร์กอฟเพื่อค่อยๆ นำสัญญาณรบกวนมาสู่ข้อมูล จากนั้นย้อนกลับกระบวนการและสร้างตัวอย่างข้อมูลที่ต้องการจากสัญญาณรบกวน ตัวอย่างที่โดดเด่นของโมเดลการแพร่กระจาย ได้แก่ DLALLE 2 โดย OpenAI, Imagen โดย Google และการแพร่กระจายที่เสถียรซึ่งพัฒนาโดย StabilityAI ในบทความนี้ เราจะมุ่งเน้นไปที่การใช้ Stable Diffusion จาก Stability AI เพื่อสร้างแอปของเรา แม้ว่าโมเดลเชิงกำเนิด เช่น Generative Adversarial Networks (GAN), Variational Autoencoders (VAE) และโมเดล Flow-based จะเป็นที่รู้จักกันดี แต่โมเดลการแพร่กระจายนั้นมีความใหม่ล่าสุด มีประสิทธิภาพและให้ผลลัพธ์ที่ดีกว่า

การตั้งค่าและการติดตั้ง

เราสามารถเข้าถึงโมเดลการแพร่กระจายที่เสถียรผ่านการกอดใบหน้า Hugging face คือชุมชนและแพลตฟอร์มที่ให้การเข้าถึงโมเดลและชุดข้อมูลการเรียนรู้ของเครื่องแบบโอเพ่นซอร์ส เนื่องจากโมเดลเหล่านี้เป็นโอเพ่นซอร์ส การกอดใบหน้าจึงไม่มีค่าใช้จ่ายแม้ว่าจะมีระดับการจ่ายเงินก็ตาม จำเป็นต้องสร้างโปรไฟล์บนใบหน้ากอดหากคุณยังไม่มี หลังจากสร้างโปรไฟล์แล้ว คุณต้องมี "โทเค็นการเข้าถึง"

  • คลิกที่ไอคอนโปรไฟล์ของคุณ
  • คลิกที่ “การตั้งค่า”
  • ไปที่ "โทเค็นการเข้าถึง" บนแท็บด้านซ้าย
  • คุณสามารถสร้างโทเค็นใหม่หรือใช้โทเค็นที่มีอยู่ได้
  • คัดลอกโทเค็น

โทเค็นที่จำเป็นในการเข้าถึงโมเดลการแพร่กระจายที่เสถียรนั้นฟรี ซึ่งทำให้การกอดใบหน้าเป็นทรัพยากรที่ทรงพลัง

สร้างไฟล์ “authtoken.py” ไฟล์นี้จะมีโทเค็นการเข้าถึงของคุณเพื่อกอดใบหน้า

# authtoken.py

# How to get one: https://huggingface.co/docs/hub/security-tokens
auth_token = "{COPY ACCESS TOKEN FROM HUGGING FACE}"

ติดตั้งข้อกำหนดทั้งหมด

สร้างไฟล์ “requirements.txt” หากคุณคุ้นเคยกับการเขียนโค้ดใน Python คุณก็ควรรู้อยู่แล้วว่าไฟล์นี้ใช้ทำอะไร ไฟล์ “requirements.txt” มีไลบรารีที่จำเป็นทั้งหมดที่จำเป็นสำหรับการติดตั้งสำหรับโปรเจ็กต์ Python

# requirements.txt

customtkinter==4.6.1
darkdetect==0.7.1
diffusers==0.3.0
filelock==3.8.0
huggingface-hub==0.9.1
idna==3.4
importlib-metadata==4.12.0
numpy==1.23.3
packaging==21.3
Pillow==9.2.0
pyparsing==3.0.9
PyYAML==6.0
regex==2022.9.13
requests==2.28.1
tk==0.1.0
tokenizers==0.12.1 
torch==1.12.1+cu113
torchaudio==0.12.1+cu113
torchvision==0.13.1+cu113
tqdm==4.64.1
transformers==4.22.1
typing_extensions==4.3.0
urllib3==1.26.12
zipp==3.8.1

รันคำสั่งด้านล่างเพื่อติดตั้งไลบรารีใน Requirements.txt ของคุณ

ข้อกำหนดในการติดตั้ง pip.txt

การสร้างแอป

เพื่อให้มั่นใจถึงความเข้าใจที่ชัดเจนของกระบวนการ เราจะร่างแนวทางทีละขั้นตอนที่เราจะปฏิบัติตามในการสร้างแอป

  • ใช้ฟังก์ชัน "generate_image" นำเข้าไลบรารีที่จำเป็นทั้งหมด
  • สร้างส่วนต่อประสานกับผู้ใช้ด้วย Tkinter และ Customtkinter
  • ดาวน์โหลดโมเดล Stable Diffusion จาก Hugging Face
  • ใช้ฟังก์ชัน "generate_image"
  • สร้างปุ่มเพื่อเรียกใช้ฟังก์ชัน "generate_image"

นำเข้าไลบรารีที่จำเป็นทั้งหมด— เราเริ่มต้นด้วยการรวมไลบรารีที่จำเป็นไว้ในโค้ดของเรา ซึ่งจะทำให้แอปของเราสามารถเข้าถึงฟังก์ชันการทำงานของแอปพลิเคชันที่จำเป็นทั้งหมดได้

# Libraries for building GUI 
import tkinter as tk
import customtkinter as ctk 

# Machine Learning libraries 
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline

# Libraries for processing image 
from PIL import ImageTk

# private modules 
from authtoken import auth_token

สร้างส่วนต่อประสานกับผู้ใช้ด้วย Tkinter และ Customtkinter— Tkinter เป็นไลบรารี Python ที่รู้จักกันดีซึ่งสามารถใช้เพื่อสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI) สำหรับแอปพลิเคชัน ผู้ใช้จะมีอินเทอร์เฟซแบบภาพเพื่อเชื่อมต่อกับโมเดลการแพร่กระจายที่เสถียร และดูผลลัพธ์ที่สร้างโดยโมเดล

# Create app user interface
app = tk.Tk()
app.geometry("532x632")
app.title("Text to Image app")
app.configure(bg='black')
ctk.set_appearance_mode("dark") 

# Create input box on the user interface 
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 15), text_color="white", fg_color="black") 
prompt.place(x=10, y=10)

# Create a placeholder to show the generated image
img_placeholder = ctk.CTkLabel(height=512, width=512, text="")
img_placeholder.place(x=10, y=110)

ดาวน์โหลดโมเดลการแพร่กระจายที่เสถียรจากการกอดใบหน้า — ใช้แพลตฟอร์มการกอดใบหน้าเพื่อรับโมเดลการแพร่กระจายที่เสถียร โมเดลนี้จะทำหน้าที่เป็นแกนหลักในการสร้างรูปภาพตามข้อความหรือข้อความแจ้ง

# Download stable diffusion model from hugging face 
modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
stable_diffusion_model = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
stable_diffusion_model.to(device) 

ใช้ฟังก์ชัน "generate_image" — พัฒนาฟังก์ชันที่เรียกว่า "generate_image" ซึ่งจะถูกทริกเกอร์ทุกครั้งที่มีเหตุการณ์การคลิกเกิดขึ้นบนอินเทอร์เฟซผู้ใช้ ฟังก์ชั่นนี้จะส่งข้อความหรือแจ้งไปยังโมเดลการแพร่กระจายที่เสถียรและรับรูปภาพเป็นการตอบกลับ รูปภาพนั้นจะแสดงภายในอินเทอร์เฟซผู้ใช้

# Generate image from text 
def generate_image(): 
    """ This function generate image from a text with stable diffusion"""
    with autocast(device): 
        image = stable_diffusion_model(prompt.get(),guidance_scale=8.5)["sample"][0]
    
    # Save the generated image
    image.save('generatedimage.png')
    
    # Display the generated image on the user interface
    img = ImageTk.PhotoImage(image)
    img_placeholder.configure(image=img) 

สร้างปุ่มเพื่อทริกเกอร์ "ฟังก์ชัน Generate_image" — ติดตั้งปุ่มภายในอินเทอร์เฟซผู้ใช้ที่ผู้ใช้สามารถคลิกเพื่อเริ่มฟังก์ชัน "generate_image" ด้วยความช่วยเหลือของปุ่ม ผู้ใช้จะมีวิธีง่ายๆ ในการสร้างภาพตามข้อความที่ป้อน

trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 15), text_color="black", fg_color="white",
                         command=generate_image) 
trigger.configure(text="Generate")
trigger.place(x=206, y=60) 

app.mainloop()

ดำเนินการแอป

ในการรันโค้ด ให้เรารวมโค้ดที่จำเป็นทั้งหมดไว้ในสคริปต์หลามชื่อ "app.py" สคริปต์นี้จะทำหน้าที่เป็นพื้นที่เก็บข้อมูลกลางสำหรับแอปพลิเคชันของเรา เมื่อเราเขียนโค้ดเสร็จแล้วและบันทึกเป็น "app.py" คุณสามารถเรียกใช้สคริปต์โดยใช้คำสั่งต่อไปนี้ในอินเทอร์เฟซบรรทัดคำสั่งหรือเทอร์มินัลของคุณ

หลาม app.py

การดำเนินการคำสั่งนี้จะเริ่มต้นการทำงานของสคริปต์ python เรียกใช้แอปพลิเคชันของเรา และทำให้ผู้ใช้สามารถโต้ตอบกับแอปของเราได้

# app.py 

# Libraries for building GUI 
import tkinter as tk
import customtkinter as ctk 

# Machine Learning libraries 
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline

# Libraries for processing image 
from PIL import ImageTk

# private modules 
from authtoken import auth_token


# Create app user interface
app = tk.Tk()
app.geometry("532x632")
app.title("Text to Image app")
app.configure(bg='black')
ctk.set_appearance_mode("dark") 

# Create input box on the user interface 
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 15), text_color="white", fg_color="black") 
prompt.place(x=10, y=10)

# Create a placeholder to show the generated image
img_placeholder = ctk.CTkLabel(height=512, width=512, text="")
img_placeholder.place(x=10, y=110)

# Download stable diffusion model from hugging face 
modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
stable_diffusion_model = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
stable_diffusion_model.to(device) 

# Generate image from text 
def generate_image(): 
    """ This function generate image from a text with stable diffusion"""
    with autocast(device): 
        image = stable_diffusion_model(prompt.get(),guidance_scale=8.5)["sample"][0]
    
    # Save the generated image
    image.save('generatedimage.png')
    
    # Display the generated image on the user interface
    img = ImageTk.PhotoImage(image)
    img_placeholder.configure(image=img) 


trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 15), text_color="black", fg_color="white",
                         command=generate_image) 
trigger.configure(text="Generate")
trigger.place(x=206, y=60) 

app.mainloop()

คุณยังสามารถค้นหาโปรเจ็กต์ทั้งหมดได้ใน "GitHub" ของฉัน

บทสรุป

เราได้เรียนรู้กระบวนการสร้างแอปข้อความเป็นรูปภาพโดยใช้ Tkinter สำหรับอินเทอร์เฟซผู้ใช้และโมเดล Stable Diffusion จาก AI ที่มีความเสถียรผ่าน Hugging Face ในโค้ด 30 บรรทัด ตอนนี้คุณสามารถสร้างเครื่องมือสร้างข้อความเป็นรูปภาพโดยใช้ AI ได้แล้ว