ChatGPTで複数写真の翻訳ソフトをつくってみた

最近、ChatGPTを使ってみています。ChatGPTにもバージョンがあって、openAIのChatGPTのサイトはGPT-3.5ターボらしくて、有料のAPIを使ったGPTはGPT-4で更に精度が上がっているみたいです。小学生と大学生ぐらいに違うみたいです。ChatGPTのサイトでは、前の会話の内容を忘れていたりするので、なんとなくわかる気がします。GPT-4になると、一般的な内容であれば、秘書として使えるかもしれませんね。人って、正直、キーワードしか聞いてなくて(覚えていなくて)、文章って適当なところありますよね。論文は、ミスリードしないように書く必要はありますが。

って、前置きはこれくらいにして、今回は、ChatGPTでプログラムをしてみました。

結果は、簡単にしたいことがあれば、一度試してみる価値はありです。今回のプログラムもほぼ変更なしで使えましたので。

英語が苦手な人には、翻訳作業ってかなり苦痛なので、写真を撮影して、翻訳アプリに頼ったりしますが、この時って1枚づつしかできないって思いませんか?その手間を解決するソフトです。コピペで作ったものなので、バグが沢山あると思うので、遊びだと思ってくださいね。

では、ChatGPTに聞いてみましょう。

Q.pythonでコードを書いてください。 ディレクトリを選択し、選択したディレクトリ内の写真全てに対して、文字認識をする。 次に、英語から日本語翻訳する。 原文の英語と翻訳後の日本語を表示する。

以下はPythonのコード例です。これには、ospytesseractPillowgoogletransライブラリが必要です。osライブラリは、ファイルとディレクトリを操作するために使用されます。pytesseractは、画像からテキストを抽出するために使用されます。Pillowは、画像を開くために使用されます。最後に、googletransは、英語から日本語への翻訳を実行するために使用されます。

chatGPT
import os
import pytesseract
from PIL import Image
from googletrans import Translator

# ディレクトリを選択
directory = input("ディレクトリを選択してください:")

# ディレクトリ内のすべてのファイルに対してループを実行
for filename in os.listdir(directory):
    if filename.endswith(".jpg") or filename.endswith(".png"):
        # 画像を開く
        img_path = os.path.join(directory, filename)
        img = Image.open(img_path)

        # 画像からテキストを抽出する
        text = pytesseract.image_to_string(img, lang='eng')

        # 英語から日本語への翻訳を実行する
        translator = Translator(service_urls=['translate.google.com'])
        translation = translator.translate(text, dest='ja')

        # 結果を表示する
        print("Original Text (元のテキスト):")
        print(text)
        print("Translated Text (翻訳されたテキスト):")
        print(translation.text)

このコードでは、ユーザーにディレクトリを選択するように求めます。次に、選択したディレクトリ内のすべての画像ファイルに対してループを実行します。各画像に対して、pytesseractを使用して画像からテキストを抽出し、googletransを使用して英語から日本語への翻訳を実行します。最後に、元のテキストと翻訳されたテキストを表示します。

ChatGPT

Q.選択、表示はguiでお願いします。

以下は、GUIを使用してフォルダを選択し、画像をテキスト認識し、翻訳するPythonコードの例です。このコードでは、tkinterライブラリを使用してGUIを作成しています。

ChatGPT
import os
import tkinter as tk
from tkinter import filedialog, messagebox
import pytesseract
from PIL import Image
from googletrans import Translator

class App:
    def __init__(self, master):
        self.master = master
        master.title("画像のテキスト認識と翻訳")

        self.select_folder_button = tk.Button(master, text="フォルダを選択", command=self.select_folder)
        self.select_folder_button.pack(pady=20)

        self.original_label = tk.Label(master, text="元のテキスト:")
        self.original_label.pack()

        self.original_text = tk.Text(master, height=10)
        self.original_text.pack()

        self.translated_label = tk.Label(master, text="翻訳されたテキスト:")
        self.translated_label.pack()

        self.translated_text = tk.Text(master, height=10)
        self.translated_text.pack()

    def select_folder(self):
        self.folder_path = filedialog.askdirectory()
        self.process_folder()

    def process_folder(self):
        if self.folder_path:
            # フォルダ内のすべてのファイルに対してループを実行
            for filename in os.listdir(self.folder_path):
                if filename.endswith(".jpg") or filename.endswith(".png"):
                    # 画像を開く
                    img_path = os.path.join(self.folder_path, filename)
                    img = Image.open(img_path)

                    # 画像からテキストを抽出する
                    text = pytesseract.image_to_string(img, lang='eng')

                    # 英語から日本語への翻訳を実行する
                    translator = Translator(service_urls=['translate.google.com'])
                    translation = translator.translate(text, dest='ja')

                    # 結果を表示する
                    self.original_text.insert(tk.END, text + "\n\n")
                    self.translated_text.insert(tk.END, translation.text + "\n\n")

            messagebox.showinfo("完了", "処理が完了しました。")

