Пишем простой переводчик текстов из картинок и скриншотов на Python

Если вы любите программировать и еще немного играть в текстовые игры, которые часто бывают не на русском языке, то можно себе за час сделать переводчик с помощью нескольких простых в использовании библиотек. Переводить он сможет либо с заранее определенной области экрана, где появляется текст, либо просто из буфера обмена, т.е. запускаем игру в оконном режиме, так чтобы консоль с нашей программой тоже была видна и жмем Win+Shift+S (это позволяет выделить область под Win10) и далее жмем F9 — отрабатывает скрипт перевода, смотрим на перевод.

Итак нам нужна библиотека для захвата картинки с экрана или области — pyscreenshot, Для захвата изображения из буфера обмена берем ImageGrab из библиотеки PIL, для того чтобы не переключаться каждый раз в наш скрипт а он мог работать в фоне — берем библиотеку keyboard, ну и для самого перевода есть библиотека googletrans. Теперь собственно сам скрипт:

from googletrans import Translator  # перевод текста через гугл-транслейт
import pyscreenshot                 # захват изображения с экрана
import easyocr                      # распознавание текста с изображения
from PIL import ImageGrab           # для захвата изображения из буфера обмена
import keyboard                     # для захвата нажатий клавишь в фоне

########### Здесь настройка параметров утилиты ########################################
src_lang = 'en'                     # исходный язык текста
dst_lang = 'ru'                     # целевой язык для перевода
key_for_clipboard = 'f9'            # кнопка для перевода картинки из буфера обмена
key_for_screencapture = 'f12'       # кнопка для перевода области экрана
screen_region = (150,850,1400,1000) # область экрана, координаты границ окна захвата (Left, Top, Right, Bottom)

translator = Translator()
ocrreader = easyocr.Reader([src_lang])

def image_translate():
    """Перевод уже сохраненного изображения image_to_translate.png"""
    global ocrreader
    print('')
    # Распознавание текста на изображении
    result = ocrreader.readtext('image_to_translate.png', detail=0)
    resulttext = ' '.join(result)
    print('\033[92m' + resulttext + '\033[0m')
    # Перевод и вывод результата
    translated = translator.translate(resulttext, src=src_lang, dest=dst_lang)
    print(translated.text)

def capture_translate():
    """Скриншот и перевод"""
    try:
        screenshot=pyscreenshot.grab(bbox=screen_region)
        screenshot.save('image_to_translate.png', format='png')
        image_translate()
    except Exception:
        print('Ошибка')

def clipboard_translate():
    """Перевод изображения в буфере обмена"""
    im = ImageGrab.grabclipboard()
    if im==None:
        print('Вначале скопируйте в буфер обмена изображение')
    else:
        try:
            im.save('image_to_translate.png','png')        
            image_translate()
        except Exception:
            print('Ошибка')

keyboard.add_hotkey(key_for_screencapture, capture_translate)
keyboard.add_hotkey(key_for_clipboard, clipboard_translate)
print(f'Для захвата области экрана нажимайте {key_for_screencapture}')
print(f'Для перевода картинки из буфера обмена нажимайте {key_for_clipboard}')
keyboard.wait()

Создаем папку проекта, и в нем создаем виртуальную среду. Я это делаю под Windows, у вас могут быть отличия. Открываю консоль, перемещаюсь в эту папку и выполняю:

python -m venv env

Активируем

env\Scripts\activate

Последовательно ставим все пакеты:

pip install googletrans==3.1.0a0
pip install pyscreenshot
pip install easyocr
pip install keyboard

Далее можно просто сохранить приведенный выше исходник скажем в файл translate.py и запускать.

Есть один огромный минус этого переводчика — библиотека easyocr тянет кучу зависимостей в том числе библиотеку для работы с нейросетями, так что папка раздуется до двух гигабайт. Ну что-же, это плата за то что мы вообще можем так вот запросто написать такого рода программу.

Запись опубликована в рубрике Программирование с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *