Chuyển tới nội dung chính

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ố 0 giả.

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

Flow Bài 05 trong trình soạn thảo

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

  1. Flow mới. Trong hộp thoại Variables của flow, khai báo gold kiểu number? (nullable — bàn về dấu ? ngay dưới).
  2. 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. Timeout 5000 ms.
  3. Thêm If tên 2. Is Gold above 10000?, kiểu điều kiện Expression: {{gold}} > 10000.
  4. Ba Stop: enough gold (success) / not enough (success) / unreadable (failure).
  5. Nối: Read Success → If, Read Failure → unreadable; If True → enough, False → not enough.
  6. Save, Auto Layout.

Vì sao dùng từng node — và hai quy tắc quan trọng

NodeVai tròTruyền đi
Read TextOCR vùng, phân tích theo kiểu đã chọnvars.gold là một số
IfĐịnh giá biểu thức trên ngữ cảnhRoute của nó: True / False
Ba StopMỗi kết cục thực sự khác nhau một cáiTrạ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à 12480success · Gold above threshold.
  • Mở dashboard.html?gold=900 rồ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ỗiHậ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 nullableLần chạy không đọc được bị từ chối vì TYPE_MISMATCHKhai 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ốngRẽ theo giá trị (If → Is Empty)
Cổng OCR tắtNode 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ớ