🧠 Я отказался от OCR и нейросетей и это было лучшее решение
Звучит странно? Сейчас объясню. Была задача: автоматизировать взаимодействие с внешней системой, у которой нет API. Только UI. Только экран. Только клики. Классический RPA-кейс. И классический выбор: либо ставим Tesseract/нейросети, либо пилим костыли с координатами. Я выбрал третье.
🎯 Вместо OCR — координатная сетка + цветовые маски Почему? Потому что: — Tesseract ошибается на нестандартных шрифтах и фонах, а у нас их много. — Нейросети — это зависимость, лишний слой и жор ресурсов. — Координатная сетка даёт 100% точность, потому что мы точно знаем, где искать. Мы просто знаем область экрана, где появляется объект, и проверяем цветовую маску. Всё. Никакого распознавания. Только пиксели. Быстро, надёжно, предсказуемо.
⚡ Асинхронность везде, где можно — Клиент не блокирует интерфейс. — Все ожидания — через колбэки. — Пока бот ждёт ответа от сервера — интерфейс жив, логика не висит.
🔁 Умный retry вместо тупого повтора При ошибке — экспоненциальная задержка: 1с → 2с → 4с → 8с. Это не просто "подожди и попробуй снова". Это: — Защита от флуда сервера. — Защита от бана — мы не палим бота. — С уважением к чужой инфраструктуре.
🧑💻 Эмуляция человека — не баг, а фича — Джиттер в координатах (рандомные отклонения в 2-5 пикселей). — Рандомные офсеты между кликами. — Вариативные паузы, а не фиксированные интервалы. — Система не отличает бота от живого игрока. — Без этого — бан за 5 минут.
🖥️ Клиентский стек — Язык: Python 3.10+. — GUI: CustomTkinter — современный, тёмная тема. — Поиск объектов: OpenCV + координатная сетка + цветовые маски. — Захват экрана: MSS — 30+ FPS. — Управление мышью: PyAutoGUI + Win32API — аппаратный уровень. — Шифрование конфигов: AES-256 (Fernet). — Сборка: PyInstaller — один .exe-файл.
🖥️ Серверный стек — Язык: Python 3.11+. — Backend: FastAPI + Uvicorn. — База данных: PostgreSQL 15 + SQLAlchemy 2.0 (асинхронный) + asyncpg. — Миграции: Alembic. — Кэш и сессии: Redis 7+. — Аутентификация: JWT + bcrypt. — Конфигурация: pydantic-settings + .env. — Логирование: loguru — красивые логи. — Контейнеризация: Docker + Docker Compose. — Всё поднимается одной командой.
🔐 Защита — архитектурный слой, не галочка — HWID-привязка: каждый ключ привязан к конкретному устройству. — Обфускация кода: PyArmor — код не вытащат даже с дизассемблером. — Шифрование данных: AES-256 (Fernet) — конфиги под замком. — Rate Limiting на API — защита от брутфорса. — HTTPS + JWT — защита на транспортном уровне.
📊 Что в итоге — Время выполнения цикла: было 3–4 часа, стало 1.5 часа — ускорение в 2–2.5 раза. — Кликов от человека: было 200+ за сессию, стало 0. — Участие пользователя: было 100%, стало 0% — он полностью вышел из процесса. — Точность выполнения: было ~80% из-за усталости, стало 100%. — Когнитивная нагрузка: обнулена. Человек перестал быть исполнителем. Он — стратег. Наблюдатель. Тот, кто принимает решения, а не кликает.
🧠 Мои выводы как fullstack-архитектора — OCR и нейросети — не панацея. Если можно решить через координаты и цвет — решай через них. Проще, быстрее, надёжнее. — Асинхронность должна быть везде: на клиенте — колбэки, на сервере — asyncpg, FastAPI, Redis. — Безопасность — не галочка в конце проекта. Она вшивается в архитектуру с нуля. — Docker Compose для одного разработчика — мастхэв. Поднять сервер одной командой экономит часы дебага окружения. — Эмуляция человека — это не опция. Это требование выживания.
❓ Вопрос архитекторам и разработчикам: У вас были кейсы, где вы намеренно отказывались от "модных" технологий в пользу простых, но надёжных решений? Или наоборот — вкатывали нейросети там, где можно было обойтись координатами?
👇 Делитесь. Сравним подходы.
🧱 Резюмирую Я не писал что-то конкретное. Я строил клиент-серверную экосистему, где: — Клиент — автономный исполнитель с эмуляцией человека. — Сервер — управление, лицензирование, аналитика. — Безопасность — вшита в архитектуру, а не навешана сверху. Стек — не самоцель. Это инструменты, которые выбраны за надёжность, скорость и контроль.
#архитектура #fullstack #python #FastAPI #RPA #автоматизация #hhru #itвакансии #разработка #системноепроектирование
· 06.08
При написании текста исключить ИИ не удалось))
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 08.08
а какой смысл? писать описание в ручную? я на работу тоже езжу на автомобиле. Хотя с твоим осмыслением можно и пешком пойти по старинке :))))
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 09.08
Какая-то неадекватная реакция у Вас. Вы всегда на иронию отвечаете хамством?
Меня улыбнул сам контраст: пост об отказе от нейросетей написан нейросетью. Причём этот ИИ-текст без редактуры и вашей личной стилистики сразу бросается в глаза, оттого и получилась забавная ирония. Но автор предпочел свести все к вокальному хамству
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 09.08
Я без хамства ответил Вам с юморцой) да уж иногда тоже полезно включать чувство юмора) Если вы в ответе посчитали что меня что-то обидело и я решил нахомить то тут Вы ошибаетесь
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён