【LINE Payによるマネタイズ施策】画像、音声、動画からAIが文字起こししてくれるLINE Botを作りました！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINEに画像、音声、動画ファイル、YouTubeのURLを投げると、AIがすべて自動で文字起こし📝して返してくれる「文字起こすくん」というサービスを作りましたー！🙌<br><br>もう面倒な文字起こし作業からは解放されましょー💡<br>以下からLINEの友達登録できます！<a href="https://t.co/cvTfCQIGHb">https://t.co/cvTfCQIGHb</a> <a href="https://t.co/My09VqwWz9">pic.twitter.com/My09VqwWz9</a></p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1165151668251459586?ref_src=twsrc%5Etfw">August 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


---

こんにちは、2z（Twitter： [@2zn01](https://twitter.com/2zn01) ）です。

趣味でWebサービスの個人開発をしており、以下のサービスを開発・運営しています！

■AIメーカー
https://aimaker.io/

■ツイレポ
https://twirepo.com/



## 今回作ったもの

LINEに文字起こししたい画像、音声、動画ファイル、YouTubeのURLを投げ込むだけで、面倒な文字起こし作業をAIに任せることができる「文字起こすくん」というサービスをリリースしました！

■URL
https://text.aimaker.io/recognize-bot/


■動画
https://www.youtube.com/watch?v=zof9OH9BOxE


![モジコ-概要.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/32ff163b-9ef7-2122-c486-c7c9c4d33267.jpeg)


![モジコ-使い方.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/4bd0d87c-acf3-cf40-fb59-66181c08e102.jpeg)


以下のQRコードから友達登録できます。

![モジコ-QRコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/e20bc89f-d68d-1bbd-9a3d-4c55c76e00bb.png)


---

文字起こしは大きく以下の４つの方法から行えます。

1. 📺 YouTubeから文字起こし
2. 📷 画像ファイルから文字起こし
3. 🎙️ 音声ファイルから文字起こし
4. 📹 動画ファイルから文字起こし


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINEに画像、音声、動画ファイル、YouTubeのURLを投げると、AIがすべて自動で文字起こし📝して返してくれる「文字起こすくん」というサービスを作りましたー！🙌<br><br>もう面倒な文字起こし作業からは解放されましょー💡<br>以下からLINEの友達登録できます！<a href="https://t.co/cvTfCQIGHb">https://t.co/cvTfCQIGHb</a> <a href="https://t.co/My09VqwWz9">pic.twitter.com/My09VqwWz9</a></p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1165151668251459586?ref_src=twsrc%5Etfw">August 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


文字起こししたい画像、音声、動画ファイル、YouTubeのURLをLINEに投げると、そこから文字起こしを行い、文字起こし結果を返してくれます。
画像の場合は画像内に含まれる文字を抽出し、動画の場合は動画内の音声を抽出して文字起こしします。

以下の拡張子のファイルに対応しています。

* 画像ファイル：JPEG／PNG／GIF
* 音声ファイル：WAV／MP3／WMA／AAC／M4A／FLAC／OGG
* 動画ファイル：P4／AVI／FLV／MOV／WMV


YouTubeの場合はYouTubeの動画をダウンロードした上で動画内の音声を抽出して、文字起こしを行います。



## 使用技術

### Linux

クラウドのホスティングはGoogle Cloud Platform（GCP）で、Google Compute Engine（GCE）でサーバを立てています。
サーバのOSはLinuxでCentOSの7系を使っています。


### Apache

webサーバはApacheを使っています。
Nginxもありますが、Apacheは普段から使っており、設定も把握していたため、いつも通りの安定の選択としました。


### MySQL

データベースはMySQLを使用しています。


### PHP

サーバ側のプログラムはPHPを使って実装しました。

### ffmpeg

動画ファイルから音声ファイルを抽出するのに使用しています。

* ffmpeg    
https://ffmpeg.org/

### Google Vision API

画像ファイルを文字起こしするのに使用しています。

* Google Vision API    
https://cloud.google.com/vision/?hl=ja


### Google Cloud Speech-to-Text API

音声ファイルを文字起こしするのに使用しています。

* Google Cloud Speech-to-Text    
https://cloud.google.com/speech-to-text/?hl=ja

### LINE Messaging API

LINE Botでのメッセージのやり取りにLINE Messaging APIを使用しています。

* Messaging APIリファレンス    
https://developers.line.biz/ja/reference/messaging-api/


### LINE Pay

LINE Botでのマネタイズをどうしようかと考えていたときに、LINE Payによる課金手段を知りました。
これがあったらこそ、LINE Botによる文字起こしを実装することを決断しました。

* LINE Pay    
https://pay.line.me/jp/intro?locale=ja_JP

* LINE Pay技術連動ガイド    
https://pay.line.me/jp/developers/documentation/download/tech?locale=ja_JP


### Stripe

LINE Payだけだとまだまだ利用者が少ないかと思い、Stripeを使った有料課金も組み込みました。

* stripe API Reference    
https://stripe.com/docs/api


## 文字起こしの仕組み

<img width="945" alt="モジコ-文字起こしの仕組み.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/721d5fdb-202d-c780-b09c-26a8a7a9ccba.png">


### 画像ファイルから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Vision API（画像認識）

Google Compute Engine上に立ち上げたサーバからアップロードされた画像ファイルをGoogle Cloud Storage（GCS）上へアップした上で、Google Cloud Vision APIにGCS上の画像URIを送信し、文字起こしされた結果を受け取っています。

### 音声ファイルから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Speech API（Speech-to-Text／音声認識）

Google Compute Engine上に立ち上げたサーバからアップロードされた音声ファイルをGoogle Cloud Storage（GCS）上へアップした上で、Google Cloud Speech APIにGCS上の音声URIを送信し、文字起こしされた結果を受け取っています。

### 動画ファイルから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Speech API（Speech-to-Text／音声認識）
* ffmpeg（動画→音声の変換）


Google Compute Engine上に立ち上げたサーバからアップロードされた動画ファイルをffmpegを使って音声ファイルへ変換し、Google Cloud Storage（GCS）上へアップした上で、Google Cloud Speech APIにGCS上の音声URIを送信し、文字起こしされた結果を受け取っています。


### YouTubeから文字起こし

* Google Compute Engine（サーバ）
* Google Cloud Storage（ストレージ）
* Google Cloud Speech API（Speech-to-Text／音声認識）
* ffmpeg（動画→音声の変換）


Google Compute Engine上に立ち上げたサーバで指定されたYouTubeの動画をダウンロードしてffmpegを使って音声ファイルへ変換し、Google Cloud Storage（GCS）上へアップした上で、Google Cloud Speech APIにGCS上の音声URIを送信し、文字起こしされた結果を受け取っています。



## 有料課金の導入

文字起こしではAPIの利用費がかかってしまうため、100円分までは無料で使えるようにしましたが、それを超える場合はやむなく有料課金にしました。

有料課金は以下のサービスを利用しています。

* LINE Pay
https://pay.line.me/jp/intro?locale=ja_JP

* Stripe
https://stripe.com/jp


LINE Payでの課金は以下の流れになります。

![img_linepay.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/bf8dbf29-24f5-5fa4-9e3f-4ab9f4b60f4b.jpeg)


「文字起こすくん」のLINE上では以下のような形で出しています。

<img width="375" alt="モジコ-ペイメント.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/800e8d68-ef95-334f-058c-6a40db607f43.png">

なお、Stripeは最低利用金額は日本円で50円からだったため、合計金額が50円に達した場合のみ利用できるようにしました。

LINE BotとLINE Payの課金導線はスムーズなため、LINE Botのマネタイズ化にすごく相性が良いと思います！

---

ちなみに、LINE Payを本番で利用するには、加盟店加入申請が必要です。

* LINE Pay     
https://pay.line.me/jp/intro?locale=ja_JP


LINE Payの加盟店申請の際は、個人事業主の場合は以下の書類を用意します。

＜事業者証明書＞
以下のいずれか
　・国税・地方税の領収書または納税証明書
　・個人事業開業届出書（控）：税務署受付印が押印されたもの
　・確定申告書（控）：直近の税務署受付印が押印されたもの
　・青色申告承認申請書（控）：税務署受付印が押印されたもの
　・個人事業開始申告書（控）：都道府県税事務所や市区町村役場の受付印が押印されたもの

＜本人確認書類＞
以下のいずれか
　・運転免許証：変更事項があれば裏面含みます。
　・健康保険証：表裏必要です。


＜商品・サービス説明資料（任意）＞
必須ではありませんが、審査を円滑に進めるには提出した方が無難です。
僕の場合はサービスの概要資料とあわせて、どのようにLINE Payを導入・利用するかを示した資料を提出しました。

---


僕の場合は個人事業主として申請し、3週間ほどで審査が完了し、利用できるようになりました。


## LINE Bot化で工夫（苦労）したところ、など

### 処理時間が長い場合の対処

文字起こしの処理時間は画像の場合は数秒で終わるため、すぐに応答メッセージ（message/reply）を返すことができました。
しかし、音声や動画の場合は再生時間の1/4程度の時間が文字起こしにかかるため、一旦応答メッセージ（message/reply）で変換待ちである旨を返すようにし、文字起こしの進捗を確認できるようにしました。

<img width="372" alt="モジコ-変換待ち.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/4e069e0e-9f7f-f3a1-79ff-e3059af3f370.png">

そして、文字起こしがすべて完了した後にプッシュメッセージ（message/push）で文字起こし結果を返すようにしました。

なお、プッシュメッセージはフリープランの場合は月に1000通までのため、注意が必要です。

<img width="713" alt="line-messaging-plan.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/19e2d4f2-984d-be6d-29f5-ec1fe4148596.png">

僕はLINE Botの開発とは、いかに応答メッセージ（message/reply）で済ませるかが勝負だと思っています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINE BOT開発とはいかにPushメッセージを使わずにReplyメッセージで済ませるかの闘いである。<br>（フリープランの場合、月に1000件はちょっと少ないよね...）</p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1158060924449591296?ref_src=twsrc%5Etfw">August 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

今回もなるべくLINE Botは応答メッセージ（message/reply）で済ませたいところでしたが、ユーザビリティも考えて、苦肉の策でプッシュメッセージ（message/push）を使用しています。


### LINEのファイルアップロード上限

LINEでは明確なファイルサイズの上限が見当たらず、10MBを超えるような大きなファイルサイズだとアップロード中にロード中のまま止まってしまうことがありました。
（なぜかグループで追加した場合はアップロードできるようでしたが、、）

また、動画ファイルは5分以内でなければならず、それを超える場合は動画を5分以内に切り取らざるを得ませんでした。

そのため、苦肉の策として、別途アップロードするためのアップローダー画面を用意することにしました。

<img width="375" alt="モジコ-アップローダー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/d14896bb-cd20-d552-9fd4-c05eba7b6cef.png">


### LINEでのファイルの取り扱い

LINEからアップロードされたファイルは、画像はjpg、音声はm4a、動画はmp4に変換されるようです。
APIからファイル（コンテンツ）を取得する際にはその点に注意する必要がありました。


## サービス紹介動画の制作

今回はサービス紹介動画を作成しました。
以下のURLより見ることができます。

・文字起こしAIコンシェルジュ「文字起こすくん」
https://www.youtube.com/watch?v=xlyRwAwIioQ


この動画は「Canva」というデザイングラフィックツールのWebサービスを活用して作りました。

* Canva    
https://www.canva.com/


「Canva」は基本的に画像を作成するツールですが、Canva Proの有料版だとスライドを作るとそれをイイ感じにアニメーションとして出力することができます。
出力したアニメーションを組み合わせて動画として作成しました。


## 最後に

苦肉の策を講じながらも、何とかサービスをリリースすることができました。
このサービスに少しでも興味をもって頂けましたら、ぜひフォローやいいね、リツイートで応援お願いします！

* Twitter： [@2zn01](https://twitter.com/2zn01)
* Qiita： [@2zn01](https://qiita.com/2zn01)
* note： [@2zn01](https://note.mu/2zn01)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINEに画像、音声、動画ファイル、YouTubeのURLを投げると、AIがすべて自動で文字起こし📝して返してくれる「文字起こすくん」というサービスを作りましたー！🙌<br><br>もう面倒な文字起こし作業からは解放されましょー💡<br>以下からLINEの友達登録できます！<a href="https://t.co/cvTfCQIGHb">https://t.co/cvTfCQIGHb</a> <a href="https://t.co/My09VqwWz9">pic.twitter.com/My09VqwWz9</a></p>&mdash; 2z / AIメーカー開発者 (@2zn01) <a href="https://twitter.com/2zn01/status/1165151668251459586?ref_src=twsrc%5Etfw">August 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>