GCP始めました

· ☕ 4
🏷️
  • #GCP
  • ずっと画像認識機能作りたくて、やりたいけど、なかなか踏み出せずにいたGCPのOCR。

    やっと手を出してみました。

    実は以前にgoogleカレンダーの取得をするのにGCPはちょっと使ったりしたのですが、コンソールをちょっと触っただけで、よく分かってないんですが、googleカレンダーをapiから操作できるように設定した?くらいしかしていないから、ちゃんとさわるのは初。

    まずはcliツールをインストールしてみます。

    環境

    versionなど
    OS windows10
    WSL Ubuntu 18.04 LTS
    gcloud Google Cloud SDK 288.0.0
    bq 2.0.56
    core 2020.04.03
    gsutil 4.49

    cliツール

    gcpにはgcloudというツールがあるみたい。

    やっぱり全く知らないものを始めるときは、初心者向け記事に頼るに限る!

    ってことで、この記事通りに設定。

    GCPのgcloudコマンドのインストールと最初の認証までを初心者向けに細かく解説

    ちょっと時間かかりましたが、15分程度でインストール完了。

    で、aws configure的なものして、gcloudが使える状態に!

    私の場合、bash_profileが場所と名前が違ったので、

    $ source .bash_profile
    bash: .bash_profile: No such file or directory
    

    ってなりました。

    $ source ~/.bashrc
    $ gcloud version
    Google Cloud SDK 288.0.0
    bq 2.0.56
    core 2020.04.03
    gsutil 4.49
    

    bashrcにしたらOK!

    あとちょっと違ったのが、認証画面が勝手に開かなくて、↓みたいになって止まってしまったので、自力で↓のアドレスにアクセスして認証。

    You must log in to continue. Would you like to log in (Y/n)?  y
    
    Go to the following link in your browser:
    
        https://accounts.google.com/o/oauth2/auth?code_challenge=-Jxxxxx
        
    
    Enter verification code: 
    

    Cloud Storage

    最後にこんな感じになるので、Enter verification codeにコードをコピペ

    You are logged in as: [Xxxx@gmail.com].って出たら認証完了

    OCR導入

    で、急に難しくなるOCR導入の公式チュートリアル

    Cloud Storage バケットを作成

    もう、ここからどうしたらって感じですけども、s3のバケット作る感じでいいのよね?

    コマンドでできんのかしら?

    調べたけど、よく分からないから、素直にコンソールからやる。

    バケット作成公式チュートリアル

    ここからCloud Storageに入れるみたい。

    Cloud Storage

    入ってしまえば、s3と同じですねw

    ただ、次からここにどうやってくればいいのかが分かんないけどもww

    Cloud Storage

    名前だけ入れれば作れるみたい。

    s3と一緒で全世界で一意になるように!

    あ、これでいけたみたい…

    gsutil mb gs://バケット名
    

    サンプルソースを取得

    $ mkdir ocr
    $ cd ocr
    $ git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    

    config.jsonを書き換える

    {
        "RESULT_TOPIC": "YOUR_RESULT_TOPIC_NAME",
        "RESULT_BUCKET": "YOUR_TEXT_BUCKET_NAME",
        "TRANSLATE_TOPIC": "YOUR_TRANSLATE_TOPIC_NAME",
        "TRANSLATE": true,
        "TO_LANG": ["en", "fr", "es", "ja", "ru"]
        }
    

    TOPIC…とは…

    TOPICも作らないといけないってことだよね…

    むぅ…

    TOPICの作り方

    トピックとサブスクリプションの管理

    pythonで作れるみたい?

    from google.cloud import pubsub_v1
    
    PROJECT_ID = "ocr-test-274009"
    
    def createTopic(project_id,topic_name):
        publisher = pubsub_v1.PublisherClient()
        topic_path = publisher.topic_path(project_id, topic_name)
    
        topic = publisher.create_topic(topic_path)
    
        print("Topic created: {}".format(topic))
    
    createTopic(PROJECT_ID,"ocr-result-topic")
    createTopic(PROJECT_ID,"ocr-translate-topic")
    
    

    なんかダメだった…。

    $ python createTopic.py
      Traceback (most recent call last):
      File "createTopic.py", line 13, in <module>
        createTopic(PROJECT_ID,"ocr-result-topic")
      File "createTopic.py", line 6, in createTopic
        publisher = pubsub_v1.PublisherClient()
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/cloud/pubsub_v1/publisher/client.py", line 158, in __init__
        "grpc.max_receive_message_length": -1,
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 177, in create_channel
        credentials, _ = google.auth.default(scopes=scopes)
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/auth/_default.py", line 321, in default
        raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
    google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started
    

    GOOGLE_APPLICATION_CREDENTIALSがちゃんと設定されてないらしい…。

    IAMユーザーみたいなの作って、キー設置した。

    それでもだめだった…

    $ python createTopic.py
    Traceback (most recent call last):
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
        return callable_(*args, **kwargs)
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/grpc/_channel.py", line 826, in __call__
        return _end_unary_response_blocking(state, call, False, None)
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/grpc/_channel.py", line 729, in _end_unary_response_blocking
        raise _InactiveRpcError(state)
    grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
            status = StatusCode.PERMISSION_DENIED
            details = "Cloud Pub/Sub API has not been used in project 764298735256 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/pubsub.googleapis.com/overview?project=764298735256 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."
            debug_error_string = "{"created":"@1586708062.236353500","description":"Error received from peer ipv6:[2404:6800:4004:800::200a]:443","file":"src/core/lib/surface/call.cc","file_line":1056,"grpc_message":"Cloud Pub/Sub API has not been used in project 764298735256 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/pubsub.googleapis.com/overview?project=764298735256 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.","grpc_status":7}"
    >
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "createTopic.py", line 13, in <module>
        createTopic(PROJECT_ID,"ocr-result-topic")
      File "createTopic.py", line 9, in createTopic
        topic = publisher.create_topic(topic_path)
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/cloud/pubsub_v1/_gapic.py", line 40, in <lambda>
        fx = lambda self, *a, **kw: wrapped_fx(self.api, *a, **kw)  # noqa
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/cloud/pubsub_v1/gapic/publisher_client.py", line 332, in create_topic
        request, retry=retry, timeout=timeout, metadata=metadata
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
        return wrapped_func(*args, **kwargs)
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/retry.py", line 286, in retry_wrapped_func
        on_error=on_error,
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/retry.py", line 184, in retry_target
        return target()
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
        return func(*args, **kwargs)
      File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
        six.raise_from(exceptions.from_grpc_error(exc), exc)
      File "<string>", line 3, in raise_from
    google.api_core.exceptions.PermissionDenied: 403 Cloud Pub/Sub API has not been used in project 764298735256 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/pubsub.googleapis.com/overview?project=764298735256 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
    

    まだ駄目だった…

    Cloud Pub/Sub APIを有効にした。

    $ python createTopic.py 
    Topic created: name: "projects/ocr-test-274009/topics/ocr-result-topic"
    
    Topic created: name: "projects/ocr-test-274009/topics/ocr-translate-topic"
    

    できた。

    続きは明日。


    るな
    るな
    エンジニア