Как автоматически перевести много изображений через Google Translate: Подробная инструкция

Если вы столкнулись с необходимостью перевести текст на десятках или сотнях изображений, ручной процесс через Google Translate может занять целый день. К счастью, есть способ автоматизировать задачу, даже если официальные инструменты вроде Google Cloud Translate больше не поддерживают функцию перевода изображений.

Расскажу, как настроить систему, которая сама загрузит изображения, запустит перевод и сохранит результаты. Вам не понадобятся навыки программирования — достаточно внимательно следовать инструкциям.

Подготовка к работе: что потребуется

Перед началом установите два компонента:

  1. Браузер Google Chrome (или другой, но скрипт настроен под Chrome).
  2. AutoHotkey V2 — бесплатная программа для автоматизации действий. Скачайте её с официального сайта (обратите внимание: нужна именно версия 2.0, так как скрипты для V1 не совместимы).

Далее создайте текстовый файл со списком путей к вашим изображениям. Например, если картинки лежат в папке «C:Фото», файл может выглядеть так:

C:Фотоизображение1.jpg  
C:Фотоизображение2.png  
D:Архивдокумент_2024.jpg

Сохраните его в удобном месте, например, «C:Спискимои_фото.txt». Важно: используйте расширение .txt и избегайте пробелов в именах папок (лучше «moi_foto» вместо «мои фото»).

Настройка скрипта для автоматизации

Скрипт на AutoHotkey будет имитировать действия человека: открывать браузер, загружать изображения, нажимать кнопки перевода и сохранять результат. Приведу два варианта — базовый и продвинутый.

Простой скрипт (без обработки ошибок):

#Requires AutoHotkey v2.0  
urlGT := "https://translate.google.com/?sl=ja&tl=en&op=images"  ; Замените ja на исходный язык, en — на целевой  
fpImageList := "C:Спискимои_фото.txt"  
msSleep1 := 1000  ; Пауза после открытия браузера  
msSleep2 := 2000  ; Пауза после загрузки изображения  

strFps := FileRead(fpImageList)  
arrFps := StrSplit(strFps, "`n")  

Run(urlGT), Sleep(msSleep1)  

for strFp in arrFps {  
    strFp := Trim(strFp, "`r`n`"")  ; Удаляем лишние символы  
    Send("{Enter}"), Sleep(100), Send("{Enter}"), Sleep(100)  ; Открываем диалог выбора файла  
    Send(strFp), Send("{Enter}"), Sleep(msSleep2)  ; Вводим путь к файлу  
    Send("+{Tab}"), Sleep(50), Send("+{Tab}"), Sleep(50)  ; Переходим к кнопке «Скачать перевод»  
    Send("{Enter}"), Sleep(500)  ; Сохраняем  
    Send("!{Left}"), Sleep(msSleep1)  ; Возвращаемся назад (Alt+Left)  
}  
MsgBox("Готово!")

Что нужно изменить в коде:

  • В строке urlGT замените sl=ja на код исходного языка (например, ru для русского), tl=en — на целевой язык.
  • В fpImageList укажите путь к вашему списку изображений.
  • Если браузер открывается медленно, увеличьте msSleep1 до 2000–3000.

Улучшенный скрипт (с проверкой ошибок):

#Requires AutoHotkey v2.0

; URL Google Translate с настройками языков (sl=исходный, tl=целевой)
urlGT := "https://translate.google.com/?sl=ja&tl=en&op=images"  
; Путь к файлу со списком изображений (поддерживает относительные и абсолютные пути)
fpImageList := "C:Спискимои_фото.txt"                             

; Настройки временных интервалов (в миллисекундах)
msSleepLoad := 2000    ; Ожидание загрузки страницы
msSleepLoad2 := 1000   ; Дополнительное ожидание рендеринга
msSleepTL := 3000      ; Ожидание завершения перевода
msSleepDL := 1000      ; Ожидание скачивания файла
msSleepStdLong := 300  ; Стандартная длинная пауза
msSleepStdShort := 100 ; Короткая пауза

; Параметры обработки ошибок
numTries := 5          ; Количество попыток при ошибках
secWait := 5           ; Пауза между попытками (в секундах)

; Настройки папок
TargetSuffix := "Перевод" ; Суффикс для папки с переводами
A_Downloads := RegExReplace(A_Desktop, "Desktop$", "Downloads") ; Путь к папке загрузок

; Чтение списка файлов
strFps := FileRead(fpImageList)
arrFps := StrSplit(strFps, "`n")

Run(urlGT) ; Запуск браузера
OpenGT()   ; Инициализация страницы

; Основной цикл обработки изображений
for strFp in arrFps {
    strFp := Trim(strFp, "`r`n`"") ; Очистка пути
    fileName := StrSplit(strFp, "\").Pop() ; Извлечение имени файла
    fpTargetDir := RegExReplace(strFp, "\\" fileName "$","") "-" TargetSuffix ; Папка назначения
    fpTargetDL := A_Downloads "\" fileName ; Временный путь скачивания
    fpTarget := fpTargetDir "\" fileName   ; Итоговый путь
    
    ; Пропуск уже обработанных файлов
    if FileExist(fpTarget) = "" {
        TranslateRun(strFp) ; Запуск перевода
        n := 0
        
        ; Повторные попытки при ошибках
        While (!FileDLMove(strFp, fpTargetDir, fpTargetDL, fpTarget)) && n < numTries {
            Run(urlGT)
            OpenGT()
            TranslateRun(strFp)
            n += 1
        }
        
        ; Возврат на исходную страницу
        Send("!{Left}") ; Alt+Left для навигации назад
        OpenGT()
    }
}
MsgBox("Перевод завершен!")

; Функция инициализации страницы перевода
OpenGT() {
    n := 0
    While (!WinWaitActive("Google Translate",, msSleepLoad/1000)) && (n < numTries) {
        Run(urlGT)
        n += 1
    }
    Sleep(msSleepLoad2)
    Send("{Enter}"), Sleep(msSleepStdLong), Send("{Enter}")
}

; Функция выполнения перевода
TranslateRun(strFp) {
    n := 0
    ; Открытие диалога выбора файла
    While (!WinWaitActive("Open",, secWait)) && (n < numTries) {
        Send("{Esc}"), Sleep(msSleepStdShort), Send("{Esc}")
        Run(urlGT)
        OpenGT()
        n += 1
    }
    
    ; Проверка успешного открытия диалога
    if !(WinGetTitle("A") == "Open") {
        MsgBox("Ошибка открытия диалога выбора файла")
        ExitApp
    }
    
    ; Ввод пути и запуск перевода
    ControlSetText(strFp, "Edit1")
    Send("{Enter}"), Sleep(msSleepTL)
    
    ; Навигация к кнопке скачивания
    Send("+{Tab}"), Sleep(msSleepStdShort)
    Send("+{Tab}"), Sleep(msSleepStdShort)
    Send("{Enter}"), Sleep(msSleepDL)
}

; Функция перемещения файла
FileDLMove(strFp, fpTargetDir, fpTargetDL, fpTarget) {
    try {
        ; Создание папки при необходимости
        if DirExist(fpTargetDir) == ""
            DirCreate(fpTargetDir)
        
        ; Перемещение файла из загрузок
        FileMove(fpTargetDL, fpTarget, 0)
        return true
    } catch {
        return false
    }
}  

Ключевые настройки:

  • TargetSuffix — название папки, куда сохранятся переводы. Если исходная папка «C:Фото», переводы попадут в «C:Фото-Перевод».
  • numTries := 5 — количество попыток при ошибке загрузки.
  • secWait := 5 — пауза между попытками (в секундах).

Запуск и возможные проблемы

  1. Сохраните скрипт в файл с расширением .ahk (например, «translate_images.ahк»).
  2. Щёлкните по нему правой кнопкой мыши и выберите Run Script.
  3. Не перемещайте мышь и не используйте клавиатуру во время работы скрипта — это может сбить автоматизацию.

Если перевод не запускается:

  • Убедитесь, что в браузере по умолчанию выбран Google Chrome.
  • Проверьте, не блокирует ли антивирус AutoHotkey (временно отключите защиту).
  • Увеличьте значения msSleep1, msSleep2 в коде, если компьютер медленный.

Совет: Перед обработкой всех изображений протестируйте скрипт на 2–3 файлах. Если всё работает, запускайте полный цикл.

Альтернативные методы

Если скрипт не подошёл, попробуйте:

  1. Google Drive + Документы: Загрузите изображения в Google Drive, откройте через Документы и используйте встроенный переводчик. Подходит для небольших объёмов.
  2. Мобильное приложение Google Translate: Снимайте фото через камеру, но это тоже ручной процесс.

Однако автоматизация через AutoHotkey остаётся самым эффективным методом для пакетной обработки. Если у вас возникнут сложности, напишите в комментариях — помогу разобраться!

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

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

Новое
Интересное