AI Computer Vision — работа с изображениями
AI-ориентированная карта API для захвата изображений, их обработки, OpenCV и компьютерного зрения.
Карта раздела Computer Vision / Images
Краткая карта по захвату экрана, поиску изображений, OCR, OpenCV, проверке цветов, работе с пикселями и CV debug overlays.
Что обычно нужно пользователю
- Захватить экран, окно или область.
- Найти изображение или шаблон на экране.
- Найти текст через OCR.
- Искать цвета или отдельные пиксели.
- Запускать CV из скрипта.
- Показывать debug-боксы поверх найденных областей.
- Профилировать CV-операции и циклы обработки пикселей.
Как это устроено
- Захват получает кадры с экрана, окна или выбранной области.
IComputerVisionExperimentalScriptingApi— точка входа для CV в скриптах.ICvAccessorвыполняет операции с изображениями, текстом, цветами и пикселями.- В aura-сценариях используются классы триггеров.
- Для debug-боксов и подписей используйте
osd/screen-overlay.md. - Поиск с ML-моделями частично относится к
ml/ai.md. - Профилирование и производительность описаны в
computer-vision/profiling.md.
Прочитать текст с основного экрана
Для верхнеуровневого C# Script в EyeAuras с загруженным OpenCV-модулем:
using EyeAuras.OpenCVAuras.Scripting;
{
var api = GetService<IComputerVisionExperimentalScriptingApi>();
using var cv = api.ForScreen();
var text = cv.TextSearch();
Log.Info($"Распознанный текст: {text}");
}
В лог попадёт распознанная строка. ForScreen() выбирает основной экран;
для конкретного окна используйте ForWindow(handle) или For(args) с
WindowMatchParams.
Нужен установленный и поддерживаемый OCR-движок: отсутствие движка или ошибка
захвата могут дать исключение, а не пустой текст. Пустая строка сама по себе
не доказывает отсутствие текста на экране.
Accessor освобождает вызывающий код. В обычном C#-классе передайте API через
конструктор; GetService и Log принадлежат скриптовому хосту.
Ссылка на assembly не запускает модуль захвата.
Сохранить кадр окна в PNG
В отдельном верхнеуровневом скрипте выберите окно и сохраните кадр в папку документов. Нужны работающий модуль OpenCV, доступный источник захвата и право записи в выбранную папку:
using System;
using System.IO;
using EyeAuras.OpenCVAuras.Scripting;
using EyeAuras.Shared.Osd;
{
var window = await GetService<IOsdSelectionService>().PickWindow();
using var cv = GetService<IComputerVisionExperimentalScriptingApi>().ForWindow(window);
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "window.png");
cv.ProcessPixels(image => image.Save(path));
Log.Info($"PNG сохранён: {path}");
}
Save(path) вызывается у Emgu.CV.Image<Bgr, byte> внутри callback, пока
заимствованный кадр доступен. Расширение .png задаёт формат файла. Здесь
не нужен Clone, потому что изображение не выходит из callback и не меняется.
Если нужно отложить обработку, создайте клон и освободите его отдельно.
Сам заимствованный image освобождать нельзя.
Какие настройки использует ForWindow
В этом срезе ForWindow(window) создаёт ComputerVisionAccessorArgs с
выражением по handle. Внутренний триггер получает MaxFramesPerSecond = 0
(обновление по запросу), CaptureCursor = false, CaptureBorderless = false,
пустые настройки области и цепочки эффектов. Источник захвата выбирается
из доступных host источников, а не задаётся именем ForWindow. Сам accessor
не предоставляет setter-ов для CaptureSourceName или CaptureBorderless;
не выдумывайте такие параметры в ComputerVisionAccessorArgs.
Это выбранная в примере стандартная конфигурация, не обещание Win32
client-area. (0, 0) — верхний левый пиксель полученного изображения.
Границы нативного источника, рамка и масштабирование зависят от backend;
для связи с экраном берите матрицы конкретного raw-результата. Прямоугольник
OSD относительно DwmFrameBounds нельзя автоматически считать ROI этого
изображения. Для источника с заданными вручную настройками используйте
соответствующий настраиваемый capture trigger, а не несуществующий setter accessor.
Распознать выбранный участок и задать OCR-движок
Этот отдельный C# Script использует ту же стандартную конфигурацию захвата.
В примере выбрано английское распознавание. Движок должен быть доступен именно
на вашей машине; его идентификатор проверьте через IRecognitionEngineProvider:
using System.Drawing;
using System.Linq;
using EyeAuras.OpenCVAuras.Scripting;
using EyeAuras.OpenCVAuras.Services;
using EyeAuras.Shared.Osd;
{
var engines = GetService<IRecognitionEngineProvider>();
var engineId = "Tesseract (eng)";
if (!engines.TryResolveById(engineId, out _))
{
Log.Info($"Доступные движки: {string.Join(", ", engines.KnownEngines.Select(x => x.Id))}");
return;
}
var window = await GetService<IOsdSelectionService>().PickWindow();
using var cv = GetService<IComputerVisionExperimentalScriptingApi>().ForWindow(window);
var roi = new Rectangle(12, 24, 250, 64);
var text = cv.TextSearch(region: roi, engineId: engineId);
Log.Info($"Текст: {text}");
}
TextSearch(Rectangle region = default, string engineId = null) возвращает
строку. engineId: null использует выбор движка по умолчанию у host;
непустой id передаётся внутреннему TextSearchTrigger. Для русского текста
выберите поддерживаемый движок/язык из KnownEngines, например установленный
Tesseract (rus). Наличие id в документации не устанавливает движок.
region задаёт область захвата у внутреннего триггера на время вызова, а не
постфильтр уже распознанных слов. Здесь это выбранный участок исходного кадра
при пустой цепочке эффектов. Для кадра после crop/resize/rotation сначала
переведите область через его фактические матрицы. Не добавляйте к ROI
экранные Left/Top окна и не обещайте, что координаты OSD-пикера совпадают
с координатами любого backend. Пустой Rectangle выбирает всю область.
Выбрать форму результата
Простые ImageSearch / PixelSearch возвращают геометрию в координатах экрана
для экранного источника и окна для оконного. Rectangle.Empty означает отсутствие
изображения; Point.Empty неоднозначен, поскольку пиксель может быть в (0, 0).
Raw-методы возвращают оболочку WindowImageProcessedEventArgs<T> с nullable
Detected.Bounds и матрицами захвата. Применяйте ToScreen к локальным bounds
этого результата, чтобы учесть ROI и эффекты, а не к уже преобразованному результату.
Для собственного OpenCV-кода ProcessPixels даёт заимствованное изображение
только на время callback. Для хранения или изменения создайте Clone() и
освободите клон. Captured из события не является отдельным снимком.
Встроенный EnableOsd() работает с оконным accessor; полноэкранный путь его
отклоняет. Для своих аннотаций можно отдельно создать OSD canvas.
Точные defaults, минимальные примеры и владение — в
операциях CV, преобразования — в
контракте результата.
Эти правила описывают EyeAuras 20fd3d4; доступность native-захвата, DPI и
конкретной ML-модели проверяйте в своей среде.
Основные API и классы
IComputerVisionExperimentalScriptingApi— точка входа для CV в скриптах.ICvAccessor— основная поверхность CV-операций в скриптах.ImageSearchTrigger— триггер для поиска изображения или шаблона.TemplateImageMatcher— стабильный template matching.FeatureImageMatcher— feature-based matching.TextSearchTrigger,IRecognitionEngineProvider— OCR.ColorSearchTrigger,IColorSimilarityCalculator— сценарии работы с цветами и пикселями.WindowCaptureService,WindowImageSource,WindowCaptureTriggerBase— инфраструктура захвата.
Что лучше использовать
- Для CV в скриптах используйте
IComputerVisionExperimentalScriptingApiиICvAccessor. - Для aura-сценариев предпочитайте встроенные триггеры.
- Для захвата используйте готовые capture services, а не собственную логику скриншотов.
- Для отладки областей используйте
osd/screen-overlay.md. - Прежде чем гадать, где тормозит CV-цикл, откройте
computer-vision/profiling.md.
Чего лучше избегать
- Не хардкодьте OCR engines, если доступен provider lookup.
- Не пишите свой frame capture, пока не проверили готовые capture services.
- Не смешивайте логику ML-моделей с детерминированным matching без необходимости.
Опорные точки для поиска по коду
IComputerVisionExperimentalScriptingApi,ICvAccessor,ImageSearchTrigger,TemplateImageMatcher,FeatureImageMatcher,TextSearchTrigger,IRecognitionEngineProvider,ColorSearchTrigger,WindowCaptureService,WindowCaptureTriggerBase.
Синонимы для поиска
- image search
- template match
- feature match
- OCR
- text recognition
- color search
- pixel search
- window capture
- screen capture
- OpenCV
- Emgu CV
Смежные карты
osd/screen-overlay.mdcomputer-vision/profiling.mdml/ai.mdosd/selection.mdwindows-subsystems/window-handles.md