Mechanizm i sposób automatyzacji operacji GUI za pomocą rozpoznawania obrazu
Podczas nagrywania i odtwarzania makr wiele osób spotyka się z sytuacją: „wczoraj działało, a dziś kliknięcie trafia w inne miejsce”. Najczęściej wynika to z tego, że nagrane makro działa na podstawie stałych współrzędnych ekranu. Gdy okno otworzy się w innym miejscu, zmieni się rozdzielczość albo makro zostanie odtworzone na innym monitorze, kliknięcie może trafić poza właściwy element. Automatyzacja oparta na rozpoznawaniu obrazu rozwiązuje ten podstawowy problem.
Rozpoznawanie obrazu to technologia wyszukiwania elementów na ekranie na podstawie ich wyglądu, a nie współrzędnych. Najpierw zapisuje się mały obraz przycisku, który ma zostać kliknięty. Podczas odtwarzania narzędzie skanuje cały ekran i wyszukuje miejsce zgodne z tym obrazem. Niezależnie od tego, dokąd przesunięto przycisk, można go dokładnie znaleźć i kliknąć, o ile jego wygląd się nie zmienił. To właśnie jest zaletą rozpoznawania obrazu.
Jak rozpoznawanie obrazu znajduje elementy
Mechanizm jest prosty. Najpierw należy przechwycić i zapisać mały obraz elementu, który ma służyć jako punkt odniesienia, na przykład przycisku „Wyślij” lub określonej ikony. Jest to obraz wzorcowy. Po uruchomieniu makra narzędzie wykonuje zrzut bieżącego ekranu i wyszukuje na nim obszar zgodny z obrazem wzorcowym. Po znalezieniu dopasowania zwraca współrzędne jego środka, a makro przesuwa tam kursor myszy i klika.
Ważnym ustawieniem jest tutaj próg dopasowania, czyli dokładność porównania. Obrazy nie muszą być identyczne w 100% — można na przykład uznać podobieństwo na poziomie co najmniej 90% za dopasowanie. Wyższy próg ogranicza liczbę błędnych rozpoznań, ale niewielkie różnice w wyglądzie mogą uniemożliwić znalezienie elementu. Niższy próg zapewnia większą elastyczność, lecz zwiększa ryzyko omyłkowego wskazania innego, podobnego elementu. Najlepiej testować działanie na rzeczywistym ekranie i dobrać odpowiednią wartość.
Kiedy używać FIND_IMAGE, a kiedy WAIT_IMAGE
makuroku udostępnia dwa podstawowe polecenia umożliwiające korzystanie z rozpoznawania obrazu w skryptach. FIND_IMAGE wyszukuje miejsce, w którym dany obraz znajduje się na ekranie w tej konkretnej chwili. Ponieważ znalezione współrzędne można zapisać w zmiennej, polecenie nadaje się między innymi do klikania przycisków, których miejsce wyświetlenia nie jest z góry znane.
Z kolei WAIT_IMAGE czeka, aż dany obraz pojawi się na ekranie. Wczytanie strony internetowej lub uruchomienie aplikacji wymaga czasu, a wykonanie następnej operacji przed zakończeniem tego procesu prowadzi do błędu. WAIT_IMAGE umożliwia niezawodne dostosowanie automatyzacji do stanu ekranu, na przykład przez oczekiwanie na ikonę potwierdzającą zakończenie ładowania przed przejściem dalej. Połączenie obu poleceń pozwala stworzyć odporną automatyzację, która dobrze radzi sobie z typowymi w rzeczywistej pracy różnicami w czasie wykonywania operacji.
Sytuacje, w których rozpoznawanie obrazu jest szczególnie przydatne
Rozpoznawanie obrazu sprawdza się szczególnie dobrze w następujących sytuacjach.
- • Aplikacje, w których położenie przycisków lub okien zmienia się za każdym razem
- • Gdy przed przejściem dalej trzeba poczekać na zakończenie ładowania lub przetwarzania
- • Ekrany z dynamicznym układem, których nie da się w pełni obsłużyć za pomocą współrzędnych
- • Gdy pojawienie się określonej ikony lub stanu ma uruchamiać przetwarzanie
Rozpoznawanie obrazu ma jednak również swoje ograniczenia. W przypadku projektów, w których wygląd obiektu często się zmienia, oraz elementów półprzezroczystych lub animowanych wykrywanie zgodności bywa niestabilne. Ponadto przeszukiwanie całego ekranu zajmuje nieco więcej czasu niż użycie współrzędnych. Zamiast zastępować wszystko rozpoznawaniem obrazu, warto dobierać metodę do sytuacji: „współrzędne tam, gdzie wystarczą, a rozpoznawanie obrazu tylko tam, gdzie położenie się zmienia”. To sposób na praktyczną i szybką automatyzację.
Jak dobrze przygotować obrazy wzorcowe
Dokładność rozpoznawania obrazu zależy w dużej mierze od jakości zarejestrowanego obrazu wzorcowego. Warto pamiętać o kilku zasadach. Przede wszystkim obszar używany jako punkt odniesienia powinien być „mały i charakterystyczny”. Zamiast całego przycisku należy wyciąć jedynie właściwą mu ikonę lub tekst, co zmniejszy ryzyko pomylenia go z innymi elementami. Jeśli natomiast obszar będzie zbyt duży, nawet niewielkie zmiany w otoczeniu, takie jak kolor tła lub sąsiedni element, mogą uniemożliwić znalezienie zgodności.
Należy też unikać obszarów, których kolor lub stan łatwo się zmienia. Jeśli jako punkt odniesienia zostanie użyty przycisk zmieniający kolor po najechaniu myszą albo obszar podświetlany po zaznaczeniu, znalezienie zgodności może się nie udać w zależności od jego stanu. Wybierz stabilną część, która zawsze wygląda tak samo. Ponieważ zmiana skali wyświetlania zmienia również rozmiar obrazu, najpewniejszym rozwiązaniem jest przechwycenie wzorca w rozdzielczości i skali używanych podczas rzeczywistej pracy. Suma takich drobnych środków ostrożności znacząco zwiększa skuteczność rozpoznawania obrazu.
Łączenie rozpoznawania obrazu z innymi metodami
Rozpoznawanie obrazu jest potężne, ale nie uniwersalne. Aby zbudować niezawodną automatyzację do zastosowań praktycznych, należy łączyć kilka metod, stosując każdą tam, gdzie najlepiej się sprawdza. W przypadku przycisku, który nigdy nie zmienia położenia, wystarczy szybkie wskazanie współrzędnych. Rozpoznawanie obrazu warto pozostawić przyciskom zmieniającym położenie oraz elementom, które pojawiają się z opóźnieniem. Do odczytywania tekstu z ekranu służy OCR (rozpoznawanie znaków), natomiast do integracji z usługami zewnętrznymi — komunikacja HTTP. W ten sposób metodę dobiera się do celu.
makuroku pozwala swobodnie łączyć te metody w jednym skrypcie. Można na przykład „poczekać na gotowość ekranu za pomocą WAIT_IMAGE, znaleźć i kliknąć przycisk za pomocą FIND_IMAGE, odczytać wartość wyniku za pomocą OCR, a następnie rozdzielić przetwarzanie przy użyciu warunków”. Taką elastyczną automatyzację, zbliżoną do pracy człowieka, można opisać jako jeden spójny przepływ. Zamiast trzymać się jednej metody, należy łączyć je, wykorzystując mocne strony każdej z nich. Takie podejście jest najkrótszą drogą do automatyzacji, która naprawdę sprawdza się w praktyce.
Co zrobić, gdy rozpoznawanie obrazu nie działa prawidłowo
Po rozpoczęciu korzystania z rozpoznawania obrazu można napotkać sytuację, w której nie da się znaleźć obrazu, mimo że został zarejestrowany. Przyczyn może być kilka. Najczęściej skala wyświetlania lub rozdzielczość ekranu podczas wykonywania obrazu wzorcowego różni się od ustawień używanych podczas wyszukiwania. Rozmiar obrazu ulega wtedy zmianie, więc nie zostaje wykryta zgodność. Najpewniejszym rozwiązaniem jest ponowne wykonanie wzorca przy ustawieniach identycznych jak w środowisku docelowym.
Drugą najczęstszą przyczyną jest zbyt rygorystyczny próg zgodności. Jeśli wymagane jest pełne dopasowanie na poziomie 100%, nawet minimalna różnica odcienia lub antyaliasingu może uniemożliwić znalezienie obrazu. Rozpoznawanie często staje się stabilniejsze po nieznacznym obniżeniu progu i uznaniu podobieństwa wynoszącego około 90% za zgodność. Zbyt niski próg zwiększa jednak liczbę fałszywych wykryć, dlatego najlepiej testować ustawienia na rzeczywistym ekranie i dobrać odpowiednią wartość.
Jeśli problem nadal występuje, sprawdź sam obszar wybrany jako wzorzec. Jeśli punktem odniesienia jest fragment ze zmiennym tłem albo element podświetlany po zaznaczeniu, jego wygląd będzie się zmieniał zależnie od sytuacji, uniemożliwiając dopasowanie. Ograniczenie wzorca do charakterystycznego i stabilnego fragmentu, który zawsze wygląda tak samo — na przykład unikatowej ikony lub logo — zwiększa skuteczność. Wybór łatwego do znalezienia punktu odniesienia to najważniejsza zasada stabilnego rozpoznawania obrazu.
Początkowe dostrojenie rozpoznawania obrazu wymaga nieco pracy, ale po prawidłowym skonfigurowaniu zapewnia elastyczność nieosiągalną przy użyciu stałych współrzędnych. Nawet jeśli okno zostanie przesunięte lub układ się zmieni, system zareaguje prawidłowo, o ile wygląd pozostanie taki sam. Ta odporność daje dużą pewność podczas długotrwałego korzystania z automatyzacji w rzeczywistych procesach biznesowych.
Praktyczny scenariusz wykorzystujący rozpoznawanie obrazu
Przyjrzyjmy się możliwościom rozpoznawania obrazu na konkretnym przykładzie. Załóżmy, że chcemy zautomatyzować okresowe pobieranie danych z pewnej aplikacji Web. Przy każdym logowaniu układ ekranu nieznacznie się zmienia, a przycisk pobierania nie znajduje się w stałym miejscu. Makro oparte na współrzędnych nie potrafi dostosować się do tych zmian i szybko przestaje działać.
W tym miejscu przydaje się rozpoznawanie obrazu. Najpierw należy zarejestrować ikonę przycisku pobierania jako obraz wzorcowy. Makro używa WAIT_IMAGE, aby zaczekać na pełne załadowanie strony, następnie za pomocą FIND_IMAGE odnajduje przycisk pobierania na ekranie i klika w jego położenie. Niezależnie od miejsca wyświetlenia przycisku system może go precyzyjnie znaleźć i kliknąć, o ile jego wygląd się nie zmieni. Zapewnia to stabilną automatyzację niezależną od zmian układu.
Jeśli dodatkowo użyjemy WAIT_IMAGE, aby przed przejściem do kolejnego etapu zaczekać na komunikat o zakończeniu pobierania, nic nie zostanie pominięte nawet przy wolnym połączeniu. Rozpoznawanie obrazu wprowadza więc do automatyzacji naturalny dla człowieka sposób działania: obserwowanie stanu ekranu i wykonywanie odpowiedniej czynności we właściwym miejscu i czasie. Właśnie dlatego można tworzyć odporną automatyzację nawet w rzeczywistym środowisku pracy pełnym zmian.
Takie scenariusze można stosować nie tylko w aplikacjach Web, lecz także w aplikacjach komputerowych, systemach biznesowych i wielu innych sytuacjach. Dzięki rozpoznawaniu obrazu można objąć automatyzacją nawet zadania, z których wcześniej rezygnowano z powodu zmiennego położenia elementów lub nieprzewidywalnego czasu ich pojawiania się. Na początek pomyśl o zadaniu, w którym ciągle przesuwająca się pozycja sprawiała problemy, i spróbuj ustabilizować je za pomocą rozpoznawania obrazu.
Jak tworzyć odporną automatyzację
To, czy automatyzacja jest naprawdę użyteczna w praktyce, zależy od jej odporności na nieprzewidziane sytuacje. Automatyzacja oparta wyłącznie na zapisanych współrzędnych może zadziałać prawidłowo za pierwszym razem, lecz często zatrzymuje się już po niewielkiej zmianie środowiska. Połączenie jej z rozpoznawaniem obrazu pozwala uwzględnić decyzje podejmowane przez człowieka nieświadomie, takie jak klikanie na podstawie wyglądu czy oczekiwanie, aż ekran będzie gotowy.
Oprócz nagrywania za pomocą GUI makuroku oferuje standardowo polecenia rozpoznawania obrazu, takie jak FIND_IMAGE i WAIT_IMAGE. Najpierw nagraj czynności, aby utworzyć podstawowy szkielet, a następnie zastąp rozpoznawaniem obrazu tylko te miejsca, w których zmienia się położenie elementów lub trzeba poczekać na odpowiedni moment. Takie połączenie pozwala tworzyć automatyzacje, które nie przestają działać przy pierwszej nieprzewidzianej sytuacji, lecz radzą sobie z chaosem rzeczywistych środowisk. Wszystkie funkcje można wypróbować bezpłatnie, więc zacznij od ustabilizowania za pomocą rozpoznawania obrazu tych zadań, w których „ciągle przesuwające się położenie sprawiało problemy”.
Wypróbuj za darmo
Zautomatyzuj to z makuroku
makuroku nagrywa mysz i klawiaturę, a następnie odtwarza je automatycznie. Dodaj skrypty SCR i integrację AI (MCP), gdy potrzebujesz więcej. Wszystkie funkcje za darmo na Windows.
Więcej artykułów