1. Giới thiệu
Lần cập nhật gần đây nhất: 12/10/2023
Tạo hình ảnh bằng Imagegen
Google Imagen là một mô hình ngôn ngữ lớn mạnh mẽ của Google, có thể tạo ra hình ảnh chân thực và sáng tạo từ nội dung mô tả bằng văn bản. Imagen trên Vertex AI cho phép người dùng xây dựng các sản phẩm AI thế hệ tiếp theo, giúp biến trí tưởng tượng của người dùng thành những thành phần trực quan chất lượng cao chỉ trong vài giây. Ngoài tính năng Tạo hình ảnh từ văn bản, Gemini còn hỗ trợ tính năng Chỉnh sửa hình ảnh thông qua câu lệnh dạng văn bản, chú thích hình ảnh, Hỏi và đáp về hình ảnh, cũng như Điều chỉnh mô hình hình ảnh dựa trên chủ đề và phong cách.
Tạo câu lệnh
Để tạo hình ảnh bằng Imagen, bạn cần cung cấp nội dung mô tả bằng văn bản về hình ảnh (còn gọi là câu lệnh) để tạo hình ảnh. Tuy nhiên, để tạo ra một hình ảnh chân thực có chất lượng cao, bạn cần có chuyên môn về câu lệnh. Bạn cũng có thể sử dụng câu lệnh tuỳ thuộc vào miền nếu muốn tạo hình ảnh liên quan đến các miền kinh doanh cụ thể như bán lẻ, sản xuất, v.v. Cách dễ dàng hơn để thiết kế câu lệnh là đưa ra một bộ từ khoá cho mô hình Text Bison.
Phương pháp tổng thể như sau:

Giao diện người dùng Gradio
Gradio là một thư viện Python mã nguồn mở cho phép bạn nhanh chóng tạo các thành phần giao diện người dùng dễ sử dụng và có thể tuỳ chỉnh cho mô hình học máy, mọi API hoặc thậm chí là một hàm Python tuỳ ý bằng một vài dòng mã. Bạn có thể tích hợp GUI Gradio ngay vào sổ tay Jupyter hoặc chia sẻ GUI này dưới dạng đường liên kết với bất kỳ ai. Gradio hỗ trợ nhiều loại nội dung nghe nhìn, bao gồm văn bản, hình ảnh, video và âm thanh. Thư viện này cũng cung cấp một số thành phần giao diện người dùng được tạo sẵn, chẳng hạn như trường nhập, nút, thanh trượt và trình đơn thả xuống.
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ triển khai một ứng dụng Gradio có khả năng:
- Tạo câu lệnh văn bản bằng từ khoá hoặc cụm từ. Bạn cũng có thể chỉnh sửa câu lệnh được tạo theo cách thủ công.
- Tạo hình ảnh từ câu lệnh được tạo trên giao diện người dùng.
Kiến thức bạn sẽ học được
- Cách sử dụng phương pháp học không cần dữ liệu và học từ một vài dữ liệu bằng mô hình text-bison theo cách lập trình để tạo câu lệnh cụ thể cho Imagen để tạo hình ảnh.
- Cách tạo hình ảnh bằng mô hình Imagen thông qua API và câu lệnh.
- Cách tạo, triển khai và kiểm thử ứng dụng Gradio từ sổ tay Vertex AI Workbench.
Bạn cần có
- Quyền truy cập vào một dự án trên Google Cloud Platform (GCP), ví dụ: "Cloud-llm-preview4"
- Quyền tạo Vertex AI Workbench
- Đã bật Vertex AI API.
- Yêu cầu về mạng đối với Gradio: URL công khai để truy cập vào phiên bản sổ tay
2. Thiết lập
Tạo sổ ghi chú
- Đăng nhập vào dự án
- Chuyển đến workbench trong trình đơn điều hướng bên trái
- Trong phần "SỔ GHI CHÚ DO NGƯỜI DÙNG QUẢN LÝ", hãy tạo một sổ ghi chú mới bằng các lựa chọn mặc định.
- Nhấp vào "MỞ JUPYTERLAB" sau khi phiên bản được cung cấp.
Lưu ý: Có thể mất vài phút để khởi động sổ tay nếu sổ tay đang ở trạng thái dừng.
Lấy mã nguồn
Chúng tôi đã đặt tệp mã ở đây. Bạn có thể nhập sổ tay này vào môi trường của mình và chạy như bình thường (ngoại trừ việc thay đổi thông tin dự án).
3. Chạy mã
Cài đặt/Nhập các Thư viện và Phần phụ thuộc bắt buộc
- Cài đặt ứng dụng Gradio
- Nhập Vertex AI API cho Text-Bison và tính năng Tạo hình ảnh.
- Nhập tất cả các thư viện bắt buộc khác.
Tạo câu lệnh bằng Text-Bison
Sử dụng hoạt động đầu vào của người dùng có chứa Từ khoá và/hoặc Cụm từ, tức là danh sách từ khoá hoặc cụm từ được phân tách bằng dấu phẩy mà bạn có thể dùng để tạo một câu mô tả hình ảnh cần tạo.
Ví dụ: Nhân vật, Chủ thể, Bối cảnh, Ánh sáng và các nội dung mô tả khác.
Hàm tạo câu lệnh được đưa ra như sau:
def prompt_generation(persona,signal,theme, lighting, quality, extra_desc):
model = TextGenerationModel.from_pretrained("text-bison")
response_few_shot = model.predict(
few_shot_prompt,
**parameters
)
response_single_shot = model.predict(
prompt,
**parameters
)
Câu lệnh dựa trên một vài ví dụ và câu lệnh không dựa trên ví dụ nào
Câu lệnh không có ngữ cảnh là một kỹ thuật tạo văn bản mà mô hình không được cung cấp ngữ cảnh hoặc ví dụ để tạo văn bản. Điều này có thể là một thách thức, vì mô hình phải dựa vào kiến thức của chính mình để tạo ra văn bản mạch lạc và giàu thông tin.
Tuy nhiên, việc đưa ra câu lệnh không cần ví dụ cũng có thể rất sáng tạo, vì mô hình này không bị giới hạn bởi bất kỳ ví dụ nào có sẵn.
Đặt câu lệnh dựa trên một vài ví dụ là một kỹ thuật tạo văn bản, trong đó mô hình được cung cấp một số ít ví dụ để tạo văn bản. Cách này có thể dễ dàng hơn so với việc đưa ra câu lệnh không có ví dụ, vì mô hình có một số hướng dẫn về nội dung cần tạo. Tuy nhiên, việc đặt câu lệnh dựa trên một vài ví dụ cũng có thể hạn chế khả năng của mô hình, vì mô hình có thể chỉ tạo ra văn bản tương tự như các ví dụ mà mô hình được cung cấp.
Dưới đây là mã mẫu cho câu lệnh Few-Shot và Zero-shot.
**# Few Shot Prompt được dùng trong mã**
few_shot_prompt = f"""Bạn là chuyên gia viết câu lệnh cho Mô hình tạo hình ảnh. Sử dụng các cụm từ và từ khoá được cung cấp, hãy nối chúng lại với nhau và thêm một số chi tiết thực tế để tạo ra câu lệnh hợp lý và có ý nghĩa có thể dùng để tạo hình ảnh.
input: people, gardening, house garden, colorful plants, Real, HD image, Photo.
output: A Photo of people gardening in a house garden landscape with few coloured flowering plants. Realistic FULL HD Images, Elegant and natural facial and eye features taken by professional photographer
input: plumber, faucet, kitchen, high quality, natural lighting, Photo
output: A Photo of a plumber fixing a faucet in the kitchen. High quality image with natural indoor lighting.
input: house and garden, halloween, warm lighting, high quality image, Sketch
output: A Sketch of Beautiful House and Garden with Halloween Decorations. Warm lighting, High Quality, 4K photograph taken by professional photographer from front.
input: nice living room, warm lighting,Professional Photographer from far, Photo
output: A photo of a Well designed Living Room. Warm lighting, High Quality, 4K photograph taken by Professional Photographer from far
input: {params_list_str}
output:
"""
# Lời nhắc Zero Shot được dùng trong mã
prompt = f"""Bạn là chuyên gia viết câu lệnh cho Mô hình tạo hình ảnh. Giúp tôi viết một danh sách các câu lệnh có ý nghĩa cho Mô hình tạo hình ảnh, đặc biệt là có chứa các từ: "{params_list_str}". Hãy nhớ thêm những từ này vào câu lệnh và tạo câu lệnh có ý nghĩa."""
Tạo hình ảnh bằng Imagen
Sử dụng hoạt động đầu vào của người dùng và câu lệnh phủ định(không bắt buộc) rồi cung cấp hoạt động đó cho mô hình (imagegeneration@002).
def image_generation_completion(input, negative_prompt):
input_prompt = input
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt=input_prompt,
number_of_images=4, #kept to static value of 4
negative_prompt=negative_prompt
)
Đoạn mã sau đây được đưa vào để tạo hình ảnh từ câu lệnh đầu vào và câu lệnh tiêu cực của người dùng. Mã cuối cùng sử dụng câu lệnh do mô hình text-bison tạo.
from vertexai.preview.vision_models import ImageGenerationModel
def image_generation(input, negative_prompt):
input_prompt = input
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt=input_prompt,
number_of_images=4, #kept to static value of 4.. can be a max value of 8
negative_prompt=negative_prompt
)
images = response.images
return images
user_prompt = "Câu lệnh: Một phụ nữ trẻ đang giới thiệu và bán một cây thông Noel tươi chưa trang trí trong một bó cây. Ánh sáng lạnh, hình ảnh chất lượng cao và chi tiết do nhiếp ảnh gia chuyên nghiệp chụp từ xa."
negative_prompt = "Khuôn mặt bị biến dạng và không hấp dẫn"
generated_images_list = image_generation(user_prompt,negative_prompt)
#show one of the generated image
generated_images_list[0].show()
Đầu ra –

