Tạo Hình Ảnh Farsi với Gradio và Pillow
Trong quá trình phát triển một dự án cá nhân, tôi cần xây dựng một script chuyển đổi văn bản Farsi (Ba Tư) thành hình ảnh. Để làm cho quá trình này dễ dàng hơn và thú vị hơn, tôi đã chọn framework Gradio tuyệt vời để xây dựng một giao diện tương tác đơn giản.
Gradio là gì?
Gradio là một thư viện Python mã nguồn mở phổ biến, giúp dễ dàng tạo ra các giao diện web tương tác cho các mô hình machine learning, APIs hoặc thậm chí là các hàm Python đơn giản. Nó rất được yêu thích bởi các nhà khoa học dữ liệu và kỹ sư ML, những người muốn nhanh chóng chia sẻ công việc của mình mà không cần viết HTML, CSS hoặc JavaScript.
Gradio cũng có một tùy chọn serverless mới, Gradio-Lite, rất tuyệt vời cho các bản demo nhanh, nhưng tiếc là không phù hợp cho dự án này.
Cài đặt Gradio
Tôi thích sử dụng uv làm trình quản lý gói của mình vì nó cực kỳ nhanh chóng (cảm ơn Rust dưới nắp):
uv add gradio
Cài đặt libraqm
Văn bản Farsi sử dụng một hệ thống chữ viết phức tạp, trong đó hình dạng của mỗi ký tự phụ thuộc vào vị trí của nó trong từ. Để hiển thị chính xác, chúng ta cần thư viện libraqm, sẽ xử lý việc định hình văn bản.
Cách cài đặt libraqm
Trên macOS
Sử dụng Homebrew:
brew install libraqm
Nếu bạn đang sử dụng fish shell, bạn cũng cần cập nhật PKG_CONFIG_PATH:
set -gx PKG_CONFIG_PATH "(brew --prefix libraqm)/lib/pkgconfig:$PKG_CONFIG_PATH"
Trên Windows
Theo dõi câu trả lời trên StackOverflow để có hướng dẫn cài đặt.
Cài đặt Pillow
Sau khi cài đặt libraqm, bạn cần cài đặt Pillow với:
uv pip install Pillow --no-binary=Pillow
Điều này đảm bảo rằng Pillow được biên dịch với hỗ trợ libraqm.
Chuyển đổi văn bản Farsi thành hình ảnh
Bây giờ mọi thứ đã được cài đặt, chúng ta có thể viết một script đơn giản để nhận:
- Một tệp font
- Văn bản Farsi của bạn
- Kích thước hình ảnh
Dưới đây là script:
python
from PIL import Image, ImageDraw, ImageFont
import numpy as np
# Thay đổi đường dẫn font và văn bản của bạn tại đây
font_path = 'path/to/font.ttf'
vietnamese_text = 'سلام دنیا' # Văn bản Farsi
width, height = 800, 400 # Kích thước hình ảnh
# Tạo ảnh trống
image = Image.new('RGB', (width, height), (255, 255, 255))
draw = ImageDraw.Draw(image)
# Tải font
font = ImageFont.truetype(font_path, 32)
# Vẽ văn bản
text_width, text_height = draw.textsize(vietnamese_text, font=font)
text_x = (width - text_width) / 2
text_y = (height - text_height) / 2
draw.text((text_x, text_y), vietnamese_text, font=font, fill=(0, 0, 0))
# Lưu ảnh
image.save('output.png')
Chạy script này, sau đó mở ứng dụng của bạn tại:
http://localhost:8007/
Kết quả
Kết quả sẽ là một hình ảnh hiển thị văn bản Farsi một cách chính xác 🎉
Thực tiễn tốt nhất
- Chọn font phù hợp: Đảm bảo rằng font bạn chọn hỗ trợ đầy đủ các ký tự Farsi.
- Kiểm tra kích thước hình ảnh: Kích thước nên phù hợp với nội dung văn bản để tránh bị cắt.
Những cạm bẫy thường gặp
- Lỗi khi không cài đặt libraqm: Nếu không cài đặt libraqm đúng cách, văn bản có thể không hiển thị chính xác.
- Font không tương thích: Một số font có thể không hỗ trợ các ký tự Farsi, dẫn đến việc văn bản không hiển thị.
Mẹo hiệu suất
- Tối ưu hóa kích thước hình ảnh: Sử dụng các công cụ nén hình ảnh để giảm dung lượng tệp mà không làm giảm chất lượng.
- Sử dụng caching: Nếu bạn thường xuyên tạo hình ảnh giống nhau, hãy xem xét việc lưu trữ chúng để cải thiện tốc độ.
Giải quyết sự cố
Nếu bạn gặp lỗi trong quá trình cài đặt hoặc chạy script, hãy kiểm tra:
- Các thông báo lỗi trong terminal để có thông tin chi tiết.
- Đường dẫn font có chính xác không.
- Thư viện có được cài đặt đúng cách chưa.
Kết luận
Việc tạo hình ảnh từ văn bản Farsi không chỉ đơn giản mà còn thú vị với sự trợ giúp của Gradio và Pillow. Nếu bạn thấy bài viết này hữu ích hoặc có bất kỳ suy nghĩ nào, đừng ngần ngại chia sẻ với tôi nhé! Hãy bắt đầu dự án của bạn ngay hôm nay và khám phá thêm nhiều khả năng!
Câu hỏi thường gặp (FAQ)
-
Tôi có thể sử dụng Gradio cho các ngôn ngữ khác không?
Có, Gradio hỗ trợ nhiều ngôn ngữ và có thể được sử dụng cho bất kỳ văn bản nào. -
Làm thế nào để cài đặt libraqm trên Ubuntu?
Bạn có thể sử dụng lệnhsudo apt install libraqm-devđể cài đặt libraqm. -
Có thể tạo hình ảnh động từ văn bản không?
Có, nhưng sẽ cần thêm các thư viện và kỹ thuật phức tạp hơn.