✍️blog

技術系のこととか

GCPのサービス概要まとめ3

GCPのサービスについて勉強中なので、各サービスについて概要をまとめ。

この手の記事は世の中にたくさんあるけど自分用メインということで。

のその3

Google Compute Engine

仮想マシンのサービス。いわゆる IaaS 。

あらかじめ決められたスペックの中から選ぶのではなくCPUやメモリを任意の設定を行うことができる。

いつ解放されるわからないけど(最長24時間)格安なプリエンティブルVMがある。

Google Kubernetes Engine

名前からわかる通りKubernetesクラスタを動作させるための環境。

Kubernetesオーケストレーションとか諸々管理する上で面倒なことをマネージドでやってくれるらしい。

Google App Engine

手軽にウェブアプリを構築するためのサービス。いわゆるPaaS。

オートスケールとかも勝手にやってくれるけどその制約もある模様。

Cloud Run

こちらも分類的にはPaaSだけど、こちらはコンテナでデプロイを行う。

新規で開発する際に、インフラ的な制約とか気にしなければ App Engineよりこっちを選んだほうがよさそう。

Cloud Functions

いわゆるFaaS。よくある使い方として、イベンド駆動で何かをやらせるときに使う。

イベント駆動の場合は9分、HTTPの場合は60分動作させることができる。


今回はこのぐらいで。

いつまでも自分用のメモってわけにはいかないので

そろそろ切り替えて別の内容の記事を書くかな。

via GIPHY

GCPのサービス概要まとめ2

GCPのサービスについて勉強中なので、各サービスについて概要をまとめ。

この手の記事は世の中にたくさんあるけど自分用メインということで。

のその2

カテゴリ分けせずに雑多に並べてます。

Cloud Storage

オブジェクトストレージ

ストレージクラスというものが設定されている。

最小保持期間が長ければ長いほど1回のアクセスする料金が高くなる。

ストレージクラス 最小保持期間 用途
Standard なし 頻繁にアクセスされるデータ向け
Nearline 30日間 月1回程度アクセスするようなデータ向け
Coldline 90日間 四半期に1回程度アクセスするようなデータ向け
Archive 365日間 年1回程度アクセスするようなデータ向け

Cloud Bigtable

フルマネージドなNoSQLデータベース

めちゃ低レイテンシだけど複雑なクエリは苦手。

Cloud Datastore

フルマネージドなKVSのNoSQLデータベース

Bigtableをより使いやすくした感じ。

Storage Transfer Service

オブジェクトストレージやファイルシステム間のファイル転送を行う。

AWS S3 -> Cloud Storageとかも可能。

Transfer Appliance

10TB以上のデータをGoogle側でCloud Storageにアップロードしてくれるサービス

大容量デバイスを受け取り、データを転送、Google側に送るとアップロードしてくれる

日本ではまだ未サポート(2023/01)

Vision API

訓練済みモデルを使用して、分類、物体検出、OCRなどが可能

多分、 Google Lensぽいことができるのかなと。

Text-to-Speech API

読んで字のごとく、音声読み上げ

Speech-to-Text

こちらも読んで字のごとく、音声認識

Dialogflow

いわゆるチャットボット


今回はここまで、また多分書いていきます。

コンピューティング系のサービスかな。

via GIPHY

GCPのサービス概要まとめ

GCPのサービスについて勉強中なので、各サービスについて概要をまとめ。 この手の記事は世の中にたくさんあるけど自分用メインということで。

Cloud SQL

マネージドなMySQLPostgreSQLSQL Server

基本的にはオンプレのそれと同じ機能を提供してくれるけど一部提供されていない機能もある

Cloud Spanner

グローバル(世界規模)でスケーリング可能なRDB

負荷に応じで自動的にスケーリングしてくれ、めちゃくちゃスケーリングしてもACIDは担保してくれる。

トリガーやストアドプロシージャはサポートしていない。

Dataproc

マネージドなSpark、Hadoop、Flink、Presto。

GCE、GKEのいずれかをクラスタとして設定する。

Dataflow

Apache Beanのパイプラインを実行可能なフルマネージドなサービス。

Apache Beanを利用するのでバッチ、ストリーミング両方のデータをサポート。

Dataprocに対してリアルタイムにデータ生まれるケースに強みがある。

Cloud Pub/Sub

マネージドなメッセージングサービス。

Cloud Taskは配信先へPushするイメージでこちらは配信先がPullするイメージ。

また、Cloud Taskはリージョン内に限定されるが、こちらはグローバルで利用可能出来るその代わりメッセージの保持は7日間。

Big Query

分析基盤を備えたデータウェアハウス。

数テラ、数ペタ規模のデータをSQLを使って数分のオーダーで分析可能。


今回はここまで。 次回はほかのサービスについて書きます(たぶん)

via GIPHY

Quick, Draw!

quickdraw.withgoogle.com

AIが絵を認識できるように指示された絵を描いていくゲームです。

ただし、絵は20秒以内に書かなければいけません。

これは「Experiments with Google」の一部として公開されているものなのですが

これのほかにも様々なミニゲーム?が公開されています。

experiments.withgoogle.com

www.itmedia.co.jp

このゲームは、ユーザーが手書きした絵を何かしらの形式でサーバーに送って結果を何かしらの形式で受け取り、

Web Speech APIで結果の読み上げをしているように見えます。

サーバーとのやり取りをどんな形式で行っているのか気になったので調べてみました。

1. お題の一覧を取得

まず、このページを開いたときにお題の一覧を取得していました。

日本語版のページだと以下のようなURLから取得しています。

https://quickdraw.withgoogle.com/api/locale?code=ja

末尾で言語を指定できる感じですね。

取得した一覧はこのような感じの(おそらく)内部的なキーと表示するラベルが並んだjsonです。(実際には整形されていないです)

ちゃんとラベル部分はエスケープシーケンスで書かれていますね。当たり前のように多言語対応って感じですね。

データの件数としては280件ほどありました。

{
    "airplane": "\u98db\u884c\u6a5f",
    "alarm clock": "\u76ee\u899a\u3057\u6642\u8a08",
    "ambulance": "\u6551\u6025\u8eca",
    "angel": "\u5929\u4f7f",
    "ant": "\u87fb",
    "anvil": "\u91d1\u5e8a",
    "apple": "\u30ea\u30f3\u30b4",
    "asparagus": "\u30a2\u30b9\u30d1\u30e9\u30ac\u30b9",
    "axe": "\u65a7",
    "backpack": "\u30ea\u30e5\u30c3\u30af\u30b5\u30c3\u30af",
...
    "windmill": "\u98a8\u8eca",
    "wine bottle": "\u30ef\u30a4\u30f3\u30dc\u30c8\u30eb",
    "wine glass": "\u30ef\u30a4\u30f3\u30b0\u30e9\u30b9",
    "yoga": "\u30e8\u30ac",
    "zebra": "\u30b7\u30de\u30a6\u30de",
    "zigzag": "\u30b8\u30b0\u30b6\u30b0"
}

2. 一問目のお題を取得

お題の一覧を取得したら1問目のお題を取得していました。

POSTメソッドでapplication/x-www-form-urlencodedでリクエストします。

https://quickdraw.withgoogle.com/api

method=newround&bwords=&locale=ja&edition=

すると以下のようなレスポンスが返ってきます。

{"challenge":"\u30c8\u30ed\u30f3\u30dc\u30fc\u30f3","collect":false,"en_challenge":"trombone","synonyms":[],"uid":"e3b49ee0-9356-11ed-b6ce-432d433e9946"}

このリクエストは各お題が完了すると次のお題取得のために行われます。

3. ゲーム開始

開始直後 OPTIONメソッドで下記にアクセスします。

おそらくping的な意図なのかなと思います。

https://inputtools.google.com/request?ime=handwriting&app=quickdraw&dbg=1&cs=1&oe=UTF-8

4. 手書きのデータを送信

ある一定以上書かれるたびに以下のようなデータが送信されます。

送信先は3と同じです。

{
    "input_type": 0,
    "requests": [
        {
            "language": "quickdraw",
            "writing_guide": {   // キャンバスサイズ
                "width": 2035,     
                "height": 680
            },
            "ink": [
                [
                    [ <手書きのX座標>  ],
                    [ <手書きのY座標>  },
                    [ <開始からの経過ミリ秒> ]
                ]
            ]
        }
    ]
}

キャンバスそのものではなく、「どのタイミングで何を書いたか」というような情報を送っているようですね。

そしてレスポンスとして以下のように推論結果をもらっているようです。

各結果の確度も入っていますね。

[
    "SUCCESS",
    [
       [
          "a347893a4096bea6",
          [
             "peanut",
             "potato",
             "flip flops",
             "water",
             "string bean",
             "hot dog",
             "paper clip",
             "circle",
             "computer mouse",
             "spoon",
             "banana",
             "socks",
             "shoe",
             "heart",
             "finger",
             "screwdriver",
             "ear",
             "mouse",
             "nose",
             "marker"
          ],
          [],
          {
             "debug_info" : "SCORESINKS: [[\"peanut\",0.400938],[\"potato\",1.79888],[\"flip flops\",2.99081],[\"water\",3.77114],[\"string bean\",3.9635],[\"hot dog\",4.01748],[\"paper clip\",4.38693],[\"circle\",4.92827],[\"computer mouse\",5.56062],[\"spoon\",5.6268],[\"banana\",5.76432],[\"socks\",6.11124],[\"shoe\",6.28758],[\"heart\",6.31111],[\"finger\",6.4507],[\"screwdriver\",6.60625],[\"ear\",6.61652],[\"mouse\",6.69554],[\"nose\",7.12813],[\"marker\",7.27362]] Combiner:2.6ms Service_Recognize:2.8ms",
             "is_html_escaped" : false
          }
       ]
    ],
    "",
    {
       "app_info" : "quickdraw",
       "bns" : "/bns/tp/borg/tp/bns/i18n-input-prod/input-frontend.ife/1",
       "decode_latency_in_ms" : 3.524,
       "engine_info" : [
          {
             "engine_call_latency_msec" : 3,
             "engine_compute_latency_msec" : 3,
             "engine_name" : "handwriting|/bns/wn/borg/wn/bns/handwriting/recoservice,/bns/is/borg/is/bns/handwriting/recoservice,/bns/ld/borg/ld/bns/handwriting/recoservice,/bns/pg/borg/pg/bns/handwriting/recoservice,/bns/th/borg/th/bns/handwriting/recoservice"
          }
       ],
       "experiment_id" : [],
       "is_valid_request_data" : true,
       "original_input_method_name" : "handwriting",
       "plugin_name" : "handwriting_plugin",
       "request_serve_latency_in_ms" : 3,
       "rewritten_input_method_name" : "und-t-i0-handwrit"
    }
 ]

以後は5回分(残りのお題の数)繰り返してという感じですね。

5.まとめ

Quick, Draw!で使用されているモデルは

3次元(X、Y、時間)から280のクラス分類が可能ということがわかりました。

まぁ、3次元のデータはサーバーサイドで何か加工してモデルに入力してるかもしれないですね。

調べながら何回か遊んでましたけど、絵心ないな。。。

via GIPHY