Chuyển đến nội dung chính

Imagen 3: Hướng dẫn kèm ví dụ trong Gemini API

Tìm hiểu cách tạo hình ảnh bằng API Imagen 3 của Google với Python, bao gồm thiết lập môi trường và điều chỉnh các tùy chọn như tỉ lệ khung hình và bộ lọc an toàn.
· 12 phút đọc

Khám phá cùng AI

Imagen 3 là một mô hình sinh ảnh từ văn bản có thể dựng chính xác các cảnh chi tiết ở nhiều phong cách khác nhau và thậm chí chèn văn bản vào trong ảnh, phù hợp cho các ứng dụng như quảng cáo và tạo nội dung truyền thông. 

Chúng ta có thể sử dụng Imagen 3 qua giao diện Vertex AI Studio hoặc tích hợp trực tiếp vào ứng dụng thông qua API.

Trong hướng dẫn này, tôi sẽ giải thích cách tạo ảnh với Imagen 3 bằng Google Generating API cùng Python. Tôi sẽ dẫn bạn qua các ví dụ thực tế cho thấy cách thiết lập môi trường, viết mã cần thiết và tích hợp công nghệ này vào dự án của bạn. Dù bạn muốn nâng cấp ứng dụng với hình ảnh sinh động hay chỉ đơn giản là tò mò, bài viết này sẽ cung cấp một lộ trình rõ ràng để bạn hiểu và sử dụng Imagen 3 một cách lập trình.

Thiết lập Google Generative AI API

Để bắt đầu với Imagen 3 trong Python, chúng ta cần thực hiện một vài bước thiết yếu. Trước hết, hãy tạo một dự án Google Cloud. Khi dự án sẵn sàng, chúng ta cần tạo một khóa API. Khóa này sẽ cho phép mã Python tương tác với dịch vụ Imagen 3.

Tạo dự án Google Cloud

Tạo dự án Google Cloud là bước đầu tiên để sử dụng AI API của Google. Cùng đi qua quy trình này:

  1. Truy cập bảng điều khiển Google Cloud: Bắt đầu bằng cách điều hướng tới Google Cloud Console. Bạn cần đăng nhập bằng tài khoản Google.
  2. Chọn hoặc tạo dự án mới: Trong console, tìm menu thả xuống dự án trên thanh điều hướng trên cùng. Nhấp vào đó để chọn một dự án hiện có hoặc tạo mới. Chúng ta chọn "New Project" để tiếp tục.
  3. Cung cấp thông tin dự án: Một biểu mẫu đơn giản sẽ xuất hiện yêu cầu thông tin cơ bản. Bạn có thể chọn bất kỳ tên nào cho dự án, nhưng nên chọn tên mô tả. Có thể đổi sau nếu cần. Ở đây dùng Imagen-tutorial. Phần tổ chức có thể để trống.

Thiết lập dự án Google Cloud cho imagen 3

Tạo khóa API

Bây giờ dự án Google Cloud đã được tạo, chúng ta có thể tạo khóa API bằng cách điều hướng đến trang API key trong Google AI Studio.

Để tạo khóa, nhấp nút "Create API key":

Tạo khóa API trong Google Cloud console

Trong cửa sổ bật lên, nhập tên dự án đã tạo ở trên, chọn nó và nhấp "Create API key in existing project":

Tạo khóa API cho một dự án cụ thể trong Google Cloud

Sao chép khóa và tạo một tệp tên .env đặt trong cùng thư mục nơi chúng ta sẽ viết script Python. Nội dung tệp .env sẽ là:

GEMINI_API_KEY=<paste_your_key_here>

Tài khoản thanh toán

Nếu chúng ta thử sử dụng khóa API ngay bây giờ, sẽ gặp lỗi nói rằng "Imagen API is only accessible to billed users at this time." Điều này xảy ra vì API không miễn phí và chúng ta cần liên kết tài khoản thanh toán với dự án trước khi có thể sử dụng.

Tại thời điểm viết bài, giá tạo một ảnh bằng Imagen 3 là 0,03 USD. Xem trang báo giá của họ để biết thêm thông tin.

Để thêm tài khoản thanh toán, nhấp nút "Set up Billing" cạnh khóa API trong Google AI Studio.

thiết lập tài khoản thanh toán trong google cloud

Hành động này sẽ chuyển hướng chúng ta đến trang web Google Cloud, nơi bạn có thể chọn một tài khoản thanh toán hiện có bằng cách nhấp "Link a billing account" hoặc tạo tài khoản mới bằng cách nhấp "Manage billing accounts."

Tạo tài khoản thanh toán trong các dự án google cloud

Giả sử chúng ta chưa có, vậy hãy chọn "Manage billing accounts." Ở góc trên bên trái trang có nút "Create account". Để tạo tài khoản, cần điền thông tin cá nhân và thẻ tín dụng để xử lý thanh toán.

Tạo ảnh với Imagen 3 bằng Python

Thiết lập môi trường với Anaconda

Trong hướng dẫn này, chúng ta dùng Anaconda, một nền tảng phổ biến giúp đơn giản hóa quản lý gói và thiết lập dự án, giúp chạy script Python dễ dàng hơn.

Bạn có thể cài đặt Anaconda từ trang web chính thức của họ.

Để thiết lập môi trường Anaconda, mở một terminal và:

  • Tạo môi trường: conda create -n imagen python=3.9. Lệnh này tạo môi trường tên imagen dùng Python phiên bản 3.9.
  • Kích hoạt môi trường: conda activate imagen.
  • Cài đặt gói Google generative AI: pip install -q -U google-genai.
  • Cài đặt gói xử lý ảnh để xử lý ảnh đã tạo: pip install pillow.
  • Cài đặt gói để tải khóa API: pip install python-dotenv

Chúng ta cũng có thể cài đặt các gói trực tiếp mà không dùng Anaconda, nhưng có rủi ro một số gói hiện có có thể xung đột với gói mới hoặc bản cài Python của bạn dùng phiên bản Python khác. Dùng Anaconda giúp tránh các vấn đề tiềm ẩn này.

Tạo bức ảnh đầu tiên

Giờ chúng ta đã sẵn sàng sử dụng Imagen 3. Tạo một script Python mới, ví dụ, gen_image.py, trong cùng thư mục với tệp .env.

Đầu tiên, import các gói cần thiết:

# Google generative AI:
from google import genai
from google.genai import types

# Packages to process the generated image:
from PIL import Image
from io import BytesIO

# Packages to load the .env file:
import os
from dotenv import load_dotenv

Tiếp theo, tải khóa API từ tệp .env:

load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")

Sau đó, khởi tạo client Google generative AI. Đây là đối tượng cho phép chúng ta giao tiếp với Google API:

client = genai.Client(api_key=api_key)

Để tạo ảnh, dùng hàm client.models.generate_images():

prompt="""
A dog surfing at the beach
"""
response = client.models.generate_images(
    model="imagen-3.0-generate-002",
    prompt=prompt,
    config=types.GenerateImagesConfig(
        number_of_images=1,
    )
)

Cuối cùng, hiển thị ảnh được tạo bằng đối tượng Image:

for generated_image in response.generated_images:
  image = Image.open(BytesIO(generated_image.image.image_bytes))
  image.show()

Đây là kết quả:

Tạo ảnh đầu tiên với Imagen 3

Sinh văn bản

Một trong những điểm thú vị của Imagen 3 so với các mô hình văn bản–thành–ảnh khác là khả năng tạo văn bản. Hãy thử yêu cầu mô hình tạo chữ “Tea” bằng lá trà tươi:

prompt="""
Word "tea" made from fresh tea leaves, white background
"""
response = client.models.generate_images(
    model="imagen-3.0-generate-002",
    prompt=prompt,
)

Kết quả như sau:

Tạo văn bản với Imagen 3

Tùy chọn tạo ảnh với Imagen 3

Các tùy chọn tạo ảnh được cung cấp qua tham số types.GenerateImagesConfig. Trong ví dụ trên, chúng ta chỉ chỉ định số lượng ảnh cần tạo:

config=types.GenerateImagesConfig(
    number_of_images=1,
)

Trong phần này, chúng ta khám phá các tùy chọn khác mà API Imagen 3 cung cấp. Xem tài liệu chính thức để biết thêm thông tin.

Tạo nhiều ảnh

