Bài 05 · Đọc một con số
Đến giờ màn hình chỉ trả lời câu hỏi có/không. Bây giờ nó bắt đầu trả lời bao nhiêu.
Bài toán
Dashboard hiển thị Gold: 12480. Hãy quyết định: nó trên 10.000 hay không — và định tuyến flow tương ứng.
Việc này cần ba năng lực mới: đọc chữ trên màn hình, đọc nó thành số thay vì thành ký tự, và rẽ nhánh theo điều kiện thay vì theo phép phát hiện.
Bạn sẽ học được
- Node Read Text (OCR) (Đọc văn bản) đầu tiên, và vì sao thiết lập What to read quan trọng hơn mọi thiết lập khác.
- Lưu kết quả đọc vào một biến.
- Node If (Nếu) đầu tiên, ở chế độ Expression.
- Vì sao giá trị không đọc được nên để trống, không bao giờ thành số
0giả.
Trước khi bắt đầu
- Hoàn thành Bài 04.
- Cổng tính năng OCR của flow đang bật: flow settings → Features →
ocrEnabled. Node Read Text trong flow tắt OCR sẽ hỏng ngay lập tức — cú vấp OCR-đầu-đời phổ biến nhất.
Flow

Badge đánh số node theo thứ tự đọc, khớp phần Dựng flow. Node OCR có hai lối ra và node If bên dưới có thêm hai, nên một lần đọc sinh ra ba kết thúc riêng biệt — không đọc được, đủ, không đủ.
Dựng flow
- Flow mới. Trong hộp thoại Variables của flow, khai báo
goldkiểu number? (nullable — bàn về dấu?ngay dưới). - Thêm Read Text (OCR) tên
1. Read the Gold readout:- Region: vẽ ôm sát riêng ô số Gold nền trắng trên Live Preview.
- What to read: Number — không phải Auto.
- Biến output:
gold. Timeout5000ms.
- Thêm If tên
2. Is Gold above 10000?, kiểu điều kiện Expression:{{gold}} > 10000. - Ba Stop:
enough gold(success) /not enough(success) /unreadable(failure). - Nối: Read Success → If, Read Failure → unreadable; If True → enough, False → not enough.
- Save, Auto Layout.
Vì sao dùng từng node — và hai quy tắc quan trọng
| Node | Vai trò | Truyền đi |
|---|---|---|
| Read Text | OCR vùng, phân tích theo kiểu đã chọn | vars.gold là một số |
| If | Định giá biểu thức trên ngữ cảnh | Route của nó: True / False |
| Ba Stop | Mỗi kết cục thực sự khác nhau một cái | Trạng thái cuối + thông điệp |
Quy tắc 1 — kiểu dữ liệu làm hết việc nặng. Với What to read: Number, engine tự tinh chỉnh cho chữ số và trả về 12480 dưới dạng số. Với Auto bạn nhận chuỗi "12480" — và {{gold}} > 10000 so sánh một chuỗi sẽ lặng lẽ sai. Chọn đúng kiểu thay thế cả đống bước dọn dẹp thủ công.
Quy tắc 2 — không đọc được thì để trống. Nếu OCR không phân tích ra số, gold để trống; sản phẩm không bao giờ bịa ra số 0. Một số 0 bịa sẽ âm thầm chảy vào phép so sánh và rẽ nhầm nhánh; một giá trị trống thì hỏng nhìn thấy được. Đó cũng là lý do khai báo number? — dấu ? cho phép trống. Khai báo number trơn thì một lần đọc không phân tích được sẽ từ chối lần chạy với lỗi kiểu.
Vì sao ba Stop, và vì sao unreadable là failure: "trên ngưỡng" và "dưới ngưỡng" đều là câu trả lời đúng cho câu hỏi của bạn — success. "Tôi không đọc nổi màn hình" là chuyện khác hẳn: flow thất bại ở chính nhiệm vụ của nó. Phía sau (queue, lịch chạy, flow cha) sẽ đối xử hai trạng thái này khác nhau, nên khai đúng không chỉ là chuyện thẩm mỹ.
Chạy thử
- Dashboard trơn: Gold là
12480→success · Gold above threshold. - Mở
dashboard.html?gold=900rồi chạy: →success · Gold below threshold. - Điều hướng rời Practice App rồi chạy: không có gì để đọc →
failure · unreadable.
Ba lần chạy, ba kết thúc, tất cả đều chủ đích. Hãy dùng Test Node trên Read Text trước — nó hiện kết quả OCR thô và giá trị đã phân tích trước khi bạn chạy bất kỳ thứ gì.
Best practices
- Vùng OCR ôm sát. UI xung quanh là nguyên nhân số một của đọc sai.
- Luôn chọn kiểu cụ thể, không bao giờ Auto, khi bạn biết vùng đó chứa gì.
- Khai báo biến OCR nullable (
number?,string?). - Nối Failure của Read Text — một OCR không đọc nổi là sự thật đáng báo cáo, không phải đáng giấu.
- Test Node trước Test Flow. Xác minh phép đọc riêng lẻ, rồi mới đến logic.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Để kiểu Auto | > so sánh chuỗi; rẽ nhầm nhánh | Đặt Number |
Khai báo number không nullable | Lần chạy không đọc được bị từ chối vì TYPE_MISMATCH | Khai number? |
| Vùng dính nhãn "GOLD" | OCR trộn chữ cái vào chữ số | Thu về riêng ô nền trắng |
| Kỳ vọng Failure khi vùng trống | Đọc trống là Success với giá trị trống | Rẽ theo giá trị (If → Is Empty) |
| Cổng OCR tắt | Node hỏng tức thì | Flow settings → Features → ocrEnabled |
Khắc phục sự cố
gold luôn trống.
Test Node cho xem OCR thấy gì. Thường thì vùng lệch vài pixel hoặc dính nhãn. Vẽ lại.
If rời qua Fatal.
Biểu thức không phải boolean — soát lỗi gõ kiểu {{gold}} đứng một mình (một con số không phải điều kiện) hoặc tên biến sai chính tả.
Đọc đúng trên máy bạn, sai trên máy bạn bè. Khác độ phân giải giả lập. Vùng tính theo phần trăm, nhưng cỡ chữ vẫn ảnh hưởng OCR — xác nhận cả hai máy chạy 1280×720.
Tóm tắt
- Read Text biến pixel thành giá trị có kiểu; What to read là thiết lập quan trọng nhất.
- If định giá biểu thức trên biến; cả hai port của nó đều phải nối.
- Trống tốt hơn bịa: giá trị không đọc được để trống, và khai báo nullable làm điều đó hợp lệ.
Ti ếp theo
Xong một ô, còn ba. Bài 06 · Đọc mọi kiểu giá trị đọc cả bốn ô số liệu của dashboard — số, phần trăm, bộ đếm, thời gian — trong một node duy nhất, với một ảnh chụp màn hình.
Xem thêm: Read Text (OCR) · If · Biến và bộ nhớ