Check Region (Kiểm tra vùng)
Kiểm một hình chữ nhật của màn theo quy tắc — không cần ảnh template.
Mục đích
Kiểm một hình chữ nhật mà không cần ảnh chụp nào: nó đủ sáng không, đúng màu trung bình không, một pixel cụ thể màu gì, hay nó có đổi so với lần kiểm trước?
Dùng để phát hiện trạng thái không có biểu tượng riêng — thanh máu cạn, màn mờ dần, đèn bật sáng, một vùng đang động đậy.
Khi nào dùng
- Phát hiện thanh, đồng hồ đo, mức thay đổi.
- Xác nhận màn đã mờ vào hay mờ ra.
- Phát hiện bất kỳ chuyển động nào trong vùng, không cần biết nó trông thế nào.
- Kiểm đèn trạng thái hay chỉ báo mã màu.
Khi nào không dùng
- Tìm biểu tượng hay nút — dùng Find Image.
- Đọc giá trị — dùng Read Text.
- Trên vùng rối, nhiều chi tiết. Lấy trung bình vùng phức tạp xóa mất tín hiệu.
Điều kiện
Thiết bị kết nối. Không cần asset template — đó chính là điểm của node này.
Cách nó chạy
Như Find Image, không-đạt không phải lỗi: route là Failure nhưng status là success, nên nó không bao giờ kích retry hay rào chắn lỗi liên tiếp.
Thiết lập
| Thiết lập | Kiểu | Khoảng | Mặc định | Tác dụng |
|---|---|---|---|---|
| Region | hình chữ nhật | phần trăm màn | — | Bắt buộc. Vùng cần đo |
| Rule type | lựa chọn | xem dưới | — | Bắt buộc. Đo cái gì |
| Expected | object | — | — | Bắt buộc. Giá trị đích để so |
| Tolerance | number | ≥ 0 | — | Phép đo được lệch bao xa mà vẫn đạt |
| Timeout | integer | 100–120000 ms | mặc định flow | Kiểm trong bao lâu |
| Poll interval | integer | 50–5000 ms | mặc định flow | Chụp lại thường xuyên cỡ nào |
Bốn quy tắc
| Quy tắc | Đo | Dùng điển hình |
|---|---|---|
colorAverage | Màu trung bình của vùng | Panel hay chỉ báo mã màu |
brightness | Độ sáng trung bình | Thanh sáng lên, màn mờ dần |
pixelColor | Màu một pixel cụ thể | Đèn trạng thái nhỏ |
changedSinceLastFrame | Vùng có khác lần poll trước | Bất kỳ chuyển động hay hiệu ứng |
changedSinceLastFrame là quy tắc thú vị
Quy tắc này so mỗi lần chụp với lần chụp của poll trước. Không cần biết vùng sẽ trông thế nào — chỉ cần biết nó sẽ khác.
Nó là công cụ đúng cho "chờ hiệu ứng dừng" hay "phát hiện có gì đang động", điều không template nào diễn tả nổi.
Tolerance
Tolerance 0 gần như không bao giờ đạt trên màn thật: nén, khử răng cưa và gradient tinh tế khiến phép đo không bao giờ bằng tuyệt đối. Cho dư địa.
Khởi đầu rộng rãi, siết dần đến khi nó ngừng đạt lúc không nên đạt.
Port
| Port | Đi vào khi | Bắt buộc |
|---|---|---|
| Success | Quy tắc đạt | Có |
| Failure | Không đạt trước timeout (status vẫn success) | Không |
| Cancelled | Lần chạy dừng giữa kiểm | Không — không bao giờ được đi |
| Fatal | Chụp hỏng, vùng sai, hay quy tắc/giá trị kỳ vọng không phân tích được | Không — không bao giờ được đi |
Ví dụ cơ bản
Phát hiện thanh máu còn sáng:
- Region: một mảng nhỏ của thanh
- Rule: Brightness
- Expected:
0.5 - Tolerance:
0.15
Success khi thanh còn sáng; Failure khi nó tắt.
Ví dụ thực tế — chờ hiệu ứng chạy xong
Một Wait cố định là đoán. Cái này đo:
Ở đây Failure là kết cục tốt: "vùng ngừng đổi" nghĩa là hiệu ứng xong. Cách đọc đảo ngược này thường gặp với changedSinceLastFrame, và là lý do nối cả hai port một cách suy nghĩ.
Ví dụ nâng cao — ngưỡng đồng hồ đo
Phát hiện thanh tài nguyên tụt dưới ~1/4 bằng cách đo mảng ở mốc 25% chiều dài thanh:
- Region: mảng nhỏ tại mốc 25% của thanh
- Rule: Colour average
- Expected: màu nền "cạn" của thanh
- Tolerance: vừa phải
Success nghĩa là thanh không còn chạm tới điểm đó.
Chạy được ở nơi không biểu tượng nào tồn tại và không chữ nào hiển thị — đúng khoảng trống node này lấp.
Best practices
- Giữ vùng nhỏ, trên mảng ổn định, đại diện. Trung bình vùng lớn phá hủy tín hiệu.
- Luôn nối Failure. Không-đạt rời qua nó, và port trống kết thúc lần chạy.
- Cho tolerance dư địa thật. Tolerance không là bug, không phải độ chính xác.
- Dùng
changedSinceLastFramecho ổn định, và nhớ "hết đổi" đến trên Failure. - Ưu tiên Find Image khi có biểu tượng. So template đặc hiệu hơn và dễ suy luận hơn.
- Test cả hai trạng thái. Quy tắc đạt lúc nên đạt mới là nửa phép kiểm — xác nhận nó trượt lúc nên trượt.
Ghi chú hiệu năng
- Check Region rẻ hơn cả Find Image lẫn OCR — nó đo thống kê pixel trên mảnh cắt thay vì so khớp hay nhận dạng.
- Chi phí theo diện tích vùng. Mảng nhỏ rất nhanh.
- Poll interval bị trần 5000 ms ở đây (chặt hơn node phát hiện khác), vì quy tắc rẻ và sinh ra để lấy mẫu dày.
changedSinceLastFramegiữ mảnh chụp trước để so — tốn thêm một mảnh giữ lại.
Ghi chú bộ nhớ
- Mỗi poll chụp khung mới; khung tạm thời.
- Quy tắc thay đổi giữ mảnh cắt của poll trước — giới hạn theo cỡ vùng, nên giữ vùng nhỏ.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Chỉ nối Success | Không-đạt kết thúc lần chạy | Nối Failure |
| Vùng quá to | Tín hiệu bị trung bình hóa mất | Mảng nhỏ đại diện |
| Tolerance 0 | Không bao giờ đạt trên màn thật | Cho dư địa |
| Dùng để tìm biểu tượng | Mong manh, thiếu chính xác | Find Image |
| Đọc nhầm quy tắc thay đổi | "Ổn định" đến trên Failure | Nối nó làm đường thành công của việc ổn định |
| Kỳ vọng nó đọc giá trị | Nó đo pixel, không chữ | Read Text |
Khắc phục sự cố
Lúc nào cũng đạt. Tolerance quá rộng, hoặc vùng nhiều thứ đến mức trung bình luôn gần giá trị kỳ vọng. Thu vùng.
Không bao giờ đạt. Tolerance quá chặt. Nới ra và xác nhận giá trị đo bằng Test Node.
Quy tắc thay đổi luôn báo "đổi". Vùng dính đồng hồ, nền động, hay hiệu ứng lấp lánh. Dời sang mảng tĩnh.
Node rẽ Fatal. Vùng sai, hoặc giá trị kỳ vọng không phân tích được cho quy tắc đã chọn.
FAQ
Không-đạt có tính là lỗi?
Không — status giữ success.
Kiểm nhiều vùng một node được không? Không. Mỗi vùng một node, hoặc dùng Read Text đa vùng nếu giá trị dạng chữ.
changedSinceLastFrame so gì ở poll đầu?
Nó cần lần chụp trước để so, nên phép so có nghĩa từ poll thứ hai.
Nhanh hơn Find Image? Có, rõ rệt — không so khớp template nào dính dáng.
Node liên quan
- Find Image — khi đích có diện mạo riêng
- Read Text — khi cần giá trị
- Wait — phương án mù của kiểm ổn định
- If — rẽ trên kết cục node này về sau
Trang liên quan
- Mô hình thực thi — status với route
- Retry và thất bại — khuôn mẫu xác minh