2016-08-02 5 views
-1

PHPを使用してface APIにローカルイメージをアップロードしようとしていますが、サンプルコードを使用してapiを呼び出すとJSONを使用すると問題ありません。オクテットストリームに変更された場合には固まってしまいます。私は「https://pear.php.net/manual/en/package.http.http-request2.request.phpコグニティブサービスFace APIがローカルイメージを使用しています - PHP

$image = "images/face-021.jpg"; 
$fp = fopen($image, 'r+'); 
$request->addUpload('stuff', $fp, 'custom.name', 'application/octet-stream'); 

を参照して以下のコードを使用して、私は、以下のAPIを形成するに応答します。

stdClass Object 
(
[error] => stdClass Object 
    (
     [code] => InvalidImageSize 
     [message] => Image size is too small or too big. 
    ) 
) 

バイナリデータをAPIに渡す前にいくつかの手順がありませんか?

画像サイズがちょうど956キロバイトで、寸法は2448 X 2448

+0

あなたの画像が小さすぎるか、大きすぎる – NDM

+0

これはPHP関連ではありません。まず画像のサイズを変更してみてください:https://secure.php.net/manual/en/intro.imagick.php – siannone

+0

通常、受信したエラーメッセージを読むのは良い習慣です。 – walther

答えて

1

あるフェイスAPIがマルチパートMIMEペイロードをサポートしていません。代わりに、リクエストの本文に直接イメージを送信する必要があります。

$image = 'images/face-021.jpg'; 
$fp = fopen($image, 'rb'); 
$request->setBody($fp); 
$request->setHeader('Content-Type', 'application/octet-stream'); 
$request->setMethod(HTTP_Request2::METHOD_POST); 
+0

これは今動作します。本当にありがとうございます=) APIはmultipart MIMEペイロードをサポートしていません(多分私はドキュメント上で何かが恋しいのですが)、私は "梨"の機能に従っていますが、 'addUpload()' 。だから私はアップロードの部分に立ち往生した。ありがとうございます –

0
function microimg() { 
    //$GLOBALS['telegram']->ssendmessage($GLOBALS['userid'], $urlImage);  
    $request = new Http_Request2('https://westus.api.cognitive.microsoft.com/face/v1.0/detect'); 
    $url1 = $request->getUrl(); 

    $headers = array(`enter code here` 
     'Content-Type' => 'application/json', 
     'Ocp-Apim-Subscription-Key' => 'xxxxxxxxxxxxxxxxxx' 
    ); 

    $request->setHeader($headers); 

    $parameters = array(
    // Request parameters 
    'returnFaceId' => 'true', 
    'returnFaceLandmarks' => 'false', 
    'returnFaceAttributes' => 'age', 
    ); 

    $parameters = array(); 
    $url1->setQueryVariables($parameters); 
    $request->setMethod(HTTP_Request2::METHOD_POST); 

    //$request->setBody('{"url": "http://miladddddddddddddd.ml/fillter_image/photos/file_93.jpg" }'); 
    $request->setBody('{"url": "'.$GLOBALS['fileurl'].'" }'); 
    $err = $request->setBody; 
    try { 
     $response = $request->send(); 
     echo $response->getBody(); 
     $ed = $response->getBody(); 
     $GLOBALS['telegram']->ssendmessage($GLOBALS['userid'],$ed); 
     $GLOBALS['telegram']->ssendmessage($GLOBALS['userid'], $GLOBALS['fileurl']);  
    } catch (HttpException $ex) { 
     echo $ex; 
    } 
} 


microimg($urlimg); 
+1

この回答の説明は役に立ちます。 –

関連する問題