LoginSignup
5
8

More than 3 years have passed since last update.

画像内の英文を和訳するPythonスクリプトを作りました

Last updated at Posted at 2019-06-09

はじめに

全く読めないわけではないのですが,英語を読むのが非常に遅いので,画像内英文の和訳を自動化したいなと思い,そのために,Pythonを用いることにしました.python2を使いましたが,python3でも動くと思います.入力画像はpng,jpgで動作確認しました.

また、本スクリプトをFlaskを用いてWebアプリにしたものがこちらです。無料枠なので激重だし、ページもHTMLオンリーなので殺伐としています。

実行環境は以下です.

macOS Mojave 10.14.5
Python 2.7.16
tesseract 4.0.0 ($ tesseract --versionの出力)
PIL 6.0.0     (>>PIL.PILLOW.VERSIONの出力)
pyocr 0.5.0 (>>pyocr.VERSIONの出力)
googletrans 2.4.0 (>>googletrans.__version__の出力)

環境構築

Macの場合は以下で実行環境が整う.

setup.sh
brew install python
brew install tesseract
pip install Pillow
pip install pyocr
pip install googletrans

ubuntuの場合はこちら(多分).

setup.sh
sudo apt install python
sudo apt install python-pip
sudo apt install tesseract
sudo pip install Pillow
sudo pip install pyocr
sudo pip install googletrans

完成したスクリプト

各公式ドキュメントのサンプルコードからスクリプトを持ってきて少し変更するだけでできた.

picen2jp.py
# coding: utf-8
from PIL import Image
import sys
args = sys.argv
import pyocr
import pyocr.builders
from googletrans import Translator

tools = pyocr.get_available_tools()
if len(tools) == 0:
    sys.exit(1)
tool = tools[0]

langs = tool.get_available_languages()
lang = langs[0]

txt = tool.image_to_string(
    Image.open(args[1]),
    lang=lang,
    builder=pyocr.builders.TextBuilder()
)
translator = Translator()
translated = translator.translate(txt, src='en', dest='ja')

print('-------------------和訳-------------------------------------------')
print(translated.text)
print('------------------------------------------------------------------')

実行結果

あらかじめ英文を入力したファイルをスクリーンショットとして保存した.
スクリーンショット 2019-06-09 3.11.34.png
この画像名を引数として先ほどのスクリプトを実行すると,
スクリーンショット 2019-06-09 3.15.27.png
のように英語を日本語に翻訳できた.
こんにちは世界・・・

使用ライブラリ

それぞれのライブラリの公式ドキュメントの説明を,上で載せたスクリプトで和訳をしてみた.

Pillow(Python Imaging Library)

こちら
スクリーンショット 2019-06-09 0.33.18.png
によると,

Pillowの文章画像の和訳
$ python pic2jap.py スクリーンショット* 
-------------------和訳-------------------------------------------
エース

Pythonイメージングライブラリ(フォーク)

枕はアレックスクラークと貢献者によるフレンドリーなPILフォークです。 PILはFredrik LundhによるPython Imaging Libraryです。
貢献者2019年現在、枕の開発はTideliftによってサポートされています。
------------------------------------------------------------------

若干文章が崩れているが,英文も見つつなら読み取れる.Pillowが枕(pillow talkのpillow)になっているようだ.エースは謎である.

pyocr(py optical character recognition)

こちら
スクリーンショット 2019-06-09 2.11.44.png
によると,

pyocrの文章画像の和訳
$ python picen2jp.py スクリー*
-------------------和訳-------------------------------------------
AVO1 0754

PyOCRはpython用の光学式文字認識OCRツールラッパーですつまりPythonプログラムからさまざまなOCRツールを使用するのに役立ちます

GNU / Linuxシステム上でのみテストされています同様のシステム* BSDなどでも動作するはずです Windowsでは動作するかもしれませんししないかもしれません
MacOSxなど
------------------------------------------------------------------

とのこと.pyocrを用いるとOCRツールを使えるようになる.

It may or may not work on Windows, MacOSX, etc

とあり,Macで実行したが無事動作した.

googletrans

こちら
スクリーンショット 2019-06-09 2.09.13.png
によると,

googletransの文章画像の和訳
$ python picen2jp.py スクリー*
-------------------和訳-------------------------------------------
Googletransは、Google Translate APIを実装した無料で無制限のpythonライブラリです。これは
Google Translate Ajax API。検出や変換などのメソッドを呼び出す。

Python 2.7以降および3.4​​以降と互換性があります。 (注:次のメジャーリリースではPython 2のサポートは中止される予定です。)

詳細はAPを参照してください。ドキュメンテーション。
------------------------------------------------------------------

とのこと.Google Translate APIをpythonで使えるようにするライブラリである.

Note: Python 2 support will be dropped in the next major release.

Python3でやればよかった・・・

最後のAPIがAPになってしまっていた.

解説

# coding: utf-8によって,ターミナル出力で日本語を使えるようになる.

args = sys.argvでコマンドライン引数を取得できるようにする.

txtには画像から抽出した英文が入っているため,そちらを確認したい場合は,print(txt)とするとよい.

translator.translate(txt, src='en', dest='ja')で翻訳をする.ここで,srcは入力言語,destは出力言語とのこと.

print(translated.text)翻訳後のテキストを出力する.

おわりに

スクリーンショットにする時点での改行によって少し文章が変になってしまっていますが,なかなか便利なスクリプトができたのではないでしょうか!

また,実際に自分で書いたのは少しだけなのにちゃんと動くものができるという事に感動するとともに,便利なライブラリを公開してくれている人に感謝しました.

ちなみに,スクリーンショットを撮ってすぐに翻訳して削除する場合は,

追加
import os
...
os.system('rm ' + args[1].replace(' ', '\ '))

とすると良いです.入力ファイル名を間違えると意図しないファイルが消えてしまうので,使用する場合は自己責任でお願いします

参考

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8