【Google Cloud】Google Cloud AI関連サービスを試してみよう

# Google Cloud AI
- AIソリューション（ビジネスユーザ向け）
- AIビルディング・ブロック（ITシステムの開発者向け）
    - 機械学習API
    - Cloud AutoML
- AIプラットフォーム（機械学習モデルの開発向け）

## 機械学習API
- Googleのサービスで活用されている機械学習モデルをAPI経由で利用できるサービス群
- メリット
    - 機械学習モデルを構築する手間がない
    - すぐ利用できる
- 用途
    - 視覚認識
        - Cloud Vision API：11種類の画像分析機能
        - Cloud Video Intelligence API：6種類の動画分析機能
    - 言語
        - Cloud Natural Language API：5種類のテキスト分析機能
        - Cloud Translation API：高品質な機械翻訳機能
    - 会話
        - Speech-to-Text API：音声データのテキスト変換
        - Text-to-Speech API：テキストの音声データ変換

### Cloud Vision API
- 画像分析のためのサービス
- AutoML Vision：独自のカスタム機械学習モデルのトレーニングを自動化
- Vision API：REST API／RPC APIを使って事前トレーニング済みの機械学習モデルを提供
- 機能（一部）
    - ラベル検出機能：画像に写っている者の種類や名称を出力する
    - テキスト検出機能：画像中からテキストを抽出する
    - セーフサーチ（不適切なコンテンツ）検出機能：
    - 顔検出機能：画像中の顔の位置やその表情から推測された感情を出力する
    - ランドマーク検出機能：種類や名称に加えて画像内における位置も出力する
    - ロゴ検出機能：
    - 画像プロパティ機能：
    - クロップヒント機能：
    - ウェブ検出機能：
    - ドキュメントテキスト検出機能：
    - Object Localizer機能：
- https://cloud.google.com/vision/

### Cloud Video Intelligence API
- 動画分析のためのサービス
- AutoML Video Intelligence：機械学習の経験があまりなくても、動画内のオブジェクトを分類し、追跡するカスタムモデルのトレーニング簡単にできる、グラフィカルインタフェースを備えている
- Video Intelligence API：保存済み動画及びストリーニング動画に含まれる膨大な数のオブジェクト、場所、アクションを自動的に認識する
    - 動画の単位：フレーム（最小）、ショット（カメラの視点が切り替わるまでの一連のフレームをまとめたもの）
- 機能
    - ラベル検出機能：動画全体、ショット、フレーム単位で検出できる
    - ショット検出機能：
    - 不適切なコンテンツの検出機能：ショット内の同じ物体を追跡する、オブジェクトトラッキング
    - 音声文字変換機能：動画音声を文字に起こす
    - オブジェクトトラッキング機能：
    - テキスト検出機能：
- 対象オブジェクト
    - 動画ファイル
    - 動画ストリーム（ライブ配信している動画をリアルタイムに分析できる）
- https://cloud.google.com/video-intelligence

### Cloud Natual Language API
- テキスト分析のサービス
    - エンティティ分析：テキストから人物名、組織名、製品名、電話番号、住所、価格などの情報抽出を自動化
    - 感情分析：ネガティブ／ポジティブな言い回しを含むテキストを検出できる
    - 構文解析：
    - エンティティ感情分析：
    - コンテンツの分類：
- https://cloud.google.com/natural-language/

### Cloud Translation API
- 機械翻訳のサービス
    - テキストの翻訳機能
        - テキストだけでなくHTMLを入力できる。Webサイトの文章を直接翻訳できる
        - glossary：カスタム辞書の活用で翻訳結果をルールベースでカスタマイズ出来る
    - 入力言語の判定機能：
- https://cloud.google.com/translate/

### Cloud Speech-to-Text API
- 音声のためのサービス
    - 音声ファイル、音声ストリームを認識できる
    - タイムスタンプ機能：特定のフレーズがどのタイミングで発言されたかを把握できる
- https://cloud.google.com/speech-to-text/

### Cloud Text-to-Speech API
- 音声合成のためのサービス
    - テキスト読み上げ
    - Wavenetで人間に近い音声合成ができる
    - SSML（音声合成マークアップ言語）サポート
- https://cloud.google.com/text-to-speech/

