[Python] スクショ→範囲選択→OCR→翻訳

#緒言
PDFや画像中の英文をさくっと翻訳したかった。

#コード全体
↓の記事をかなり参考にさせていただきました（ありがてえです)。
範囲指定に関してはこちらの記事参照ください。

https://qiita.com/hisakichi95/items/47f6d37e6f425f29c8a8

```python:area_translator.py
import os
import tkinter
from tkinter import messagebox
import pyautogui
from PIL import Image, ImageTk, ImageEnhance, ImageOps
import pyocr
import pyocr.builders
from googletrans import Translator
import re

RESIZE_RETIO = 1.5

# Tesseractのパスを通す
path_tesseract = "C:\Program Files\Tesseract-OCR"
if path_tesseract not in os.environ["PATH"].split(os.pathsep):
    os.environ["PATH"] += os.pathsep + path_tesseract
# OCRエンジンの取得
tools = pyocr.get_available_tools()
tool = tools[0]

# ドラッグ開始時の処理
def start(event):
    global start_x, start_y 
    canvas.delete("rect") 
    canvas.create_rectangle(event.x, event.y, event.x + 1, event.y + 1,
                             outline="red", tag="rect")
    start_x, start_y = event.x, event.y

# ドラッグ中の処理
def drag(event):
    if event.x < 0:
        end_x = 0
    else:
        end_x = min(img_resized.width, event.x)
    if event.y < 0:
        end_y = 0
    else:
        end_y = min(img_resized.height, event.y)

    canvas.coords("rect", start_x, start_y, end_x, end_y)

# ドラッグ終了時の処理
def release(event):
    start_x, start_y, end_x, end_y = [round(n * RESIZE_RETIO) for n in canvas.coords("rect")]
    #指定範囲でトリミング
    img_region = img.crop((start_x, start_y, end_x, end_y))
    #画像を読みやすいように加工。
    img_rgb = img_region.convert('RGB')
    #反転フラグ取得
    wb_flg = bln.get()
    
    if wb_flg: #チェックされている場合(背景黒)
        img_rgb2 = ImageOps.invert(img_rgb) 
    else:
        #画像を読みやすいように加工
        con_img = ImageEnhance.Contrast(img_rgb)
        img_rgb = con_img.enhance(2.0)
        imsize = img_rgb.size
        img_rgb2 = Image.new('RGB', imsize)

        border=200
        
        for x in range(imsize[0]):
            for y in range(imsize[1]):
                r,g,b=img_rgb.getpixel((x,y))
                if r > border or g > border or b > border:
                    r = 255
                    g = 255
                    b = 255
                img_rgb2.putpixel((x,y),(r,g,b))
    #OCR
    builder = pyocr.builders.TextBuilder()#tesseract_layout=6)
    txt = tool.image_to_string(img_rgb2, lang='eng', builder=builder)
    
    #改行を無くす処理
    txt = re.sub(r'\n',' ',txt)
    messagebox.showinfo(u'OCR結果',txt) #確認用

    #翻訳機
    translator = Translator()
    translated = translator.translate(txt, src='en', dest='ja')
    txt = translated.text
    messagebox.showinfo(u'翻訳機',txt)

#スクショ更新用
def draw_image():
    global img, img_tk
    img = pyautogui.screenshot()
    img_resized = img.resize(size=(int(img.width / RESIZE_RETIO),
                                   int(img.height / RESIZE_RETIO)),
                             resample=Image.BILINEAR)
    img_tk = ImageTk.PhotoImage(img_resized)
    canvas.itemconfig(item, image=img_tk) 

# メイン処理 
if __name__ == "__main__":
    img = pyautogui.screenshot()
    img_resized = img.resize(size=(int(img.width / RESIZE_RETIO), 
                                   int(img.height / RESIZE_RETIO)),
                             resample=Image.BILINEAR)
    root = tkinter.Tk()
    img_tk = ImageTk.PhotoImage(img_resized) 
    canvas = tkinter.Canvas(root, 
                            bg="black", 
                            width=img_resized.width,
                            height=img_resized.height)
    item = canvas.create_image(0, 0, image=img_tk, anchor=tkinter.NW)

    #反転フラグボタン
    bln = tkinter.BooleanVar()
    bln.set(False)
    chk = tkinter.Checkbutton(root, variable=bln, text = u'背景黒')
    chk.pack(expand=True, side='bottom')

    #スクショ更新ボタン
    buttontext = tkinter.StringVar()
    buttontext.set(u"スクショ更新")
    button = tkinter.Button(root, textvariable=buttontext, command=draw_image)
    button.pack(expand=True, side='bottom')

    canvas.pack()
    canvas.bind("<ButtonPress-1>", start)
    canvas.bind("<Button1-Motion>", drag)
    canvas.bind("<ButtonRelease-1>", release)

    root.mainloop()
```

#内容
###OCR
※Tesseractのインストールが必要です
↓を参考にしました。

https://rightcode.co.jp/blog/information-technology/python-tesseract-image-processing-ocr#_PyOCR

###翻訳
googletransのエラーで詰まりましたが、googletrans==4.0.0-rc1のインストールで動きました。
プロキシ設定する場合は↓でいけました

```py
translator = Translator(proxies={'http://hogehoge'})
```

#結言
ちゃんと英語勉強したほうがいいのかもしれません。