4. Triển khai ứng dụng Gradio
Gradio được dùng cho giao diện người dùng, nơi người dùng có thể nhập từ khoá và tạo câu lệnh có cấu trúc. Người dùng có thể sử dụng trực tiếp các câu lệnh này hoặc chỉnh sửa thêm rồi đưa vào Imagen để tạo hình ảnh theo thông tin đầu vào. Gradio là một thư viện Python có thể dùng để tạo giao diện người dùng cho các mô hình học máy. Đối với ứng dụng này, Khối được dùng để tăng tính linh hoạt và thêm các luồng dữ liệu phức tạp vào ứng dụng này. Các khối cung cấp tính năng quản lý bố cục ứng dụng bằng cách sử dụng Hàng và Cột:
with gr.Blocks() as demo:
#Prompt Generation Part
with gr.Row():
with gr.Column(scale=1):
Persona = gr.Textbox(label="Persona", info = "Customer segment such as Plumber, Electrician etc.")
with gr.Column(scale=1):
Signals = gr.Textbox(label="Signals", info = "Main content of banner such as Faucet, Lamp etc.")
with gr.Column(scale=1):
Theme = gr.Textbox(label="Theme", info = "Context of the banner such as Halloween, Kitchen etc.")
with gr.Row():
with gr.Column(scale=1):
photo_modifiers = gr.Textbox(label="Photography Modifiers", info = "Photography specific modifiers and parameters such as Lighting(Dramatic/Natural/Warm/Cold), Camera Proximity etc.")
with gr.Column(scale=1):
quality_modifiers = gr.Textbox(label="Image Quality Modifier", info = "Quality Modifiers like high-quality, beautiful, stylized. 4K, HDR, By a professional etc")
with gr.Column(scale=1):
other_desc = gr.Textbox(label="Any Other Description", info = "Other Descriptions for Image such as Style (Painting/Photo/Sketch), Bakground/Foreground Context")
with gr.Row():
btn = gr.Button("Submit")
with gr.Row():
returned_prompts = gr.Textbox(label="Result Prompts", interactive = True)
btn.click(fn=prompt_generation, inputs=[Persona, Signals,Theme, photo_modifiers, quality_modifiers, other_desc], outputs = returned_prompts)
Để xử lý hoạt động đầu vào và đầu ra của người dùng, Gradio cung cấp nhiều thành phần như Hình ảnh, Video, Thanh trượt, Trình đơn thả xuống, Hộp văn bản, Nút chọn và các lựa chọn khác. Các thành phần này giúp nhà phát triển linh hoạt và kiểm soát cách chấp nhận dữ liệu đầu vào từ người dùng và cung cấp dữ liệu đó cho Test-bison, imagen hoặc bất kỳ mô hình học máy nào khác.
Đối với dự án này, ứng dụng được tạo bằng Blocks để tăng tính linh hoạt và độ phức tạp
dữ liệu sẽ truyền đến ứng dụng. Ngoài các khối, nhiều thành phần Gradio là
được dùng, bao gồm:
- Hàng, Cột cho bố cục phù hợp.
- Nút, Hộp văn bản, Trình đơn thả xuống và Thanh trượt để đạt được chức năng cần thiết và dễ sử dụng
- Thành phần Hình ảnh để hiển thị kết quả.
- Các đối tượng hỗ trợ khác như EventData, update để hỗ trợ các thay đổi linh hoạt đối với giao diện người dùng.
Dưới đây là một đoạn mã dùng để tạo hình ảnh từ câu lệnh đầu vào và câu lệnh tiêu cực:
#Phần Tạo hình ảnh
with gr.Row():
with gr.Column(scale=1):
image_prompt = gr.Textbox(label="Image Generation Prompt")
with gr.Accordion("Advanced options", open=False): #Let's hide the advanced options!
with gr.Row():
negative_prompt = gr.Textbox(label="Negative prompt", info = "Specify What not to Include in Image ex. Bad Quality Image")
with gr.Row():
with gr.Column(scale=1):
img_btn = gr.Button("Generate Images")
with gr.Row():
with gr.Column():
output_image_1 = gr.Image(label = "Result Image 1", visible = False)
with gr.Column():
output_image_2 = gr.Image(label = "Result Image 2", visible = False)
with gr.Row():
with gr.Column():
output_image_3 = gr.Image(label = "Result Image 3", visible = False)
with gr.Column():
output_image_4 = gr.Image(label = "Result Image 4", visible = False)
returned_prompts.select(populate_image_prompt, inputs = [returned_prompts], outputs = image_prompt)
img_btn.click(fn=image_generation_completion, inputs=[image_prompt,negative_prompt], outputs = [output_image_1,output_image_2,output_image_3,output_image_4])
Để chạy và kiểm thử ứng dụng Gradio, bạn chỉ cần nhập một câu lệnh bằng văn bản rồi nhấp vào nút Tạo. Imagen sẽ tạo hình ảnh dựa trên câu lệnh của bạn. Bạn có thể thử nhiều câu lệnh để xem Imagen có thể tạo ra những loại hình ảnh nào.
Dưới đây là ảnh chụp màn hình của tính năng Tạo câu lệnh trên Ứng dụng Gradio.