Chúng ta có thể dùng tham số number_of_images để tạo nhiều ảnh với một prompt. Mặc định, bốn ảnh sẽ được tạo.

Hãy thử tạo hai ảnh cho một truyện tranh.

prompt="""
Single comic book panel of two people overlooking a destroyed city. 
A speech bubble points from one of them and says: I guess this is the end.
"""
response = client.models.generate_images(
    model="imagen-3.0-generate-002",
    prompt=prompt,
    config=types.GenerateImagesConfig(
        number_of_images=2,
    )
)

Đây là kết quả:

Tạo nhiều ảnh cho truyện tranh với Imagen 3

Đây là một ví dụ khác về việc tạo văn bản trong ảnh. Dù ảnh bên trái có thêm vài chữ không mong muốn, nhờ khả năng tạo nhiều ảnh, chúng ta có thể tăng cơ hội nhận được kết quả như ý. Ảnh bên phải gần như đáp ứng hoàn toàn prompt của chúng ta.

Kiểm soát tỉ lệ khung hình

Mặc định, ảnh được tạo là hình vuông với tỉ lệ 1:1. Mô hình hỗ trợ các tỉ lệ sau: 1:1, 3:4, 4:3, 9:16 và 16:9.

Hãy tạo một ảnh 9:16 để dùng làm hình nền điện thoại:

prompt="""
A drone shot of a river flowing between mountains with a stormy sky.
"""
response = client.models.generate_images(
    model="imagen-3.0-generate-002",
    prompt=prompt,
    config=types.GenerateImagesConfig(
        aspect_ratio="9:16",
    )
)

Đây là kết quả:

Tạo ảnh tỉ lệ 9:16 bằng Imagen 3

Bộ lọc mức độ an toàn

Tài liệu cho biết chúng ta có thể dùng safety_filter_level để chỉ định mức lọc ảnh. Mỗi ảnh được tạo nhận một điểm xác suất đo khả năng ảnh không an toàn (ví dụ, nội dung không phù hợp). 

Thiết lập bộ lọc an toàn rất quan trọng vì giúp đảm bảo nội dung tạo ra phù hợp và đúng với sở thích người dùng, qua đó duy trì môi trường an toàn, tôn trọng cho nhiều ứng dụng.

Tài liệu nêu rằng có ba mức hỗ trợ:

  • BLOCK_LOW_AND_ABOVE: Chặn ảnh ngay cả khi điểm xác suất thấp.
  • BLOCK_MEDIUM_AND_ABOVE : Chỉ chặn ảnh có điểm xác suất trung bình và cao.
  • BLOCK_ONLY_HIGH : Chỉ chặn ảnh có điểm xác suất cao

Tuy nhiên, sau khi thử nghiệm, hiện API chỉ hỗ trợ tùy chọn BLOCK_LOW_AND_ABOVE. Cung cấp giá trị khác sẽ dẫn tới lỗi.

Tạo hình người

Chúng ta có thể kiểm soát việc mô hình có được phép tạo hình người hay không bằng tùy chọn person_generation. Có hai lựa chọn:

  • DONT_ALLOW: Ảnh có người sẽ bị chặn.
  • ALLOW_ADULT: Cho phép tạo ảnh có người (chỉ người lớn).

Mặc định là cho phép tạo hình người. Ví dụ, nếu đặt tùy chọn không cho phép và thử tạo ảnh về ai đó đang nấu ăn, chúng ta sẽ không nhận được ảnh nào.

prompt="""
A person cooking.
"""
response = client.models.generate_images(
    model="imagen-3.0-generate-002",
    prompt=prompt,
    config=types.GenerateImagesConfig(
        person_generation="DONT_ALLOW",
    )
)
print(response.generated_images)

Đây là đầu ra:

None

Viết prompt hay cho Imagen 3

