LINE CLOVA OCRを使ってみる

# はじめに

LINEが提供する[CLOVA OCR](https://clova.line.me/clova-ocr/)をとある開発で使うことになりました。あまりドキュメントがないようだったのでざっと試したことを書いておきます。とりあえずはOCR Freeプランのセットアップからベータテストによる認識テストまでやってみました

# 利用できるようになるまで

CLOVA OCRは産業利用に絞って提供されているようで利用するためには 資料請求 -> LINEの担当さんと話をする -> アカウントの払い出してもらう という流れになります

利用可能となるとまずNEVER CLOUD PLATFORMアカウント登録を済ませてコンソールにサインイン -> CLOVA OCRのサービスドメインを作成 というステップでCLOVA OCRをセットアップします。CLOVA OCRはNEVER CLOUD PLATFROMの中のサービスの一つという位置づけのようです。コンソールはこんな感じです

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/90aa949e-2ed7-fd6a-f2b5-6ccc3c58a42d.png)

# CLOVA OCRのドメインを作成する

コンソールのサイドメニュー Products & Services からCLOVA OCRを選択し、`+ 新規ドメイン` ボタンをクリックしてCLOVA OCRのドメインを作成します

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/a331a32d-e124-fc07-de40-e3b747ba1008.png)

登録画面はこんな感じです。`ドメイン名`と`ドメインコード`は任意の文字列。それぞれ入力した後に`チェック`をクリックして検証してください。よくわからないけどドメイン名とドメインコードは同一でも問題ないっぽい？

`サポート言語`は日本語、`サービスタイプ`はとりあえず無料プランがあるTemplateを選択。たぶんここで`General`を選択して作成すると[General(非定型型)の定額料金](https://clova.line.me/clova-ocr/)が課金されると思うので注意。`認識モデル`はBasic、`サービスプラン`は無料のFreeを選択します。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/3fc3e4bb-a297-4a36-c6ed-2f2c94549281.png)

ドメインを作成するとコンソールのリストに追加されるので、右端の`テンプレートビルダ`をクリックします。CLOVA OCRのコンソールに遷移するのでサイドメニューの`テンプレートリスト`をクリックします。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/f785139e-12bb-632a-6e41-3531363877d6.png)

# テンプレートを作成する

`+テンプレート作成`をクリックするとテンプレート作成に遷移します。`テンプレート名`を入力して`認識モデル`Basicを選択し`確認`ボタンをクリックすると検証後テンプレートが作成されます。まずこのステップを踏まないと下段でサンプル画像がアップロードできないので注意してください。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/cd232c82-2221-a0c3-4e2e-8220cb7cbead.png)

サンプル画像をアップロードすると検出フィールドが設定可能になります。今回のサンプル画像リアル業務を想定して出金伝票の無料テンプレートをダウンロードして印刷したものを撮影したものを使用しました。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/d984365d-5531-f60c-3ea9-18a4b542a1c5.png)

学習する画像自体に影があったりする業務で現実的な品質の場合もちゃんとした検出精度が出るか？を検証する意図です

![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/afe20cc2-8b90-e919-74a5-145554eb630b.jpeg)

まず、代表サンプルとして書類の見出しを設定する。画像の「出金伝票」を囲って枠右下`✓`をクリック、`代表サンプル名`を「出金伝票」と入力し`確認`をクリックして設定します

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/10faf596-e930-0b4b-b48c-49590ed0b6b5.png)

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/5bc109ec-576d-d0bc-d472-24d418ed42cb.png)

次に`フィールド指定`欄の`+フィールド`をクリックしてプレビューで検出フィールド範囲を設定します

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/8094f880-e038-8fc3-4079-183ed6fd35bb.png)

検出フィールド枠の右下の`✓`をクリックするとフィールド指定欄に新規フィールドが追加されるので`フィールド名`を入力して`保存`をクリックします

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/46191314-1aa6-c274-2a4d-ab75ea58a62e.png)

上記の操作を繰り返して検出するすべてのフィールドを設定します。今回は内訳の1行目だけを検出するようにしました。金額欄はマルチボックスにしないといけないんだろうけどBasicでは使えないためフィールドで設定してみた。金額の認識精度は悪くなるんじゃないかと思います

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/eb4ee859-52a3-42ff-894c-6e3afe8e0cb1.png)

作成したテンプレートは`テンプレートリスト`に掲載されます

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/81bc1a0b-9f9a-2859-ad43-b362c3fbaf89.png)

# テンプレートをベータリリースする

サイドメニューの`リリース`をクリックします

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/894475ea-7932-bb5f-22f2-004074272926.png)

リリース管理画面から上記でつくったテンプレートの`ベータリリース`をクリックする

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/96415601-1502-b8ef-52b7-c423cdb16f83.png)

`確認`をクリックする。これで作成したテンプレートがベータリリースとして展開されテスト画面でテスト可能になります

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/642358de-d364-256f-72bd-70c37f76c6f3.png)

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/6eaab88f-21e3-8937-6efc-bf38d337fa52.png)

# 検出テストする

サイドメニューの`テスト`をクリックしてテスト画像欄の`ファイル選択`をクリック、テストのための記入済み伝票の画像をアップロードします

![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/e6e27e5b-3217-9ea4-4b25-455db35051f5.png)

![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/07dc6e4b-875d-d35f-7ae0-a67f75060ea9.png)

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/d9980592-85eb-31d1-0d01-b2d94aa614ee.png)

今回は印刷した伝票に手書きで記入したものを撮影しテスト画像として使用しました

![21-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/f3666e1e-584f-29a6-7cee-b348d49aa6ec.jpeg)

アップロード後、`テスト`をクリックします

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/d13af70b-dd46-8ce7-a801-217485965452.png)

`確認`をクリックします

![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/c3a9ea82-8895-a380-44ec-ee357c8b4d6a.png)

テストが正常に完了するとプレビュー右側に検出結果が表示されます。ざっと見た感じいい感じで検出されているようですね

![24-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61995/2c6c1eb9-1b2c-4a4f-1541-93e42d1f21c3.png)

このテストで意図しなかった検出結果は以下2点になりました


- `コード`フィールドは`100100123`と書いたつもりだったが`100 100123`となった。まあたしかに手書きのほうで間空けちゃってるよね
- `金額1`フィールドの値が空白で区切られている

金額1のほうは予想通りPremiumで利用可能なマルチボックスを指定してないので精度は落ちました。また何度かテストしたら`2 8 0 0 0 O`(最後がアルファベットのオー）になったりしました。おしい

しかしFreeプランで利用できるフィールドだけでも思ったよりしっかりと認識できてました。Premiumを利用するという手もありますが、これくらいならどちらもAPIで結果取得後に後処理すという手でも十分いけそうに思います

# おわりに

CLOVA OCRをざっと体験してみました。この後も手書き出金伝票をいくつかテストしてみましたが、検出精度は期待より良くて普通に業務で利用できる品質だと感じました。

テンプレートの設定がWebベースのGUIで簡単にできるがいいです。実業務でテンプレートを量産する負担も少なくなりそう。トラフィックが少ない利用ケースだとFreeプランでも十分行けそうな気がするのでうまく使うとコスパはとても高い何かができそうな気もします。

今後は時間を見つけて踏み込んだ精度検証をやったりPremiumを使ってみたりしてそのあたりも書いていこうと思います。