easyocr で数字を読むときの en と ja の違い

数字だけが画像にあるときは、en だけを入れたほうがよさそう、というめも。

やってる作業は、「¥4,000」みたいな値段が書いてある画像から値段の部分だけを切り抜いて OCR かけるというもの(この記事では OCR をかける部分についてだけ)。

コードはこういうものを使った。

import easyocr
import cv2
import os
import matplotlib.pyplot as plt

LANG = "ja"

reader = easyocr.Reader([LANG])

x = 48
im_path = os.path.join(CROP_DIR, "rising2_3", "01_03.jpg")
im = cv2.imread(im_path)
# 「¥」のとこを落とす
cropped_im = im.copy()[:, x:,:]

fig, axes = plt.subplots(1, 2)
axes[0].imshow(im)
axes[1].imshow(cropped_im)

reader.readtext(im[:, x:,:])[0][1]

LANG = "ja" のとき

認識結果に無理やり日本語を入れてきて、たとえば 「900」 の画像が 「9』」になる。「¥」がある方でも「¥900」が「雪卯」みたいに読まれてた。記号は読めなかったはずなので、それに引っ張られて壊れるのかも。

LANG = "en" のとき

数字だけ切り抜いてあげれば正しく認識してくれる。¥が入ったまんまだと、¥がアルファベットに無理やりなおされて、それに引きずられて「0」が「o」になったりする。