Lewati ke konten utama

Strategi Deteksi

Setelah makro Anda melampaui ketukan sederhana, faktor terbesar dalam keandalan bukanlah klik itu sendiri, tetapi bagaimana Anda mendeteksi target. Makro lanjutan bekerja paling baik ketika memilih strategi deteksi yang tepat untuk UI yang sedang diotomatisasi.

Mulailah Dengan Sinyal Paling Sederhana yang Andal

Sebelum menyesuaikan pengaturan, pertama-tama pilih sinyal yang paling stabil:

  1. Gunakan koordinat tetap hanya ketika posisi target tidak pernah berubah
  2. Gunakan deteksi gambar ketika bentuk visual stabil dan khas
  3. Gunakan deteksi teks ketika label lebih mudah dikenali daripada ikon
  4. Gunakan Region() yang lebih kecil ketika Anda sudah tahu kira-kira di mana target akan muncul

Jika beberapa strategi berhasil, pilih yang memiliki area pencarian terkecil dan ambiguitas paling rendah.

Screen vs Region

Kesalahan kinerja paling umum adalah mencari di seluruh layar untuk semua hal.

Gunakan Screen ketika:

  • target dapat muncul hampir di mana saja
  • Anda sedang membangun versi pertama dari sebuah makro
  • Anda sedang menjelajahi alur aplikasi baru

Gunakan Region ketika:

  • target selalu muncul di bagian UI yang sudah diketahui
  • layar berisi ikon berulang atau teks berulang
  • Anda menginginkan pencocokan yang lebih cepat dan lebih stabil
local actionArea = Region(900, 1600, 1080, 2200)
actionArea:click("continue-button.jpg")

Teknik Fit Region

Salah satu teknik lanjutan yang paling berguna adalah apa yang Anda sebut sebagai fit region.

Idenya adalah:

  1. Temukan objek sekali menggunakan Screen:find()
  2. Ubah hasil cocok tersebut menjadi Region yang dipasang menggunakan result:getRegion()
  3. Gunakan kembali region yang dipasang tersebut untuk pencarian berikutnya jika ukuran objek tetap stabil

Ini bekerja dengan baik ketika:

  • objek selalu memiliki lebar dan tinggi yang sama
  • konten objek dapat berubah, tetapi area wadahnya tetap konsisten
  • pencarian layar penuh memerlukan biaya tinggi dan diulang sering
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

Mengapa ini kuat:

  • pencarian layar penuh pertama adalah langkah yang mahal
  • setelah objek ditemukan, semua pencarian selanjutnya dibatasi pada batas yang dipasang
  • ini dapat mengurangi biaya OCR dan pencocokan gambar secara signifikan dalam alur berulang

Gunakan fit region ketika:

  • Anda memiliki panel, kartu, popup, slot, atau wadah yang stabil
  • makro berulang kali berinteraksi di dalam objek yang sama yang dicocokkan
  • objek yang sama muncul di posisi berbeda tetapi mempertahankan dimensi yang sama

Hindari menggunakan fit region ketika:

  • objek diubah ukurannya secara signifikan antara layar atau perangkat
  • area target berkembang atau menyusut secara dinamis
  • pencocokan pertama terlalu umum dan mungkin terikat ke wadah yang salah

Dalam praktiknya, fit region adalah salah satu cara terbaik untuk mengubah makro Screen yang lambat menjadi makro Region yang cepat tanpa hardcoding koordinat.

Deteksi Gambar vs Deteksi Teks

Utamakan deteksi gambar ketika:

  • target sebagian besar bersifat grafis
  • bahasa UI dapat berubah
  • teks bergaya atau dirender di dalam tombol
  • OCR kesulitan karena teks terlalu kecil atau kontras rendah

Utamakan deteksi teks ketika:

  • label berubah posisi tetapi tetap menggunakan kata yang sama
  • komponen visual yang sama muncul dalam banyak tema atau status
  • bentuk tombol berubah tetapi label tetap dapat dibaca
  • Anda perlu mencocokkan teks yang dibuat secara dinamis oleh aplikasi

OCR Word-by-Word vs Line-by-Line

Saat menggunakan deteksi teks, metode deteksi sangat penting:

  • Gunakan setDetectionMethod(1) untuk satu kata atau label yang sangat singkat
  • Gunakan setDetectionMethod(2) ketika target adalah frasa atau baris penuh
Screen:click("Login", ClickParams():setDetectionType("TEXT"):setDetectionMethod(1))
Screen:wait("Your session has expired", 5000, FinderParams():setDetectionType("TEXT"):setDetectionMethod(2))

Sesuaikan Skor Cocok Secara Bertahap

Skor cocok yang terlalu tinggi menyebabkan kehilangan. Skor yang terlalu rendah menyebabkan false positive.

Proses penyesuaian praktis:

  1. Mulailah dengan skor default
  2. Jika target terlewat, turunkan skor sedikit
  3. Jika hal yang salah dicocokkan, naikkan skor sedikit
  4. Jika keduanya terjadi, kurangi area pencarian sebelum mengubah skor lebih lanjut

Dalam kebanyakan kasus, mengurangi ambiguitas dengan Region() lebih aman daripada mendorong skor cocok terlalu agresif.

Gunakan Grayscale Hanya Saat Membantu

Grayscale dapat meningkatkan kecepatan dan terkadang meningkatkan konsistensi, tetapi tidak otomatis lebih baik.

Gunakan grayscale ketika:

  • target lebih ditentukan oleh bentuk daripada warna
  • pergeseran pencahayaan atau warna membuat pencocokan tidak stabil
  • Anda menginginkan pencocokan yang lebih cepat pada perangkat kelas bawah

Hindari mengandalkan grayscale ketika:

  • warna adalah perbedaan utama antara target yang serupa
  • Anda mencoba membedakan status aktif dan tidak aktif berdasarkan warna

Penskalaan Dinamis

Jika makro yang sama berjalan di berbagai perangkat dengan resolusi berbeda, penskalaan dinamis dapat membantu deteksi gambar tetap dapat digunakan.

Gunakan penskalaan dinamis ketika:

  • template ditangkap di satu perangkat tetapi dieksekusi di perangkat lain
  • tata letak aplikasi yang sama diubah ukurannya di berbagai ponsel atau tablet

Tetapi jika UI sudah sangat konsisten di satu perangkat, template yang dipangkas dengan baik ditambah region yang baik biasanya lebih stabil daripada penskalaan yang terlalu disesuaikan.

Pangkas Template Secara Agresif

Template yang baik hanya boleh berisi apa yang membuat target unik.

Template yang baik:

  • ikon itu sendiri
  • area label yang unik
  • pola visual stabil minimal

Template yang buruk:

  • ruang putih besar di sekitarnya
  • latar belakang yang beranimasi
  • konten yang berubah setiap proses
  • elemen di dekatnya yang bukan bagian dari target

Gunakan Deteksi Dua Langkah untuk Layar Sulit

Ketika layar berisik, gunakan pendekatan bertahap:

  1. Tunggu elemen jangkar yang stabil
  2. Persempit area pencarian
  3. Deteksi target akhir di dalam area tersebut
Screen:wait("settings-title.jpg", 5000)

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

Pola yang Direkomendasikan

Untuk makro lanjutan, ini biasanya adalah urutan paling aman:

  1. Tunggu kondisi stabil
  2. Batasi area pencarian
  3. Pilih deteksi gambar atau teks dengan sengaja
  4. Sesuaikan skor hanya setelah mengurangi ambiguitas
  5. Verifikasi hasil sebelum melanjutkan

Halaman Terkait