root = tk.Tk()
app = App(root)
root.mainloop()

このコードでは、tkinterライブラリを使用して、GUIを作成しています。ユーザーは「フォルダを選択」ボタンをクリックして、フォルダを選択できます。選択されたフォルダ内のすべての画像に対してループを実行して、画像からテキストを抽出し、英語から日本語に翻訳します。結果は、2つのテキストボックスに表示されます。最後に、処理が完了したことを示すメッセージボックスが表示されます。

ChatGPT

ほぼ完璧な内容でコードを返してくれました。ここから困るのは、環境作りでした。それもChatGPTに聞けばいいかもしれませんが、どう質問すればよいかも考えるのがめんどかったので、importに書いてあるモジュールをインストールしました。が、一発目はうごきませんでした。

1つめは、googletransのバージョンによってエラーが発生した。最初、pipでインストールしたが、この場合、バージョンを指定する必要があったみたいです。バージョンを入れずにインストールするとエラーでした。

今回は、4.0.0rc1を使用しました。

pip install googletrans==4.0.0-rc1

2つ目は、tesseractのエラーが発生した。結局は、昔インストールしたソフトがどこにあるかわからなかったから、pathを指定できなかったためである。なので、再度インストールして、path指定したらいけた。けど、翻訳の時に対象文字でないとエラーが発生した。が、うまく読めればエラーが発生しないため、改修はしなかった。

で、とりあえずできたのが下記のコード。

1枚目と2枚目の境がわかるようにとか、連結文字「ー」を消したりとかを若干行った。

import os
import tkinter as tk
from tkinter import filedialog, messagebox
import pytesseract
from PIL import Image
from googletrans import Translator
import re

path = os.getcwd()

pytesseract.pytesseract.tesseract_cmd = path + r'\Tesseract-OCR\tesseract.exe'

class App:
    def __init__(self, master):
        self.master = master
        master.title("画像のテキスト認識と翻訳")

        self.select_folder_button = tk.Button(master, text="フォルダを選択", command=self.select_folder)
        self.select_folder_button.pack(pady=20)

        self.original_label = tk.Label(master, text="元のテキスト:")
        self.original_label.pack()

        self.original_text = tk.Text(master, height=10)
        self.original_text.pack()

        self.translated_label = tk.Label(master, text="翻訳されたテキスト:")
        self.translated_label.pack()

        self.translated_text = tk.Text(master, height=10)
        self.translated_text.pack()

    def select_folder(self):
        self.folder_path = filedialog.askdirectory()
        self.process_folder()

    def process_folder(self):
        i = 1
        if self.folder_path:
            # フォルダ内のすべてのファイルに対してループを実行
            for filename in os.listdir(self.folder_path):
                if filename.endswith(".jpg") or filename.endswith(".png"):
                    # 画像を開く
                    img_path = os.path.join(self.folder_path, filename)
                    img = Image.open(img_path)

                    # 画像からテキストを抽出する
                    text = pytesseract.image_to_string(img, lang='eng')

                    # 連結文字 - を削除する
                    text="".join([i[:-1] if re.search(r'--*$', i) else i+ " " for i in text.splitlines()])
                    print(">>>>"+text)
                    # 英語から日本語への翻訳を実行する
                    translator = Translator(service_urls=['translate.google.com'])
                    translation = translator.translate(text, dest='ja')

                    # 結果を表示する
                    self.original_text.insert(tk.END, f"{i}枚目\n" + text +"\n"+ "="*70 + "\n")
                    self.translated_text.insert(tk.END, f"{i}枚目\n"  + translation.text +"\n"+ "="*70 + "\n")
                    i = i + 1
            messagebox.showinfo("完了", "処理が完了しました。")

root = tk.Tk()
app = App(root)
root.mainloop()

このような画像を翻訳する。

なんとなく、翻訳されているように感じる。

って、ちなみに、元のテキストの部分は一度、書かれると編集は自由なので、元のテキストをdeepLに貼り付けていいです。OCRだけで使ってもいいかもしれません。

って、ことで、ChatGPTで翻訳ソフトが簡単にできてしまいます。1時間もかからずに。

便利な世の中になりました。まあ、本来は翻訳後が重要なので、翻訳に時間がかかるなら、外注すればよく、その費用が安くなったと考えるとChatGPTの有料もありかもです。

今回作ったものは、エラーありまくりですが、試しに使ってもらえるように、下記のフォルダに保存しています。よかったらどうぞ。翻訳できなかった時にエラーでず、なにもなかったことになりますので、注意ください。

https://drive.google.com/drive/folders/1P7yiPbh6cRL-kuTJ69BtdGqQLJHkkHTz?usp=share_link

コードをexeファイルにしたものが入っています。使い方はフォルダの中にはいっていますので、参考にしてください。

ちなみに、翻訳ソフト Readable(https://readable.jp/)はPDFをそのままの形式で翻訳してくれたりするので、こちらのソフト等を使うほうがいいですね。

探すと、他にも効率化できそうな気がしますね。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中