まいばすけっとのレシートをtesseract.jsでOCR読み込みしてみる #リテールテック


[リテールテックアドベントカレンダー](https://qiita.com/advent-calendar/2021/retailtech)の10日目の記事です。

スーパーといえばレシートが発行されると思いますが、このデータを上手く読み込んでテキスト情報にできないか試してみたいと思ったのでトライしてみます。

調べるとよく出てくるtesseract.jsを使ってみたいモチベもありつつ、アドベントカレンダー間に合わせよう的な勢いで執筆しています。

https://www.npmjs.com/package/tesseract.js

## レシートの写真はグーグル先生がいっぱい持っている

もう最寄りのまいばすけっとが閉まっている(現在23:30)のでグーグル先生に画像を貸してもらいます。

> ![スクリーンショット 2021-12-10 23.27.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/cd362447-b348-690d-224a-e3848d381606.png "スクリーンショット 2021-12-10 23.27.49.png")

## tesseract.jsを試す

無料で試せるのが良いですね！

```
npm i tesseract.js
```

これでtesseract.jsのv2がインストールされる模様です。

[こちらの記事](https://note.com/dafujii/n/ne10d5b05f9d7)を参考にプログラムを実行してみます。

```js
const { createWorker } = require("tesseract.js");

const worker = createWorker();

(async () => {
  await worker.load();
  await worker.loadLanguage("jpn");
  await worker.initialize("jpn");
  const {data: { text } } = await worker.recognize("image.jpg");

  console.log(text);
  await worker.terminate();
})();
```

> ![スクリーンショット 2021-12-10 23.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/2aba6b03-d2ca-30c9-99b7-ad5ca48489d5.png "スクリーンショット 2021-12-10 23.36.38.png")

おおお、、、若干イマイチだけど読み込めてる情報もありそう

## 検証結果を何個か

### 検証1 綺麗なレシート

#### まずは影とかがなくて綺麗なレシート

> ![スクリーンショット 2021-12-10 23.37.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/1346f741-877e-aaf4-2e8c-a87bb019b972.png "スクリーンショット 2021-12-10 23.37.52.png")
> Photo by Google

#### 読み取り結果

```
ー ー ら り ⑧ る タ `
す い ば す け け っ と
元 住 吉 駅 前 店
TELD④④-④③①-00⑤⑧ FA0④④-④③①-00⑥⑨
ETf
が M ル ル ル MMKMKMFKMM を M④WAAAMMM#
営 業 時 間 : あ さ ⑦ 時 ~ よ る ① ② 時
年 中 無 休
ル k か ん ル が K ま M あ M ま ま ル ④ せ ま ま KMMMKk ル ④MMMAMA
0①0③ ⑳②0/ ④ ⑨( 木 ) ⑰:0①
取 ③②④⑦ 責 :00③④③③③④⑦
TVB P 大 盛 り ご は ん ②⑨⑦ 崇
〈③ 個 X 単 ⑨
ス ト ロ ン グ G F ⑪⑤
ス ト ロ ン グ レ モ ン ②③0
② 個 X 単 ⑪⑤
TV バ ー リ ア ル リ ッ チ ⑪0
朝 の 定 番 食 パ ン ⑨⑧※※
小 計 ー
外 税 ⑧ 対 象 額 \⑨⑤
外 税 啓 ①
外 税 ①0④ 災 象 額 \⑤⑤
外 税 ①0K \
含 計 ⑤③⑥
i 支 払 初 ②⑥
お 釣 り \ ロ
お 買 上 商 品 数 :⑧
※EI は 軽 滅 税 宮 ⑧ % 対 象 商 品
[ ク レ ジ ッ ト カ ー ド 売 上 票 ]
p の 和 椎 折 め
邉一 ド メ ル ペ イ 電 子 マ ネ ー ⑨⑨⑥B③
会 員 番 号 AWOG-OG-O-①①⑤⑨
お 取 抜 日 ⑳②0 年 0④ 月 ⑨ 日
取 引 内 容 お 買 上
伝 票 番 号 ①0③ ②⑦④
取 揃 区 分 ① 回
金 _ 額 \ ⑨ ② ⑥
ege _ 00000⑦②
WAON P 0 ① N 丁 会 員 勢 集 中 !
今 す ぐ 会 員 登 録 で オ ト ク に お 買 物 !
http://www.Smartvaon.COmi
mMMWMW
```

#### 考察

`元 住 吉 駅 前 店`などは結構良い感じですね。
店舗の名前は完璧っぽい

`TELD④④-④③①-00⑤⑧ FA0④④-④③①-00⑥⑨`などの電話番号は怪しい。。。

### 検証2 影付きなレシート

#### 影が入ってるレシートです。

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/d1e2b035-5779-2cf1-0081-29d78f8a2e3f.png "image.png")
> Photo by Google

#### 読みとり結果

```
xxxxxxxxxxxま い ば さ す け っ と
千 駄 木 ③ 丁 目 店
`ELO③-⑤⑧①⑤-③⑧⑦⑦ FAX0③-⑤⑧①⑤-③⑧⑦⑧
あ か か kbkk を k ま も か も を ょ か と も も か ゃ も も も も も か
営 業 時 間 : あ さ ⑧ 時 ー よ る ① ② 時
年 中 無 休
ネ ネ ト ぁ ル か か ま か ま ま か か か ま も か も を か か も も を ぁ る か も も も

⑪⑨

⑲⑨

⑲⑨

0④

S っ ロ

⑳
ギ ロ

税 等 )
_ ⑥⑧
⑧ ー鍵

```

#### 考察

`ま い ば さ す け っ と`はかなり惜しい。
`千 駄 木 ③ 丁 目 店`はやはり読み取れてるので店舗名というか漢字の読み取りに強いのかもしれないですね。

商品名や金額はほぼほぼ認識できてないですね苦笑

### 検証3 - 手も入ってるパターン

#### レシートを持つ手も写ってるもの

> ![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/9bbcd99c-a31e-89fd-4d5d-8cc8d0577dba.png "image2.png")
> Photo by Google

#### 読み取り結果

```
' 琴 と ー鷺鷺嬬ゝ~c
誌 ー キ ー ョ パ さ /
ッ 拳 代
i ② ② X ち ⑧D
E⑤⑤ Wumtel
ヵ y ト RR よ は E
甕一占ーラクスープ E
cmtwop
⑤ umts② メ ッ ぅ ク lte
P C t S
ヽ ト ー m
ヾ ヽ Ex u ⑧
然 va
b ぁ r ー の ④⑧
^ ②②① で S
に Y ロ
ペ _ ommmes
は ュ ーma②⑧ ypumgarawiems
c [ ゥ レ と ッ + ヵ ー ド ま ち
、 aams わ り
キ Ammets
沼 e rees⑧
然 器 竿 RogeB
蜀 談 .
江 団 代 s③④⑥
```

#### 考察

これはかなり厳しいですね。こんなに読めないとは苦笑
`江 団 代`とか出てますがそれっぽいものが元のレシート画像から読み取れないのでご認識なんでしょう。


あとは画質もちょっと悪いのでそれも原因かもしれません。

## まとめ - Tesseract.jsは日本語怪しいかも

- Tesseract.jsの日本語読み取りは漢字は強いけど、カタカナなどには弱そう
- 影が入ったりすると厳しい
- 解像度も低いと厳しい

ということでまいばすけっとのレシートをちゃんと読み取ることは今回はできませんでした。

他の企業だとフォントが違う、構成が違うなどでまた読み取りやすさは変わるかもしれないですが、Tesseract.jsはそこまで日本語に強くないよな印象を受けました。

無償で日本語OCRをやるときはまた別の選択肢を検討したいです。