Googleの新サービス「AppSheet」でOCR（画像からの文字起こし）機能を試してみる（ベータ版）

##はじめに
こんにちは！
Google社が買収した「AppSheet」なる、
ローコードでアプリが作れちゃう、というサービスで、
どれだけのものが作れるのか、最近研究しています。

そもそも**AppSheetって、どんなことができるのかなーって機能概要をまとめたサイト**を見てみると、、
**「OCRスキャン」**って書いてるじゃないですかー。

**OCRを簡単に調べてみると、**
OCRとは「Optical Character Recognition」の略で、
手書きや印刷された文字を、イメージスキャナやデジタルカメラによって読みとり、
コンピュータが利用できるデジタルの文字コードに変換する技術、だそうです。

つまり、**手書きの文書とかを、写真とってアプリで変換かけると、文字起こしできちゃうよ**、というアレですね。

じゃあAppSheetではどうやって使えるの?というのが気になったので、試していきたいと思います。


##試してみる
AppSheetの[公式マニュアルのOCRの項](https://help.appsheet.com/en/articles/3121758-optical-character-recognition-ocr)を参考にして試していきたいと思います。

##そもそもどんな時に使えるか
上記の公式マニュアルを確認すると、以下のようなことが書かれています。

**OCRで使用できる画像の種類は以下のようなもの**
・標準化された紙のフォーム
・USPS配送ラベル
・1つの会社からの請求書

**AppSheetのOCR機能が機能しないいくつかのケースは次のとおりです。**
・名刺（標準形式に準拠していない）
・チェックボックスを使用するフォーム
・インターネットに接続していないアプリ

どうやら入力フォーマットが決まっているものはOCR機能が使えるようですが、
**フォーマットがバラバラな書類では使用できない**ようです。

うーん、名刺とかで使えたらよかったのにーー。。

##データの準備
まずは、必要となるデータソースの設定をします。
今回も、スプレッドシートでの設定で進めていきます。

**新規でスプレッドシートを作成して、**
以下のような**「id」「姓」「名」「所属」「写真」**という列を設定します。
<img width="820" alt="スクリーンショット 2020-04-24 15.51.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/e020f493-3b9e-1a7e-45c0-cacf269891f1.png">

**続いて、新規でアプリを作成します。**
その際に、データソースは先ほど作成したスプレッドシートを設定すると、以下のようなダッシュボードまで進むかと思います。

新規アプリの作成方法は、[過去の記事](https://qiita.com/kazu_tekuru/items/7a4708465a3beed031ab)の最初から読んでいただき、
「これで、ダッシュボード画面が表示されました。
いよいよアプリの作成が開始です！」
というところまで読んで見てください。

なお、**id列は一意の値が入るように設定**しておこうと思ったので、
[Data]>[Columns]の[ocr]テーブルの「id」列の「INITIAL VALUE」に、
「**uniqueid()**」と設定しています。

~~キャプチャを撮ったタイミングの問題で、「姓」「名」「所属」の「INITIAL VALUE」にも何か書かれていますが、
この段階では設定されているはずのないものなので、黒線を引いています~~


そして、**「写真」列の「TYPE」**を**「Image」**に変更しています。
写真を扱うときは、この設定が必須です。
<img width="1523" alt="スクリーンショット 2020-04-24 15.14.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/0e02ecaf-451c-7b62-ccf9-ec0c3ae94dbb.png">





##学習用のデータを登録する
続いては**、学習のためのデータが必要になる**とのこと。
先ほどのマニュアルを見た所、**だいたい4件くらいのデータが必要**みたいですね。

ということで、自前のタブレットから、データを登録していきます。
作成中のアプリでも、アプリのURLを入力すれば、どの端末からでも使用できるのが素敵です。
<img width="380" alt="スクリーンショット 2020-04-24 15.12.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/26eda623-9f0d-192a-1d12-a5f3984b9afb.png">

写真を撮って、その他の項目を上からそれぞれ、
姓：Jon
名：Cartar
所属：Line
と入力してやります。
これで「Save」ボタンを押して、データを登録します。
<img width="771" alt="スクリーンショット 2020-04-24 15.13.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/154475a5-b8d6-6d82-bdca-044ff09bd2f3.png">

この要領で別のデータを登録して、4件のデータを用意します。
これで、OCRを試すための準備はできました。



##OCRの設定をする
[Intelligence]>[OCR Models(Beta)]から[+Add New OCR Model]をクリックします。
「OCR Models(Beta)」とある通り、このOCRの機能自体がベータ版であることがわかります。
<img width="1531" alt="スクリーンショット 2020-04-23 15.23.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/d8b5c675-8546-6b68-2bcc-b8fa38ee0438.png">

OCRの設定をしていきます。
**NAME**：OCRを使用する時の名前（今回は「New OCR Model」）
**Table**：どのデータにOCRを適用するのか（今回は「ocr」（最初に作ったスプレッドシート））
**Image Columns**：OCRスキャンをするためのImage項目（今回は「写真」（スプレッドシートの「写真」列））
**Output Columns**：OCRスキャンした値を出力する項目（今回は「姓」「名」「所属」）

<img width="1336" alt="スクリーンショット 2020-04-23 15.24.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/9ffdaa36-1892-c7d0-19df-eafb87af1554.png">

キャプチャからは見切れていますが、画面右上にある「Save」ボタンをクリックすると、以下のようになります。
<img width="1520" alt="スクリーンショット 2020-04-23 15.24.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/f634c637-db69-792b-54e3-7b159ba222cd.png">
先ほど写真を撮ってデータ登録した値から、学習結果を出力しているようです。
撮った写真と、入力した文字列から、以下のことを学習したようです。
**3行あるうちの、一番上が"姓"が記述されている。（緑のライン）**
**3行あるうちの、真ん中が"名"が記述されている。（赤のライン）**
**3行あるうちの、一番下が"所属"が記述されている。（青のライン）**

このように、「撮られた写真から、どの位置にある文字列をどの項目にセットする」ことを学習するようです。
そのため、各社でフォーマットの異なる名刺などには使用できないようです。
残念。。。

ただ、**たったこれだけでOCRの設定が完了しました。**

**なにやら、画面には黄色い文字で警告が出ていますが、**
内容を確認すると、一番右の写真の一番下の文字列が読み取れなかったようです。
本当はこれをクリアな状態にしてから進むべきでしょうが、**ひとまずこのまま進めていきます。**

ちなみに、**OCRの設定が完了すると、データ定義に「INITIAL VALUE」が追加されています。**
[Data]>[Columns]から、「姓」「名」「所属」の「INITIAL VALUE」になにやらOCRっぽい文字列が記述されていますね。
試しに、「姓」の項目を確認してみます。
<img width="1523" alt="スクリーンショット 2020-04-23 15.24.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/1bd8c786-7132-6074-8d23-3d363e6c699a.png">

よくわからないですが、**「OCR機能を利用して、写真の値から項目「姓」にセットする」ような初期値が追加**されるようです。
<img width="814" alt="スクリーンショット 2020-04-23 15.25.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/419b8a0c-81d0-b135-735d-6ee0c2b26cc6.png">


##動作確認
それでは、実際にタブレットを使って動作確認をしていきます。
タブレットからアプリにログインして、登録画面に遷移します。
![IMG_0804.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/a7fb60ff-ca20-625a-8cad-c3b0bb961035.png)

カメラボタンから写真を撮って「写真を使用」します。
<img width="768" alt="IMG_0805.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/2ad242ca-d101-91d3-78ca-e739d97747ca.png">

すると、以下の通りに画面が戻ります。
![IMG_0806.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/9747021a-741e-34b7-40aa-c711a8999ec3.png)
今撮った写真とともに、
**「姓」「名」「所属」の項目に値が設定されて**いますね。

**実は、僕は何も入力していません。**
写真を撮っただけで、アプリが「この文字列はこの項目に設定されるんだろう」ってセットしてくれます。

**超便利な予感！**
これで、紙媒体のものをデジタルに変換することも容易にできるか??

いやいや、あくまで上記のテストでは、全てアルファベットでの確認でした。
**試しに漢字を試してみましょう。**

**こっからカメラボタンで、**
![IMG_0807.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/9ad1c412-750e-aa3c-2892-b4be1c553226.png)

**写真撮って、、**
<img width="768" alt="IMG_0808.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/dace5839-e3af-882b-2abe-9d59eec54459.png">

・・・
![IMG_0809.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/dbf93a04-54f5-ea98-a97d-de99d04ebca6.png)
**惜しいけどアカーーン！！**

「姓」に入って欲しかった「中田」がなくなり、
「友彦」は「友声」になってしまいました。
なぜか「立花コーポ」は読み取れたようです。

でもこの感じだと、日本語での利用は厳しそうです。
**まあ、ベータ版だしな。。**


##まとめ
AppSheetでOCRのテストをしてみました。

まとめると、以下のような感じでしょうか。
**・フォーマットがバラバラなものは使えない**
**・4件ほどのテストデータが必要**
**・OCRの設定自体は難しくない**
**・アルファベットなら、そこそこ良さそう**
**・日本語はまだ難しそう**
**・そもそもOCR機能はベータ版なので、精度がよくなるかもしれないし、機能そのものがなくなるかもしれない**

ひとまずOCRを試した結果は以上でーす。