## Cloud AutoML
- 高度なスキルや高性能な計算機環境がなくても、ビジネスニーズに即した高品質な機械学習モデルを、短期間で構築・活用できる。
- 動作概要
    - 学習データを用意する必要がある
        - 画像のラベル付けは、AI Platform Data Labeling Service（https://cloud.google.com/data-labeling/docs/）で効率化できる
    - Cloud AutoMLの Web UIから学習時間を指定し、トレーニングボタンをクリックすると、学習データに基づいて学習した機械学習モデルのを構築
    - 機械学習モデルはクラウドにデプロイし使える
    - 自動スケーリングにも対応
- 用途
    - 視覚認識
        - 画像分析：ラベル検出と物体検出（AutoML Vision）
        - 動画分析：ラベル検出（AutoML Video）
    - 言語
        - テキスト分析：コンテンツ分類（AutoML Natural Language）
        - 機械翻訳：機械翻訳（AutoML Translation）
    - 構造化データ
        - データ分析：回帰とクラス分類（AutoML Tables）

## AIプラットフォーム
- 目的
    - AI開発のためのコラボレーションツール
        - サービス名：AI Hub
    - 学習データのラベリング
        - AI Platform Data Labeling Service
    - 機械学習モデルの試作
        - AI Platform Notebooks
        - BigQuery ML
    - 機械学習モデルの最適化
        - AI Platform Training
        - BigQuery ML
    - 機械学習モデルのデプロイ
        - AI Platform Prediction
        - BigQuery ML
    - 機械学習専用の高性能計算機環境
        - Cloud TPU

# 機械学習APIで作る音声自動翻訳機
題材：日本語音声を英語音声に変換する音声自動翻訳機

1. 日本語音声のテキスト化（Cloud Speech-to-Text API）
2. 日本語テキストの日英翻訳（Cloud Translation API）
3. 英語テキストの音声合成（Cloud Text-to-Speech API）

## Google Cloud APIについて
- Google Cloudクライアントライブラリ
    - 各言語の慣用に従って直感的にプログラミングができること
    - gRPC経由でGoogle Cloud APIの機能が利用できること
        - Speech-to-Text API
        - Video Intelligence APIのストリーミング分析機能
- Google APIクライアントライブラリ
    - REST経由でアクセスできる
    - 最新の機能をすぐに利用できる
- https://cloud.google.com/apis/docs/client-libraries-explained/

## 機械学習APIを有効にする
- 機械学習APIを有効にする方法
    - Cloud Consoleを使う方法
        1. Cloud Consoleの［APIとサービス］→［ライブラリ］パネルに移動<br><img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/6620d941-fd2a-8af1-7868-59ffdd24c91c.png">
        2. 検索フィールドやフィルタを使用してAPIを検索<br><img width="1235" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/c53d9191-346c-40be-15b2-4f019706f156.png">
        3. 有効にするAPIが表示された場合、それを選択<br><img width="1241" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/9f26e680-4d1a-fce2-70e0-3c054dfd7902.png">
        4. ［API］ページで、［有効にする］をクリック<br><img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/95b54a27-6a10-6615-2818-5a6770bf23d7.png">

    - Cloud SDKを使う方法

## 機械学習APIの認証に使うAPIキーを作成する
- 認証方法
    - サービスアカウント
    - APIキー
        1. Cloud Consoleの［APIとサービス］→［認証情報］パネルに移動<br><img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/c306bd2b-9ecf-ddea-b8b7-10372db54570.png">
        2. ［認証情報を作成］を選択し、プルダウンメニューから［APIキー］を選択<br><img width="1036" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/7fdcaaf8-b0ee-c4be-2a5e-e05951d112f8.png">
        3. ［APIキーを作成しました］ダイアログ<br><img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/dd76edb0-65cc-b282-be93-8eaee663b087.png">

## 音声ファイルの準備

