Програмування

Пишемо простий перекладач текстів із зображень і знімків екрана на Python

Якщо ви любите програмувати й трохи грати в текстові ігри, які часто бувають не російською мовою, то за годину можна зробити собі перекладач за допомогою кількох простих у використанні бібліотек. Він зможе перекладати текст із заздалегідь визначеної області екрана або просто з буфера обміну. Тобто запускаємо гру у віконному режимі так, щоб консоль із нашою програмою теж була видимою, натискаємо Win+Shift+S (це дає змогу виділити область у Windows 10), а потім F9 — виконується скрипт перекладу, і ми читаємо результат.

Отже, нам потрібна бібліотека pyscreenshot для захоплення зображення з екрана або його області. Для отримання зображення з буфера обміну беремо ImageGrab із бібліотеки PIL. Щоб не перемикатися щоразу на наш скрипт і щоб він міг працювати у фоні, використовуємо бібліотеку keyboard. А для самого перекладу є бібліотека googletrans. Тепер сам скрипт:

from googletrans import Translator  # переклад тексту через Google Translate
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 завантажує багато залежностей, зокрема бібліотеку для роботи з нейромережами, тож папка розростеться до двох гігабайтів. Що ж, це плата за можливість так легко написати подібну програму.

Залишити коментар

Вашу електронну адресу не буде оприлюднено. Обов’язкові поля позначено *