Dưới đây là ảnh chụp màn hình của tính năng Tạo hình ảnh trên Ứng dụng Gradio.

Một số ví dụ –
Ví dụ 1 –
[Hình ảnh bên trái] Câu lệnh (Sử dụng từ khoá đơn giản làm câu lệnh) : Hai người bạn đang chèo thuyền.
[Hình ảnh bên phải] Câu lệnh (Sử dụng câu lệnh do Text-Bison tạo) : Ảnh chụp 2 người đàn ông trẻ tuổi đang câu cá trên một chiếc thuyền, xung quanh là những cây cao trong rừng. Những người đàn ông đang mặc áo sơ mi và đứng trên thuyền. Ánh sáng tự nhiên, chất lượng cao, ảnh 4K do Nhiếp ảnh gia chuyên nghiệp chụp.

Ví dụ 2 –
[Hình ảnh bên trái] Câu lệnh ((Sử dụng các từ khoá đơn giản làm câu lệnh)) : Cây Giáng sinh
[Hình ảnh bên phải] Câu lệnh (Sử dụng câu lệnh do Text-Bison tạo) : Cây Giáng sinh trong một căn phòng có đèn và đồ nội thất. Cây được trang trí bằng đèn và đồ trang trí. Chiếc ghế được đặt gần cửa sổ và có một bức tường ở phía sau. Ánh sáng ấm áp, chất lượng cao, ảnh HDR do nhiếp ảnh gia chuyên nghiệp chụp từ xa.

5. Dọn dẹp
Để dọn dẹp tài nguyên,
- Dừng ứng dụng gradio.
- Dừng/Xoá sổ tay Workbench.
6. Xin chúc mừng
Xin chúc mừng, bạn đã triển khai thành công một ứng dụng Gradio để tạo câu lệnh và hình ảnh bằng Google Text-Bison API và Imagen API.