最近、ChatGPTを使ってみています。ChatGPTにもバージョンがあって、openAIのChatGPTのサイトはGPT-3.5ターボらしくて、有料のAPIを使ったGPTはGPT-4で更に精度が上がっているみたいです。小学生と大学生ぐらいに違うみたいです。ChatGPTのサイトでは、前の会話の内容を忘れていたりするので、なんとなくわかる気がします。GPT-4になると、一般的な内容であれば、秘書として使えるかもしれませんね。人って、正直、キーワードしか聞いてなくて(覚えていなくて)、文章って適当なところありますよね。論文は、ミスリードしないように書く必要はありますが。
って、前置きはこれくらいにして、今回は、ChatGPTでプログラムをしてみました。
結果は、簡単にしたいことがあれば、一度試してみる価値はありです。今回のプログラムもほぼ変更なしで使えましたので。
英語が苦手な人には、翻訳作業ってかなり苦痛なので、写真を撮影して、翻訳アプリに頼ったりしますが、この時って1枚づつしかできないって思いませんか?その手間を解決するソフトです。コピペで作ったものなので、バグが沢山あると思うので、遊びだと思ってくださいね。
では、ChatGPTに聞いてみましょう。
Q.pythonでコードを書いてください。 ディレクトリを選択し、選択したディレクトリ内の写真全てに対して、文字認識をする。 次に、英語から日本語翻訳する。 原文の英語と翻訳後の日本語を表示する。
以下はPythonのコード例です。これには、
chatGPTos
、pytesseract
、Pillow
、googletrans
ライブラリが必要です。os
ライブラリは、ファイルとディレクトリを操作するために使用されます。pytesseract
は、画像からテキストを抽出するために使用されます。Pillow
は、画像を開くために使用されます。最後に、googletrans
は、英語から日本語への翻訳を実行するために使用されます。
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)
このコードでは、ユーザーにディレクトリを選択するように求めます。次に、選択したディレクトリ内のすべての画像ファイルに対してループを実行します。各画像に対して、
ChatGPTpytesseract
を使用して画像からテキストを抽出し、googletrans
を使用して英語から日本語への翻訳を実行します。最後に、元のテキストと翻訳されたテキストを表示します。
Q.選択、表示はguiでお願いします。
以下は、GUIを使用してフォルダを選択し、画像をテキスト認識し、翻訳するPythonコードの例です。このコードでは、
ChatGPTtkinter
ライブラリを使用してGUIを作成しています。
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()
このコードでは、
ChatGPTtkinter
ライブラリを使用して、GUIを作成しています。ユーザーは「フォルダを選択」ボタンをクリックして、フォルダを選択できます。選択されたフォルダ内のすべての画像に対してループを実行して、画像からテキストを抽出し、英語から日本語に翻訳します。結果は、2つのテキストボックスに表示されます。最後に、処理が完了したことを示すメッセージボックスが表示されます。
ほぼ完璧な内容でコードを返してくれました。ここから困るのは、環境作りでした。それも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をそのままの形式で翻訳してくれたりするので、こちらのソフト等を使うほうがいいですね。
探すと、他にも効率化できそうな気がしますね。