Добро пожаловать в очередной неуместный и безумный проект (* эй, эй, это важно, хорошо!!). После успешного запуска (* я считаю, что это был сумасшедший хит) печально известного T-Man (* ваш Tinder Wingman с искусственным интеллектом), если вы еще не читайте , идите читайте (* пожалуйста, мне нужно больше просмотров)T-Man.
Приветствую вас в Protyper.
(* В драматической сцене)
Вы когда-нибудь чувствовали, что печатание отстойнее вашего пылесоса? И если печатание было футбольным матчем, то вы были Куртуа (* Месси так сильно мускатный орех, что вы хотите отрезать себе ноги….. Visca El Barca ……. без обид… я могу делать это весь день ).
* подожди, подожди, у меня есть еще один
Ваш набор текста отстойнее, чем у Ланы Роудс (*боже, какая она красивая) в ее фильмах? Protyper — это именно то, что вам нужно. (* Офицер арестовал меня, потому что я его убиваю!!! … пусть этим офицером будет Лана, пожалуйста!)
Хорошо достаточно! давайте теперь технически.
Как обычно, я разделю проблему на несколько подзадач и попытаюсь решить их по отдельности.
Проблемы
- Захват экрана
- Обнаружение символов на захваченном изображении
- Контроллер для обнаружения и реагирования на пользовательский ввод
- Создание уведомлений для отображения информации
Захват экрана
Решить эту проблему достаточно легко. В Python есть множество инструментов для создания скриншотов. В этом проекте мы будем использовать pyautogui. Поскольку pyautogui позволяет захватывать определенную область экрана.
Обнаружение символов на захваченном изображении
Есть два варианта решения этой проблемы. Сложный вариант и легкий вариант. Сложный вариант заключается в том, что мы могли бы создать с нуля нашу собственную нейронную сеть для обнаружения персонажа (*о, да ладно, кто это делает). Самый простой вариант — использовать чужую модель (* работайте с умом, а не усердно). Итак, в этом проекте мы будем использовать pytesseract и OpenCv для обнаружения символов.
Контроллер для обнаружения пользовательского ввода
Опять же, существует множество инструментов, предоставляющих интерфейсы для прослушивания и управления событиями мыши/клавиатуры. В этом проекте мы будем использовать pyinput.
Создание уведомления для отображения информации
Создать уведомление не так сложно. Мы могли бы написать собственный код для доступа к dbus для создания уведомления или использовать библиотеку, которая сделает это за нас. (* как вы уже догадались, я ленив и буду использовать некоторую библиотеку) В этом проекте мы будем использовать plyer для создания уведомлений на уровне ОС.
Код
Как обычно, вы можете найти всю реализацию в моем личном репозитории GitHub. Pro-Typer
Требования
- python 3.10 (*почему бы и нет!!… он поставляется с операторами switch yehhhhhh)
- pytesseract
Для системы Debian выполните
sudo apt install tesseract-ocr
Примечание: сделайте это, если вы не хотите вручную добавлять исполняемый файл tessaract в PATH
Настройка проекта
- Клонировать репозиторий
git clone https://github.com/dcostersabin/pro-typer.git
2. Зайти внутрь про-типера
cd pro-typer
3. Требования к установке
pip3 install -r requirements.txt
Выполняется
python3 main.py
Пояснение
Мы начнем с создания абстрактного класса Trigger, который будет отслеживать все ключевые события.
class Trigger(ABC): ........... bla bal bla ........ @abstractmethod def on_keydown(self, key): # do stuff pass
Вы можете видеть, что я создал абстрактный метод, а именно on_keydown, который позволит нам написать нашу бизнес-логику.
Далее мы создадим что-то вроде вспомогательного класса, в котором будут храниться начальные и конечные координаты захватываемой области относительно положения курсора.
class ImageSize: ............. bla bla bla ....................... def is_valid(self): if self.start is None or self.end is None: self.invalid_notify() return False height, width = self.height_width x_valid = self.start[0] < self.end[0] y_valid = self.start[1] > self.end[1] h_w_valid = height > 28 and width > 28 status = x_valid and y_valid and h_w_valid if not status: self.invalid_notify() return status
Таким образом, основная интуиция, стоящая за действительной областью, заключается в том, что начальная координата x должна быть меньше координаты x конца, а координата y начала должна быть больше координаты y конца.
Механизм съемки экрана прост. Я не буду объяснять, как это делается, но вы можете найти странное ключевое слово, а именно обратные вызовы.
def __init__(self, callbacks=None): self.image = None self.callbacks = callbacks self.image_size = ImageSize() self.mouse_controller = Controller() super().__init__()
Это просто причудливый способ передачи функции внутри функции. Всякий раз, когда мы делаем снимок экрана, все функции обратного вызова вызываются путем передачи захваченного изображения.
def _call_callbacks(self): _ = None if self.callbacks is None else [calls(self.image) for calls in self.callbacks]
Класс ImageToChar внутри OCR — это просто простой абстрактный класс для обнаружения символов в переданном изображении и прогнозирования обнаруженного символа, который будет храниться в переменной, называемой прогнозированием.
Чтобы контролировать все действия, мы создадим класс, а именно SysController, почему бы и нет. Добавление Sys к имени класса делает класс более важным, чем другие классы (* Разорвите мою логику).
Ключевая карта идет вроде.
Ctrl: если вы нажмете Ctrl, будет сделан скриншот вашего текущего видимого экрана.
Esc: если вы нажмете escape, программа прекратит работу.
Shift: если вы нажмете Shift, будут зафиксированы начальные координаты, которые являются местоположением вашего указателя на экране.
Alt: если вы нажмете Alt, то он зафиксирует конечные координаты, которые также являются положением вашего указателя на экране (* но другое, лол. Я очень плохо объясняю вещи).
Вниз : И, наконец, если вы нажмете клавишу со стрелкой вниз, скрипт наберет для вас захваченные символы.
Вуаля, теперь у вас есть OCR на стероидах. Вот несколько скриншотов системы.
Теперь вы можете набирать тысячи слов за считанные секунды. Вы можете использовать эту программу, чтобы прокомментировать мой пост (* я рекламирую себя в своей статье)
Кто такой Сабин Шарма?
Если вы заинтересованы в автоматизации, вы должны проверить мою другую статью Автоматизация Tinder?! Преимущества программиста
Если вас интересуют алгоритмы, вам следует ознакомиться с другими моими статьями: Молекулярно-динамическое моделирование твердых сфер — приоритетная очередь в действии с Java, Создайте свою собственную игру на основе ИИ, Контроллер вентилятора NVIDIA для Linux (сделай сам). ».
А если вас интересует кибербезопасность, прочтите мою недавнюю статью Запачкать руки: использование уязвимости переполнения буфера в C