Представьте: legacy-система на COBOL, интерфейс без API, а нужно автоматизировать ввод данных. Классический RPA (UiPath, Automation Anywhere) с XPath сломается при первом же смещении кнопки. Альтернатива — RPA-бот с Computer Vision, который «видит» экран как изображение и находит элементы по визуальным признакам. Мы разрабатываем таких ботов под ключ с опорой на YOLOv8, PaddleOCR и методы few-shot обучения, реализуя интеллектуальную автоматизацию. За 5+ лет реализовали 20+ проектов внедрения CV-RPA, включая сложные случаи с Citrix и динамическими UI. Гарантируем стабильность распознавания: точность детекции 95%+ при правильном датасете.
Для обнаружения элементов используем YOLOv8, дообученный на датасете Rico (66k UI) + кастомная разметка под интерфейс заказчика. Аугментация (яркость, контраст, вращение) и квантизация INT8 снижают latency до 50 мс. Текст извлекаем с помощью PaddleOCR (кириллица) или EasyOCR с дообучением на доменном словаре. В результате бот обрабатывает до 10 операций в минуту.
Согласно документации Ultralytics, YOLOv8 достигает mAP 50-95 на UI-датасетах, что подтверждает применимость для автоматизации интерфейсов.
Когда нужен CV-RPA?
Компьютерное зрение для RPA оправдано в конкретных сценариях:
- Работа с legacy-системами без API и с закрытой оконной иерархией (COBOL/AS400 терминалы, Citrix Virtual Desktop).
- Веб-приложения с динамически генерируемыми классами (React/Angular с CSS Modules), где XPath нестабилен при каждом деплое.
- Обработка PDF-документов и scanned images внутри RPA-потока — без OCR интеграция неполна.
- Автоматизация десктопных приложений третьих сторон без SDK — SAP GUI или 1С в терминальном режиме.
Архитектура CV-RPA бота
import cv2 import numpy as np from ultralytics import YOLO class CVRPAAgent: def __init__(self, ui_detector_model: str): 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 (GitHub), дообученный на датасете 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]]) Как CV-RPA справляется с динамическим UI?
Динамические элементы (всплывающие окна, меняющиеся позиции кнопок) — типичная проблема. Мы решаем её через few-shot learning: собираем 5-10 вариантов скриншотов с разным состоянием элемента и дообучаем модель на них. Это даёт устойчивость к изменениям без полного переобучения. Дополнительно используем grid search по порогу уверенности — подбираем conf threshold для минимизации false positives.
Почему CV-RPA надёжнее классического?
CV-RPA в 3 раза устойчивее к изменениям UI по сравнению с классическим RPA на XPath. Вот сравнение ключевых метрик:
| Метрика | Классический RPA | CV-RPA |
|---|---|---|
| Устойчивость к смене позиции элемента | Низкая | Высокая |
| Устойчивость к смене UI framework | Средняя | Высокая |
| Скорость выполнения | Быстро | На 15–25% медленнее |
| Точность нахождения элемента | 99% (при корректном XPath) | 91–96% |
Как внедрить CV-RPA: пошаговый процесс
- Анализ и сбор данных — скриншоты целевого UI, разметка bounding boxes для каждого типа элементов.
- Обучение детектора — дообучение YOLOv8 на собранном датасете, валидация на тестовой выборке.
- Интеграция с RPA-платформой — встраивание CV-агента в UiPath / Automation Anywhere через Python Activity.
- Тестирование на реальных сценариях — прогон 100+ операций, замер точности и времени.
- Деплой и мониторинг — установка на RPA-ферму, логирование ошибок, циклическое дообучение.
Что входит в работу
- Дообученная модель YOLOv8 под ваш UI
- Интеграция с OCR (PaddleOCR под кириллицу)
- Документация по архитектуре и дообучению
- Поддержка в течение 3 месяцев после сдачи
- Исходный код агента и конфиги деплоя
Сроки и стоимость
| Сложность автоматизации | Срок |
|---|---|
| 1–3 процесса, готовые интерфейсы | 2–4 недели |
| 5–10 процессов, Citrix/RDP | 5–8 недель |
| Комплексная автоматизация с обучением модели | 8–14 недель |
Стоимость рассчитывается индивидуально. Свяжитесь с нами для бесплатной консультации — обсудим вашу задачу и подберём оптимальное решение. Закажите пилотный проект: протестируем CV-RPA на одном процессе, оценим точность и время выполнения.







