Googleドライブの画像をAPIのURLリクエストする際の注意点(A3RTの画像AI利用時)

Googleドライブにある画像ファイルを画像認識するため、APIリクエストする際にはいくつかの注意すべき点があります。

APIリクエストでGoogleドライブの画像を利用したい場合に、知っておきたいポイントを解説します。

機械学習・AIのAPIでGoogleドライブの画像を使用

機械学習やAIサービスのAPIで画像認識や画像識別を行う際に、Googleドライブの画像を使うケースがあります。

レンタルサーバーなどに画像をアップロードすることでも可能ですが、Googleドライブのほうが画像管理がしやすいため、利用しやすいです。

しかし、Googleドライブに画像をアップして、リンクURLを取得しただけではAPIリクエストには活用することはできません。

リクルートのAI「A3RT」でAPIエラー

実際に機械学習サービスの中で、リクルートのAI「A3RT」のImage Search APIを使った際に、Googleドライブの画像をAPIリクエストに使おうとトライしました。

しかし、Googleドライブに保存した画像のURLを取得して、API通信で利用しようとしたところ、APIがエラーして処理が走りませんでした。

試行錯誤していった中でうまくAPIでリクエストが飛ばせるようになったので、Googleドライブの画像を利用する際に気をつけたいポイントを紹介します。

Googleドライブの画像をAPIリクエストする際の注意点

Googleドライブに格納されている画像を人工知能や機械学習のAPIでリクエストする際には2つの注意点があります。

Googleドライブで画像のリンク共有を有効に

そもそもまずAPIリクエストする際には、Googleドライブの画像の権限周りを設定する必要があります。

通常、Googleドライブに画像をアップロードすると、その画像にアクセスできるのはドライブのアカウントユーザーのみです。

APIリクエストで画像にアクセスすると、画像を表示する権限がないため、エラーが発生してしまいます。

APIリクエスト行うための事前準備として、外部からアクセス可能なリンク共有を有効にする必要があります。

APIリクエストを行う画像を右クリック「共有」を選択します。

アクセス権限が自分しかない状態なのを、リンク共有を有効にします。

これでAPIの通信先のシステムから画像にアクセスが可能になります。

Googleドライブの画像URLは特別な書き方が必要

前述の権限周りで画像ファイルのリンク共有を有効化し、Googleドライブの共有リンクを取得しますが、このリンクURLではAPIリクエストに失敗してしまいます。

https://drive.google.com/file/d/{ID}/view?usp=sharing

ネットなどの情報を調べると、HTMLにimgタグとして画像を受け込みたい場合には、下記のようなURLの書き方を変更するようにとあります。

http://drive.google.com/uc?export=view&id={ID}

しかし、上記の書き方でもA3RTへのリクエストでは失敗し、400のエラー応答が帰ってきます。

画像URLとしてAPIリクエストに成功させるためには下記の形式に書き換える必要があります。

https://drive.google.com/uc?id={ID}&{拡張子}

例えば、ファイル名が「●●●●.JPG」で、GoogleドライブのIDが「1EvJ4miXmcwUNsoWa2GnwwTVS_CxKVb29」の場合は、以下のようになります。

https://drive.google.com/uc?id=1EvJ4miXmcwUNsoWa2GnwwTVS_CxKVb29&.JPG

この画像URLをA3RTのImage Search APIにリクエストすることでエラーせずに、AIが画像を判定してくれます。

まとめ・終わりに

今回、Googleドライブの画像ファイルをAPIリクエストする際の注意点を紹介しました。

Googleドライブの画像はアップロードするとデフォルト自分のアカウントにしか閲覧権限がありません。

しかし、APIがアクセスする際は自分のアカウントとしてではなく、不特定多数のアクセス扱いになります。

そのため、APIリクエストしたい画像はリンク共有でリンクを知っている人は誰でも閲覧できる状態にしておかなければなりません。

さらに、APIリクエスト時にはリンク取得で得た画像URLでは、リクエストにエラーが生じます。

APIリクエストが成功する形式のURLに変換し、リクエストを投げる必要があります。

「https://drive.google.com/uc?id={ID}&{拡張子}」という形式をAPIでリクエストする際には使用しましょう。