PHPからAzure Computer Vision APIを叩いたらハマった

GCPのVision APIは使いやすくてとても良いけどMSのComputer vision APIはDescriptionの自動生成が結構面白いので使ってみることに

そしたら結構ハマった

公式ドキュメントはこちら

  1. PHPのサンプルはPEARのHTTP_Request2を利用しているので導入必要
    自分は諸事情でsshできない環境なのでこちらを参考に導入
    解凍はcygwinで

    	$ tar -xzvf 解凍ファイル名
    
    
  2. サンプル33行目に値をどう入れるかわからない
    $request->setBody("{body}"); // Replace with the body, for example, "{"url": "http://www.example.com/images/image.jpg"}

    当然このままだとリソースが見つからず404。
    だが、example以下の部分をコピペしてパスを指定しても404 or 500error

    これの正しい指定方法はjsonで以下のように指定して代入する。

    $body = json_encode(array(
        // Request body parameters
        'url' => '画像のURL'
    ));
    // Request body
    $request->setBody($body);
    
    
  3. ダッシュボードに表示されるエンドポイントがエンドポイントじゃない
    これ一番ハマった

    Computer Vision APIは複数リージョン(ヨーロッパ,アメリカ,東南アジア)あり、リージョンに応じてサブドメインが違うので、自身が選択したリージョンに沿ったサブドメインにリクエストを送らないとpermission deniedになる
    そこは問題ないのだが、サンプル5行目の

    $request = new Http_Request2('https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze');

    の部分のURLをダッシュボードのエンドポイントからコピペしてはっつけると404になる。なんでや。

    結論からいうとダッシュ―ボードに表示されたURLは正しいエンドポイントではなく、サンプルにあるように/v1.0/analyzeが必要で、ただコピペしただけだと“/analyze”が抜けている。気づくかこんなの。

  4. 最後の最後で400 InvalidDetailsエラー
    ドキュメントによるとUnsupported domain-specific model.によるエラー。ドメイン固有言語?
    ただこの時点ではダッシュボードからリクエストは確認できる。謎や。。。
    答えは21-26行目のリクエストパラメーター

    $parameters = array(
        // Request parameters
        'visualFeatures' => 'Categories',
        'details' => '{string}',
        'language' => 'en',
    );
    

    これのdetailsが悪さをしている。
    ドキュメントを読んでみると、detailsはoptionなんだが、2の{body}同様{string}は何かしらパラメーターを入れる必要があるという意。
    それに{string}なんて文字列が入っているので受け取れなくてエラーが出ていた。わかるかー!

    結論・サンプルに騙された

最終的なサンプルおいておきます。

よいCVライフを

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA