Розробка інтелектуальних RPA-ботів з Computer Vision для автоматизації UI
Класичні RPA-боти (UiPath, Automation Anywhere, Blue Prism) взаємодіють з UI через селектори та координати. Вони крихкі: якщо кнопка змістилася на 5 пікселів, бот зломається. Computer Vision усуває цю залежність: бот «бачить» екран як зображення й знаходить потрібний елемент за візуальними ознаками, незалежно від його позиції та внутрішньої структури DOM або ієрархії вікон.
Коли підхід CV необхідний
Розширення CV для RPA виправдане в конкретних сценаріях:
- Робота з застарілими системами без доступу до API та закритою ієрархією вікон (старі терміналі COBOL/AS400, Citrix Virtual Desktop)
- Веб-додатки з динамічно генерованими класами (React/Angular з CSS Modules), де XPath нестійкий
- Робота з PDF-документами та сканованими зображеннями в потоці RPA
- Автоматизація стороннього настільного програмного забезпечення без SDK
Архітектура CV-RPA бота
import cv2
import numpy as np
from ultralytics import YOLO
class CVRPAAgent:
def __init__(self, ui_detector_model: str):
# YOLOv8 дофінальтрований на UI елементах
self.detector = YOLO(ui_detector_model)
self.screenshot_engine = ScreenshotEngine()
def find_element(self, element_type: str,
text_hint: str = None) -> tuple[int, int]:
screenshot = self.screenshot_engine.capture()
detections = self.detector.predict(screenshot, conf=0.7)
candidates = [d for d in detections if d.class_name == element_type]
if text_hint:
candidates = self._filter_by_ocr_text(candidates, screenshot, text_hint)
if not candidates:
raise ElementNotFoundError(f"Cannot find {element_type}")
best = max(candidates, key=lambda d: d.confidence)
return best.center_x, best.center_y
def click(self, element_type: str, text_hint: str = None):
x, y = self.find_element(element_type, text_hint)
pyautogui.click(x, y)
Для виявлення UI-елементів використовуємо YOLOv8, дофінальтрований на наборі даних компонентів UI (кнопки, поля введення, прапорці, випадаючі списки). Базова модель: Rico Dataset (66k Android UI) + користувацька розмітка для конкретного інтерфейсу клієнта.
Інтеграція OCR для вилучення тексту
Для вилучення текстових даних з екрана: PaddleOCR (найкращий баланс швидкості та точності для кирилиці) або EasyOCR. Інтеграція в потік: знайти елемент → вилучити текст з ROI (Region of Interest) → передати до логіки обробки.
import paddleocr
ocr = paddleocr.PaddleOCR(use_angle_cls=True, lang='ru')
def extract_text_from_region(image, bbox):
x1, y1, x2, y2 = bbox
region = image[y1:y2, x1:x2]
result = ocr.ocr(region, cls=True)
return ' '.join([line[1][0] for line in result[0]])
Робота в середовищах Citrix та RDP
У середовищі Citrix бот не має доступу до ієрархії вікон віддаленого робочого столу. Рішення: захоплення снімків екрана через Citrix Virtual Channel або простий захист екрана, аналіз через модель CV, клацання через віртуальне введення мишею/клавіатурою. Додаткова складність: стиснення відеопотоку Citrix зменшує якість зображення — навчаємо модель на снімках екрана низької якості.
Метрики надійності
| Метрика | Класичний RPA | CV-RPA |
|---|---|---|
| Стійкість до зміни позиції елемента | Низька | Висока |
| Стійкість до зміни UI framework | Середня | Висока |
| Швидкість виконання | Швидко | На 15–25% повільніше |
| Точність пошуку елемента | 99% (з коректним XPath) | 91–96% |
| Складність автоматизації | Графік |
|---|---|
| 1–3 процеси, готові інтерфейси | 2–4 тижні |
| 5–10 процесів, Citrix/RDP | 5–8 тижнів |
| Комплексна автоматизація з навчанням моделі | 8–14 тижнів |







