Tesseract.jsとReactでOCRコミュニケーションアプリを作る(後編)
読む所要時間: 8 分
![Tesseract.jsとReactでOCRコミュニケーションアプリを作る(後編) Tesseract.jsとReactでOCRコミュニケーションアプリを作る(後編)](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/Sr-54k3MP93OVUeHQ30z3EMb9vmh2f2Tj7V36GIYH6TkDsk_I1jRqaPkw_6KRRjGlxjjffzF9LCX_l4Dk1xC.png)
前編では、以下のOCRコミュニケーションアプリケーションのフロントエンドを構築しました。続いて、バックエンドを構築しましょう。
![アプリ完成イメージ](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/OVnUktoTWCeIg-PYLEuNw4x-qOF5T7K-B5ItuvcC-OaExSkU_oul8J2IsIoiccvjB6jx5BORi2n_TA0eYNu.png)
バックエンドを構築する
次に、バックエンドを構築します。
プロジェクトのルートディレクトリに.envとserver.jsファイルを作成してください。
まずは、Twilioの認証情報を.envファイルに格納します。
テキストエディタで.envファイルを開き、以下のコードをペーストしてください。
XXXXX
の文字列は、Twilioの認証情報のプレースホールダーを表しています。
TWILIO_ACCOUNT_SID
とTWILIO_AUTH_TOKEN
は、Twilio ConsoleからAccount SIDとAuth Tokenを取得し、XXXXX
にペーストしてください。Account SIDとAuth Tokenの取得方法について詳しくは、ヘルプセンターの「Account SIDとAuthTokenの確認方法」を参照してください。
TWILIO_PHONE_NUMBER
は、Twilioから取得した電話番号をE.164形式でXXXXX
にペーストしてください。
ファイルを保存してください。
次に、Node.jsサーバーを作成します。プロジェクトのルートディレクトリにserver.jsファイルを作成してください。
テキストエディタでserver.jsを開き、以下のコードをペーストしてください。
このコードでは、dotenv
とexpress
ライブラリをインポートし、Expressをインスタンス化します。
サーバーのポートを5000
に設定します。
本稿では、create-react-app
をローカル環境で使用しているため、http://localhost:3000/をすでに使用しています。このため、3000
以外のポートを指定します。
ローカル環境で開発しているSPA(シングルページアプリケーション)で、フロントエンドからバックエンドのAPIサーバーにリクエストを送ると、同一オリジンポリシーに違反し、サーバーにアクセスできないことがあります。
本稿では、http://localhost:3000/をフロントエンドに、http://localhost:5000/をNode.jsサーバーに使用するため、同一オリジンポリシーの問題が生じます。
これを防ぐため、package.jsonにproxy
を追加します。
package.jsonをテキストエディタで開いてください。以下のコードをファイルに追加してください。
"proxy": "http://localhost:5000",
ファイルを保存してください。
これにより、http://localhost:3000/に対するリクエストで、Accept
ヘッダーがtext/html
以外のリクエストがすべてhttp://localhost:5000/にプロキシされます。
次に、Twilioの認証情報を環境変数から取得します。server.jsを再度テキストエディタで開いてください。app.use
のブロックと、app.listen
のブロックの間に、以下のコードをペーストしてください。
最後に、SMSを送信するためのエンドポイントを設定します。Twilioの認証情報のブロックの下に、以下のコードをペーストしてください。
このコードでは、フロントエンドから/send-sms
にHTTP POSTリクエストが送信されると、新しいTwilioクライアントインスタンスを作成します。このクライアントを使って、リクエストに含まれるto
プロパティに指定された電話番号宛てに、text
プロパティに指定されたメッセージをSMSで送信します。
server.jsの全コードは、Githubリポジトリを参照してください。
これで、サーバー側の準備が完了しました。
アプリケーションの動作を確認する
完成したアプリケーションを実際に動かしてみましょう。
ターミナルのウィンドウを2つ開いてください。
1つ目のウィンドウで、アプリケーションのルートディレクトリから以下のコマンドを実行してください。
ブラウザでhttp://localhost:3000を開いてください。問題なく動作していると、以下のような画面が表示されます。
![ファイル選択画面](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/Id5rTjo_k3J85RcFtDYv6cZunEwWwE7vE2BxOZUmqtgUilOXwjGa3JlGdtj3xxqOht05Z1U9NqDH_x4IA5dG.png)
次に、サーバー側とアプリケーション全体の動作を確認します。
2つ目のウィンドウで、アプリケーションのルートディレクトリから以下のコマンドを実行してください。
ブラウザで、日本語の文字が含まれる画像を「Choose file」で選択してください。
本稿では、以下の画像を使用します。
![サンプル画像](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/aywRuSP78ZjtcHj2JZhDg0RKMDR67YZ6_WYXCqjeetGuHTx0fECLM6Cv-DBCyDiSQRbNpKtCugxl_LhRPavd.png)
画像を選択すると、以下の画面に切り替わります。
![OCR処理画面](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/OELs9qcEDQZZk8_AC0ak-ioljV30vHOayi8DgBJ0D5eMXCG7pP2xQR7ywoDsTozjbfKVvKwjI8iJ_sPIO143.png)
[画像をOCR処理する]を選択してください。
ボタンの下に「OCR処理中...」ステータスが表示され、「OCR処理完了」に切り替わります。OCR処理で検知されたテキストが以下のように表示されます。
![編集画面](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/YskZrIF04KvcivtUG-X9mGeeT9e8ywv-4giwPJQb1I9rSLGtSxPL978MNyN8WGtyyH_QJTmuX_lG_N8rd3pO.png)
SMSを送信する前にOCR処理されたテキストを編集したい場合、「検知されたテキストを編集」エディタから編集してください。
編集が完了したら、テキストをSMSとして送信したい電話番号を電話番号フィールドに入力します。
SMS送信先の電話番号が登録されている国を国旗アイコンから選択し、右側のフィールドに電話番号を国番号なしで入力します。
![メッセージ送信画面](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/j6yJwwGWXH7K1tIvEmt24t6iLBebhrs0Kt3b_OlbCnTXFeOt3NsxwfbxXMFhJYLwcJns_mD52yj_Io6CSNg.png)
「SMSメッセージを送信」をクリックしてください。アプリケーション画面で「メッセージ送信中...」が表示され、送信処理に問題がなければ「メッセージ送信完了」に切り替わります。
![メッセージ送信完了画面](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/Akbz1Of4ItyOxYBWJ8rAZRwEmsL63pyZL-g0xqfIvV3LQGubyJZC8FXgaLfhe1EzOn8Pms2CpYov_xCO7pI9.png)
指定した電話番号に、テキストが送信されます。
![SMSテキスト](/content/dam/twilio-com/global/en/blog/legacy/2021/tesseract-js-react-ocr-part-two-jp/lSwChgT-rTZZ1XpyflH1a52UvWFIi6bJduoIRwd1BNWaG8PhiaiFnoE34vVfgSIZeiILEI-JV8yK_S26Cd5b.png)
これで、動作確認ができました。
最後に
いかがでしたでしょうか?OCRの技術は日常のさまざまな場面で利用されています。Tesseract.jsを使えば、気軽にブラウザ上でOCR処理を行い、他の技術ツールと組み合わせたアプリケーションを開発できます。このチュートリアルをもとに、紙でしか存在しない資料をデジタル化してみてはいかがでしょうか。
Twilio Blogに投稿してみたい方や、フィードバック、登壇、勉強会のお誘いなどお気軽にsnakajima[at]twilio.comまでご連絡ください。開発中のプロジェクトに関してはGithub(smwilk)を覗いてみて下さい。