1
0
forked from BRT/arc
arc/android/ocr/OcrUtils.h

43 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QByteArray>
#include <QPoint>
#include <QString>
namespace OcrUtils {
// Находит надпись `needle` на скриншоте (PNG-байты) и возвращает координаты
// центра bounding box-а в системе координат экрана. Если текст не найден —
// возвращает QPoint(-1, -1). Совпадение нечувствительно к регистру и допускает
// одну-две OCR-ошибки в букве (для "Подтверждаю" на оранжевом фоне это важно).
//
// `yMin`/`yMax` — необязательное окно по Y в координатах экрана. Если задано,
// OCR гоняется только по этой полосе, что в 2-3 раза быстрее на 1080×2340.
// 0/0 — обрабатывать всё изображение.
QPoint findTextCenter(const QByteArray &png,
const QString &needle,
int yMin = 0,
int yMax = 0);
// Находит крупную сплошную кнопку заданного цвета (по умолчанию — оранжевая
// sticky-action кнопка Dushanbe "Подтверждаю"/"Оплатить", RGB(255,117,40)) и
// возвращает центр её bounding box в координатах экрана (= пиксели скриншота).
//
// В отличие от findTextCenter не зависит от текста, контраста и языка: OCR на
// белом-по-оранжевому ненадёжен, а сплошной цветной прямоугольник ловится
// стабильно. Алгоритм — поиск самой длинной вертикальной полосы строк, где
// доля пикселей целевого цвета превышает порог по ширине; это отсекает мелкие
// цветные иконки в статус-баре и ловит именно широкую кнопку. Координаты
// относительные по построению, поэтому работает на любом разрешении.
//
// `yMin`/`yMax` — необязательное окно по Y (координаты экрана), 0/0 — весь
// кадр. Возвращает QPoint(-1, -1), если подходящей полосы не найдено.
QPoint findColorButtonCenter(const QByteArray &png,
int targetR = 255,
int targetG = 117,
int targetB = 40,
int tolerance = 55,
int yMin = 0,
int yMax = 0);
} // namespace OcrUtils