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

Các chiến lược nhận diện

Sau khi macro của bạn vượt ra khỏi các thao tác chạm đơn giản, yếu tố lớn nhất quyết định độ tin cậy không phải là chính thao tác chạm, mà là cách bạn nhận diện mục tiêu. Các macro nâng cao hoạt động tốt nhất khi chúng chọn đúng chiến lược nhận diện cho giao diện mà chúng đang tự động hóa.

Bắt đầu với tín hiệu ổn định đơn giản nhất

Trước khi tinh chỉnh cài đặt, trước tiên hãy chọn tín hiệu ổn định nhất:

  1. Chỉ dùng tọa độ cố định khi vị trí mục tiêu không bao giờ thay đổi
  2. Dùng nhận diện hình ảnh khi hình ảnh trực quan ổn định và đặc trưng
  3. Dùng nhận diện văn bản khi các nhãn dễ nhận diện hơn các biểu tượng
  4. Dùng một Region() nhỏ hơn khi bạn đã biết gần đúng vị trí mục tiêu sẽ xuất hiện

Nếu nhiều chiến lược đều hoạt động được, hãy ưu tiên cái có vùng tìm kiếm nhỏ nhất và ít mơ hồ nhất.

Screen so với Region

Sai lầm về hiệu suất phổ biến nhất là tìm kiếm toàn màn hình cho mọi thứ.

Dùng Screen khi:

  • mục tiêu có thể xuất hiện gần như mọi nơi
  • bạn đang xây dựng phiên bản đầu tiên của một macro
  • bạn đang khám phá một luồng ứng dụng mới

Dùng Region khi:

  • mục tiêu luôn xuất hiện trong một phần đã biết của giao diện
  • màn hình chứa các biểu tượng lặp lại hoặc văn bản lặp lại
  • bạn muốn so khớp nhanh hơn và ổn định hơn
local actionArea = Region(900, 1600, 1080, 2200)
actionArea:click("continue-button.jpg")

Kỹ thuật fit region

Một trong những kỹ thuật nâng cao hữu ích nhất là cái mà bạn mô tả là fit region.

Ý tưởng là:

  1. Tìm vật thể một lần bằng Screen:find()
  2. Chuyển kết quả khớp đó thành một Region vừa vặn bằng result:getRegion()
  3. Tái sử dụng vùng vừa vặn đó cho các lần tìm kiếm tiếp theo nếu kích thước vật thể giữ nguyên

Cách này hoạt động tốt khi:

  • vật thể luôn có cùng chiều rộng và chiều cao
  • nội dung của vật thể có thể thay đổi, nhưng vùng chứa của nó giữ nguyên
  • việc tìm kiếm toàn màn hình tốn kém và được lặp lại thường xuyên
local result = Screen:find("inventory-panel.jpg")
if result then
local fitRegion = result:getRegion()
local collectButton = fitRegion:find("collect-button.jpg")
if collectButton then
fitRegion:click("collect-button.jpg")
end
end

Lý do kỹ thuật này mạnh mẽ:

  • lần tìm kiếm toàn màn hình đầu tiên là bước tốn kém
  • sau khi vật thể được tìm thấy, tất cả các lần tìm kiếm sau đều bị giới hạn trong ranh giới vừa vặn
  • điều này có thể giảm đáng kể chi phí OCR và so khớp hình ảnh trong các luồng lặp lại

Dùng fit region khi:

  • bạn có một bảng điều khiển, thẻ, hộp thoại popup, khe cắm, hoặc vùng chứa ổn định
  • macro tương tác lặp đi lặp lại bên trong cùng một vật thể được khớp
  • cùng một vật thể xuất hiện ở các vị trí khác nhau nhưng giữ nguyên kích thước

Tránh dùng fit region khi:

  • vật thể bị thay đổi kích thước nhiều giữa các màn hình hoặc thiết bị
  • vùng mục tiêu mở rộng hoặc thu gọn động
  • lần khớp đầu tiên quá chung chung và có thể gắn sai vùng chứa

Trên thực tế, fit region là một trong những cách tốt nhất để chuyển một macro Screen chậm thành một macro Region nhanh mà không cần cố định tọa độ.

Nhận diện hình ảnh so với nhận diện văn bản

Ưu tiên nhận diện hình ảnh khi:

  • mục tiêu chủ yếu mang tính đồ họa
  • ngôn ngữ giao diện có thể thay đổi
  • văn bản được cách điệu hoặc hiển thị bên trong một nút
  • OCR gặp khó khăn vì văn bản quá nhỏ hoặc có độ tương phản thấp

Ưu tiên nhận diện văn bản khi:

  • nhãn thay đổi vị trí nhưng giữ nguyên nội dung
  • cùng một thành phần hình ảnh xuất hiện trong nhiều chủ đề hoặc trạng thái
  • hình dáng nút thay đổi nhưng nhãn vẫn dễ đọc
  • bạn cần so khớp văn bản được ứng dụng tạo ra động

OCR Theo từng từ so với Theo từng dòng

Khi sử dụng nhận diện văn bản, phương pháp nhận diện là quan trọng:

  • Dùng setDetectionMethod(1) cho một từ đơn hoặc nhãn rất ngắn
  • Dùng setDetectionMethod(2) khi mục tiêu là một cụm từ hoặc cả một dòng
Screen:click("Login", ClickParams():setDetectionType("TEXT"):setDetectionMethod(1))
Screen:wait("Your session has expired", 5000, FinderParams():setDetectionType("TEXT"):setDetectionMethod(2))

Tinh chỉnh điểm tương đồng từng bước một

Một điểm tương đồng quá cao sẽ gây bỏ sót. Một điểm quá thấp sẽ gây nhận diện sai.

Một quy trình tinh chỉnh thực tế:

  1. Bắt đầu với điểm mặc định
  2. Nếu mục tiêu bị bỏ sót, hạ điểm xuống một chút
  3. Nếu nhận diện sai đối tượng, tăng điểm lên một chút
  4. Nếu cả hai đều xảy ra, thu hẹp vùng tìm kiếm trước khi thay đổi điểm thêm nữa

Trong hầu hết trường hợp, việc giảm sự mơ hồ bằng Region() an toàn hơn là đẩy điểm tương đồng quá mạnh.

Chỉ dùng thang độ xám khi nó thực sự giúp ích

Thang độ xám có thể cải thiện tốc độ và đôi khi cải thiện tính nhất quán, nhưng nó không tự động tốt hơn.

Dùng thang độ xám khi:

  • mục tiêu được xác định nhiều hơn bởi hình dáng hơn là màu sắc
  • sự thay đổi ánh sáng hoặc màu sắc làm cho việc so khớp không ổn định
  • bạn muốn so khớp nhanh hơn trên các thiết bị thấp cấp

Tránh phụ thuộc vào thang độ xám khi:

  • màu sắc là sự khác biệt chính giữa các mục tiêu tương tự
  • bạn đang cố phân biệt trạng thái hoạt động và không hoạt động theo màu

Tỷ lệ động

Nếu cùng một macro chạy trên các thiết bị có độ phân giải khác nhau, tỷ lệ động có thể giúp nhận diện hình ảnh vẫn sử dụng được.

Dùng tỷ lệ động khi:

  • mẫu được chụp trên một thiết bị nhưng thực thi trên thiết bị khác
  • cùng một bố cục ứng dụng được đổi kích thước trên các điện thoại hoặc máy tính bảng khác nhau

Nhưng nếu giao diện đã rất nhất quán trên một thiết bị duy nhất, một mẫu được cắt tốt cộng với một vùng tốt thường ổn định hơn là tinh chỉnh tỷ lệ quá mức.

Cắt mẫu quyết liệt

Một mẫu tốt chỉ nên chứa những gì làm cho mục tiêu trở nên độc nhất.

Mẫu tốt:

  • chính biểu tượng đó
  • vùng nhãn độc nhất
  • mẫu hình ảnh trực quan ổn định tối thiểu

Mẫu xấu:

  • khoảng trắng lớn bao quanh
  • nền có hoạt ảnh
  • nội dung thay đổi sau mỗi lần chạy
  • các phần tử lân cận không thuộc về mục tiêu

Dùng nhận diện hai bước cho các màn hình khó

Khi một màn hình nhiễu, hãy dùng cách tiếp cận theo giai đoạn:

  1. Chờ một phần tử neo ổn định
  2. Thu hẹp vùng tìm kiếm
  3. Nhận diện mục tiêu cuối cùng bên trong vùng đó
Screen:wait("settings-title.jpg", 5000)

local footerArea = Region(0, 1700, 1080, 2400)
footerArea:click("save-button.jpg")

Mẫu được khuyến nghị

Đối với các macro nâng cao, đây thường là thứ tự an toàn nhất:

  1. Chờ một trạng thái ổn định
  2. Giới hạn vùng tìm kiếm
  3. Cố ý chọn nhận diện hình ảnh hay văn bản
  4. Chỉ tinh chỉnh điểm sau khi đã giảm sự mơ hồ
  5. Xác minh kết quả trước khi tiếp tục

Trang liên quan