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

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ậpKiểuKhoảngMặc địnhTác dụng
Regionhình chữ nhậtphần trăm mànBắt buộc. Vùng cần đo
Rule typelựa chọnxem dướiBắt buộc. Đo cái gì
ExpectedobjectBắt buộc. Giá trị đích để so
Tolerancenumber≥ 0Phép đo được lệch bao xa mà vẫn đạt
Timeoutinteger100–120000 msmặc định flowKiểm trong bao lâu
Poll intervalinteger50–5000 msmặc định flowChụp lại thường xuyên cỡ nào

Bốn quy tắc

Quy tắcĐoDùng điển hình
colorAverageMàu trung bình của vùngPanel hay chỉ báo mã màu
brightnessĐộ sáng trung bìnhThanh sáng lên, màn mờ dần
pixelColorMàu một pixel cụ thểĐèn trạng thái nhỏ
changedSinceLastFrameVùng có khác lần poll trướcBấ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 khiBắt buộc
SuccessQuy tắc đạt
FailureKhông đạt trước timeout (status vẫn success)Không
CancelledLần chạy dừng giữa kiểmKhông — không bao giờ được đi
FatalChụp hỏng, vùng sai, hay quy tắc/giá trị kỳ vọng không phân tích đượcKhô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 changedSinceLastFrame cho ổ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.
  • changedSinceLastFrame giữ 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ỗiHậu quảCách sửa
Chỉ nối SuccessKhông-đạt kết thúc lần chạyNối Failure
Vùng quá toTín hiệu bị trung bình hóa mấtMảng nhỏ đại diện
Tolerance 0Không bao giờ đạt trên màn thậtCho dư địa
Dùng để tìm biểu tượngMong manh, thiếu chính xácFind Image
Đọc nhầm quy tắc thay đổi"Ổn định" đến trên FailureNố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