---
title: "Giữ chữ"
url: https://phatdev.net/docs/pixgamma/giu-chu
lang: vi
updated: 2026-10-22
alternate:
  en: https://phatdev.net/en/docs/pixgamma/giu-chu
markdown: https://phatdev.net/docs/pixgamma/giu-chu.md
---

# Giữ chữ

Thuộc bộ tài liệu: [PixGamma](https://phatdev.net/docs/pixgamma.md)

> PixGamma dò, đo và dựng lại chữ trên phím, nhãn, banner, kể cả tiếng Việt; số đo và giới hạn.

Chữ là chỗ AI phóng ảnh hay sai nhất: nét bị cong, chữ nhỏ bị vẽ thành chữ khác, dấu tiếng Việt rơi mất. PixGamma xử lý chữ bằng một bước riêng.

<div style="margin:1.6em 0"><figure style="margin:0"><a href="https://phatdev.net/uploads/p/pixgamma/compare-thinkpad-vi-light-3840.webp" target="_blank" rel="noopener" class="pd-th-light" style="display:block;border:0" aria-label="Ảnh sản phẩm: bàn phím ThinkPad đèn nền từ 480 px lên 4x, chữ trên phím đúng từng ký tự (4K)"><img src="https://phatdev.net/uploads/p/pixgamma/compare-thinkpad-vi-light-1920.webp" srcset="/uploads/p/pixgamma/compare-thinkpad-vi-light-960.webp 960w, /uploads/p/pixgamma/compare-thinkpad-vi-light-1920.webp 1920w, /uploads/p/pixgamma/compare-thinkpad-vi-light-3840.webp 3840w" sizes="(max-width: 900px) 100vw, 760px" width="3840" height="2160" alt="Ảnh sản phẩm: bàn phím ThinkPad đèn nền từ 480 px lên 4x, chữ trên phím đúng từng ký tự" loading="lazy" decoding="async" style="width:100%;height:auto;display:block;border:1px solid var(--line);border-radius:12px"></a><a href="https://phatdev.net/uploads/p/pixgamma/compare-thinkpad-vi-dark-3840.webp" target="_blank" rel="noopener" class="pd-th-dark" style="display:block;border:0" aria-label="Ảnh sản phẩm: bàn phím ThinkPad đèn nền từ 480 px lên 4x, chữ trên phím đúng từng ký tự (4K)"><img src="https://phatdev.net/uploads/p/pixgamma/compare-thinkpad-vi-dark-1920.webp" srcset="/uploads/p/pixgamma/compare-thinkpad-vi-dark-960.webp 960w, /uploads/p/pixgamma/compare-thinkpad-vi-dark-1920.webp 1920w, /uploads/p/pixgamma/compare-thinkpad-vi-dark-3840.webp 3840w" sizes="(max-width: 900px) 100vw, 760px" width="3840" height="2160" alt="Ảnh sản phẩm: bàn phím ThinkPad đèn nền từ 480 px lên 4x, chữ trên phím đúng từng ký tự" loading="lazy" decoding="async" style="width:100%;height:auto;display:block;border:1px solid var(--line);border-radius:12px"></a><figcaption style="margin-top:8px;font-size:13px;line-height:1.5;color:var(--muted);text-align:center">Ảnh sản phẩm: bàn phím ThinkPad đèn nền từ 480 px lên 4x, chữ trên phím đúng từng ký tự</figcaption></figure></div>

<div style="margin:1.6em 0"><figure style="margin:0"><a href="https://phatdev.net/uploads/p/pixgamma/compare-ui-vi-light-3840.webp" target="_blank" rel="noopener" class="pd-th-light" style="display:block;border:0" aria-label="Ảnh chụp màn hình: giao diện 720 px phóng 2x, chữ rõ, giữ dấu tiếng Việt (4K)"><img src="https://phatdev.net/uploads/p/pixgamma/compare-ui-vi-light-1920.webp" srcset="/uploads/p/pixgamma/compare-ui-vi-light-960.webp 960w, /uploads/p/pixgamma/compare-ui-vi-light-1920.webp 1920w, /uploads/p/pixgamma/compare-ui-vi-light-3840.webp 3840w" sizes="(max-width: 900px) 100vw, 760px" width="3840" height="2160" alt="Ảnh chụp màn hình: giao diện 720 px phóng 2x, chữ rõ, giữ dấu tiếng Việt" loading="lazy" decoding="async" style="width:100%;height:auto;display:block;border:1px solid var(--line);border-radius:12px"></a><a href="https://phatdev.net/uploads/p/pixgamma/compare-ui-vi-dark-3840.webp" target="_blank" rel="noopener" class="pd-th-dark" style="display:block;border:0" aria-label="Ảnh chụp màn hình: giao diện 720 px phóng 2x, chữ rõ, giữ dấu tiếng Việt (4K)"><img src="https://phatdev.net/uploads/p/pixgamma/compare-ui-vi-dark-1920.webp" srcset="/uploads/p/pixgamma/compare-ui-vi-dark-960.webp 960w, /uploads/p/pixgamma/compare-ui-vi-dark-1920.webp 1920w, /uploads/p/pixgamma/compare-ui-vi-dark-3840.webp 3840w" sizes="(max-width: 900px) 100vw, 760px" width="3840" height="2160" alt="Ảnh chụp màn hình: giao diện 720 px phóng 2x, chữ rõ, giữ dấu tiếng Việt" loading="lazy" decoding="async" style="width:100%;height:auto;display:block;border:1px solid var(--line);border-radius:12px"></a><figcaption style="margin-top:8px;font-size:13px;line-height:1.5;color:var(--muted);text-align:center">Ảnh chụp màn hình: giao diện 720 px phóng 2x, chữ rõ, giữ dấu tiếng Việt</figcaption></figure></div>

## Cách làm

1. **Dò chữ.** Apple Vision nhận diện chính xác với `vi-VT` và `en-US`, chạy trên ảnh gốc, trên ảnh phóng 2x và trên ảnh đã phóng để bắt được cả chữ nhỏ trên phím. Chữ đọc được ghi vào báo cáo (`text` trong JSON).
2. **Nối dòng.** Vision hay dừng sớm vài chữ ở dòng chữ nhỏ; vùng chữ được nối dài theo mực chữ tới hết dòng.
3. **Đo cỡ từ điểm ảnh.** Hộp chữ của Vision lệch 1–2 px ở chữ nhỏ, nên PixGamma đo **độ trải dọc của mực chữ** từng dòng ngay trên điểm ảnh.
4. **Dựng lại.** Vùng chữ chạy lại bằng **PixGamma Photo v1** (đã train cùng ô chữ), lấy trung bình 2 lượt (giữ nguyên và xoay 180°) để nét thẳng, rồi trộn mềm vào ảnh.
5. **Giữ màu chữ.** Bước giữ màu gốc bỏ qua vùng chữ, nên chữ không bị phủ lại quầng nhoè từ ảnh nguồn.

## Kết quả đo

Bộ chấm `eval_text_pipeline.py` dựng banner chữ Việt và Anh bằng nhiều font, thu nhỏ 4 lần rồi chạy cả quy trình; mỗi dòng được cắt riêng rồi đọc bằng OCR (Vision đọc một dòng khác đi tùy dòng bên cạnh, nên chấm cả banner sẽ nhiễu).

| Cách dựng vùng chữ | OCR đúng | PSNR | Độ nét |
|---|---|---|---|
| Không giữ chữ | 90,3% | 29,1 dB | 0,47 |
| Model Text v3 riêng (0.2.0) | 89,2% | 29,2 dB | 0,58 |
| **PixGamma Photo v1, 2 lượt (0.2.1)** | **91,1%** | **30,5 dB** | **0,69** |

Trên ảnh bàn phím MacBook thật thu nhỏ 4 lần: PSNR cả ảnh tăng từ 23,8 lên 25,1 dB, quanh chữ Y từ 19,5 lên 21,9 dB.

## Chữ quá nhỏ

Ở chữ hoa khoảng 3,6 px trong ảnh gốc, dấu thanh tiếng Việt chưa tới 1 điểm ảnh. Model cũ vẽ ra chữ sắc nhưng sai, nên bản 0.2.0 chuyển các dòng này sang bản phóng mềm. PixGamma Photo v1 đọc đúng hơn cả bản phóng mềm ở cỡ này (76,1% so với 72,3%), nên từ 0.2.1 bước làm mềm chỉ còn áp dụng khi dùng model chữ cũ.

PixGamma từng thử **dựng lại chữ nhỏ bằng font** theo cách đọc của Vision và chỉ nhận khi khớp điểm ảnh, nhưng bỏ vì cách đọc sai khớp ảnh gần bằng cách đọc đúng.

> **Giới hạn đã biết:** chữ mà Vision không dò ra được (ví dụ chữ thân bài dưới khoảng 4 px trên tấm biển trong ảnh bị thu nhỏ mạnh) thì không được giữ, và model phóng nào cũng có thể vẽ thành nét giống chữ. Với ảnh như vậy nên phóng 2x thay vì 4x, hoặc dùng High Fidelity.

## Tắt giữ chữ

Trong app tắt ở bảng tinh chỉnh; CLI dùng `--no-text-protect`; API dùng `text=0`. Biến `PIXGAMMA_TEXT_TTA=1|2|4|8` chọn số lượt lật/xoay, `PIXGAMMA_TEXT_MODEL` chọn model khác cho vùng chữ (để chấm điểm).
