认知服务Face api使用本地图像-PHP

认知服务Face api使用本地图像-PHP,php,microsoft-cognitive,Php,Microsoft Cognitive,我正在尝试使用PHP将本地图像上传到FaceAPI,我使用示例代码调用API,使用JSON也可以。但当转换为八进制流时,它会被卡住。我通过引用“”使用以下代码 我从api中得到以下响应 stdClass Object ( [error] => stdClass Object ( [code] => InvalidImageSize [message] => Image size is too small or too big. )

我正在尝试使用PHP将本地图像上传到FaceAPI,我使用示例代码调用API,使用JSON也可以。但当转换为八进制流时,它会被卡住。我通过引用“”使用以下代码

我从api中得到以下响应

stdClass Object
(
[error] => stdClass Object
    (
        [code] => InvalidImageSize
        [message] => Image size is too small or too big.
    )
)
在将二进制数据传递给api之前,我是否遗漏了一些步骤


图像大小仅为956KB,尺寸为2448x2448

Face 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);

您的图像太小或太大这与PHP无关。首先尝试调整图像的大小:通常,阅读收到的错误消息是一个很好的做法……现在就可以了。非常感谢您的帮助=)我不知道API不支持多部分MIME有效载荷(可能我错过了文档中的某些内容),我想我必须按照“pear”上的函数使用
addUpload()
上传文件。所以我坚持上传部分。谢谢,对这个答案的解释会很有用的。
$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);
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);