## Cloud Speach-to-Text APIで日本語音声のテキスト化、Cloud Translation APIで日本語テキストの日英翻訳、Cloud Text-to-Speech APIで英語テキストの音声合成
- 音声自動翻訳機の実装：Pythone3を使用
    - google-api-python-client
    
        ```
[root@centos7 ~]# python -m pip list --format=columns
Package    Version
---------- -------
pip        9.0.1
setuptools 39.0.1

        [root@centos7 ~]# pip install google-api-python-client
Collecting google-api-python-client
  Downloading https://files.pythonhosted.org/packages/5e/19/9fd511734c0dee8fa3d49f4109c75e7f95d3c31ed76c0e4a93fbba147807/google-api-python-client-1.7.11.tar.gz (142kB)
    100% |████████████████████████████████| 143kB 2.1MB/s
Collecting httplib2<1dev,>=0.9.2 (from google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/60/55/3902b9f33ad9c15abf447ad91b86ef2d0835a1ae78530f1410c115cf8fe3/httplib2-0.13.1-py3-none-any.whl (94kB)
    100% |████████████████████████████████| 102kB 2.9MB/s
Collecting google-auth>=1.4.1 (from google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/c5/9b/ed0516cc1f7609fb0217e3057ff4f0f9f3e3ce79a369c6af4a6c5ca25664/google_auth-1.6.3-py2.py3-none-any.whl (73kB)
    100% |████████████████████████████████| 81kB 2.0MB/s
Collecting google-auth-httplib2>=0.0.3 (from google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/33/49/c814d6d438b823441552198f096fcd0377fd6c88714dbed34f1d3c8c4389/google_auth_httplib2-0.0.3-py2.py3-none-any.whl
Collecting six<2dev,>=1.6.1 (from google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting uritemplate<4dev,>=3.0.0 (from google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/e5/7d/9d5a640c4f8bf2c8b1afc015e9a9d8de32e13c9016dcc4b0ec03481fb396/uritemplate-3.0.0-py2.py3-none-any.whl
Collecting pyasn1-modules>=0.2.1 (from google-auth>=1.4.1->google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/be/70/e5ea8afd6d08a4b99ebfc77bd1845248d56cfcf43d11f9dc324b9580a35c/pyasn1_modules-0.2.6-py2.py3-none-any.whl (95kB)
    100% |████████████████████████████████| 102kB 7.3MB/s
Collecting cachetools>=2.0.0 (from google-auth>=1.4.1->google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl
Collecting rsa>=3.1.4 (from google-auth>=1.4.1->google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/02/e5/38518af393f7c214357079ce67a317307936896e961e35450b70fad2a9cf/rsa-4.0-py2.py3-none-any.whl
Collecting pyasn1<0.5.0,>=0.4.6 (from pyasn1-modules>=0.2.1->google-auth>=1.4.1->google-api-python-client)
  Downloading https://files.pythonhosted.org/packages/6a/6e/209351ec34b7d7807342e2bb6ff8a96eef1fd5dcac13bdbadf065c2bb55c/pyasn1-0.4.6-py2.py3-none-any.whl (75kB)
    100% |████████████████████████████████| 81kB 421kB/s
Installing collected packages: httplib2, pyasn1, pyasn1-modules, cachetools, six, rsa, google-auth, google-auth-httplib2, uritemplate, google-api-python-client
  Running setup.py install for google-api-python-client ... done
Successfully installed cachetools-3.1.1 google-api-python-client-1.7.11 google-auth-1.6.3 google-auth-httplib2-0.0.3 httplib2-0.13.1 pyasn1-0.4.6 pyasn1-modules-0.2.6 rsa-4.0 six-1.12.0 uritemplate-3.0.0

        [root@centos7 ~]# python -m pip list --format=columns
Package                  Version
------------------------ -------
cachetools               3.1.1
google-api-python-client 1.7.11
google-auth              1.6.3
google-auth-httplib2     0.0.3
httplib2                 0.13.1
pip                      9.0.1
pyasn1                   0.4.6
pyasn1-modules           0.2.6
rsa                      4.0
setuptools               39.0.1
six                      1.12.0
uritemplate              3.0.0
```

```
/root/work/Cloud_Speech-to-Text_API
[root@centos7 Cloud_Speech-to-Text_API]# ls -l
合計 248
-rw-r--r--. 1 root root 251220  9月  1 17:15 ja-sample.flac
[root@centos7 Cloud_Speech-to-Text_API]# vi speech-to-speech.py
[root@centos7 Cloud_Speech-to-Text_API]# python speech-to-speech.py
[root@centos7 Cloud_Speech-to-Text_API]# ls -l
合計 288
-rw-r--r--. 1 root root  35616  9月  1 17:51 en-sample.mp3
-rw-r--r--. 1 root root 251220  9月  1 17:15 ja-sample.flac
-rw-r--r--. 1 root root   2974  9月  1 17:51 speech-to-speech.py
```
あれ？日本語から英語に翻訳されたmp3ファイルは作成できたけど、Cloud環境使ってない。。。
ということで提供されているAPIを使って簡単に日本語を英語に翻訳することができることはわかった、便利便利