Tài liệu chính thức cung cấp hướng dẫn prompt toàn diện cho Imagen 3, nên tôi sẽ không lặp lại ở đây. Dưới đây là các ý chính để viết prompt tốt:

  • Cơ bản về viết prompt:
    • Chủ thể: Tập trung vào đối tượng, con người, hoặc cảnh chính bạn muốn mô tả.
    • Bối cảnh và nền: Mô tả bối cảnh hoặc môi trường nơi đặt chủ thể.
    • Phong cách: Chỉ định phong cách nghệ thuật hoặc nhiếp ảnh mong muốn (ví dụ: phác thảo, hội họa, ảnh chụp).
  • Dùng ngôn ngữ miêu tả: Dùng tính từ chi tiết và ngữ cảnh để làm rõ kết quả mong muốn.
  • Tham chiếu phong cách cụ thể: Dùng tên nghệ sĩ nổi tiếng hoặc trào lưu nghệ thuật để định hướng thẩm mỹ.
  • Văn bản trong ảnh: Giới hạn văn bản ở 25 ký tự trở xuống và dùng cụm rõ ràng để cung cấp thông tin bổ sung.
  • Tham số hóa prompt: Nếu cần tạo nhiều ảnh cùng phong cách, nên tạo mẫu prompt có thể tái sử dụng và chỉ truyền phần thay đổi làm đầu vào.
  • Nhiếp ảnh: Chỉ định thiết lập máy ảnh, loại ống kính và ánh sáng để ảnh hưởng đến kết quả.
  • Nghệ thuật: Dùng các mô tả như "a painting of..." hoặc kỹ thuật cụ thể như "watercolor painting of...".
  • Bộ bổ trợ chất lượng ảnh: Dùng từ khóa như "high-quality" hoặc "4K" để cải thiện chất lượng đầu ra.
  • Ảnh chân thực: Bao gồm chi tiết kỹ thuật như loại ống kính và tiêu cự để tăng tính chân thực.

Chỉnh sửa và tùy biến ảnh

Imagen 3 cũng có khả năng chỉnh sửa và tùy biến ảnh. Đáng tiếc là các tính năng này vẫn đang bị khóa và chỉ mở cho một số người dùng nhất định.

Ví dụ, tính năng tùy biến cho phép chúng ta tùy biến một ảnh tham chiếu từ prompt. Trong ví dụ, một bức ảnh người phụ nữ được đưa vào, và prompt chỉnh sửa ảnh đó thành ảnh cùng người đó đang cầm cam.

Ví dụ tùy biến ảnh trong imagen 3

Thông tin chi tiết về các tính năng này và biểu mẫu yêu cầu truy cập có thể tìm thấy trên trang web của họ.

Kết luận

Trong hướng dẫn này, chúng ta đã học cách dùng Imagen 3 để tạo ảnh bằng Python và Google's Generative API. Nhìn chung, tôi hài lòng với kết quả nhận được khi thử nghiệm API. Tôi thấy kết quả có chất lượng cao và ít tạo tác AI hơn, khiến chúng khó phân biệt với ảnh thật.

Khả năng làm việc với văn bản trong ảnh hữu ích cho xây dựng thương hiệu và marketing. Tổng thể, tôi thấy mô hình này hoạt động tốt. Tôi chỉ ước tất cả tính năng của nó đều mở vì tôi nghĩ chỉnh sửa ảnh còn hữu ích hơn cả tạo ảnh.

François Aubry

Tác giả

François Aubry

Kỹ sư full-stack & nhà sáng lập tại CheapGPT. Giảng dạy luôn là niềm đam mê của tôi. Từ những ngày còn là sinh viên, tôi đã háo hức tìm kiếm cơ hội kèm cặp và hỗ trợ các bạn học khác. Niềm đam mê đó đã thôi thúc tôi theo học tiến sĩ, nơi tôi cũng đảm nhiệm vai trò trợ giảng để hỗ trợ con đường học thuật của mình. Trong những năm ấy, tôi tìm thấy sự mãn nguyện lớn lao trong môi trường lớp học truyền thống, xây dựng kết nối và thúc đẩy việc học tập. Tuy nhiên, với sự ra đời của các nền tảng học trực tuyến, tôi nhận ra tiềm năng thay đổi của giáo dục số. Thực tế, tôi đã trực tiếp tham gia phát triển một nền tảng như vậy tại trường đại học của chúng tôi. Tôi tận tâm kết hợp các nguyên tắc giảng dạy truyền thống với những phương pháp số đổi mới. Đam mê của tôi là tạo ra các khóa học không chỉ hấp dẫn và giàu thông tin mà còn dễ tiếp cận với người học trong thời đại số này.

Chủ đề

Liên quan