PHP Azure OCR - 使用本地文件

时间:2017-09-06 12:32:48

标签: php azure post request ocr

我正在使用Azure OCR服务来获取图像的文本( https://docs.microsoft.com/de-de/azure/cognitive-services/Computer-vision/QuickStarts/PHP)。

到目前为止,所有内容都已启动并运行,但现在我想使用本地文件而不是已上传的文件。

$url->setQueryVariables($parameters);
$request->setMethod(HTTP_Request2::METHOD_POST);
// Request body
$request->setBody("{body}");  // Replace with the body, for example, "{"url": "http://www.example.com/images/image.jpg"}

不幸的是我不知道如何在PHP中将原始二进制文件作为我的POST请求的主体传递。

1 个答案:

答案 0 :(得分:1)

首先,当我们引用本地文件时,我们应该在标头中使用'Content-Type': 'application/octet-stream',然后我们可以发送使用流资源作为正文的请求。

我的工作代码使用Guzzle作为参考:

<?php

require 'vendor/autoload.php';

$resource = fopen('./Shaki_waterfall.jpg', 'r');

$client = new \GuzzleHttp\Client();    
$res = $client->request('POST', 'https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze', [
    'query' => [
        'visualFeatures' => 'Categories',
        'details' => '',
        'language' => 'en'
    ],
    'headers' => [
        'Content-Type' => 'application/octet-stream',
        'Ocp-Apim-Subscription-Key' => '<Ocp-Apim-Subscription-Key>'
    ],
    'body' => $resource 
]);

echo $res->getBody();

使用 HTTP_Request2

<?php

require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze');
$url = $request->getUrl();

$headers = array(
    'Content-Type' => 'application/octet-stream',
    'Ocp-Apim-Subscription-Key' => '<Ocp-Apim-Subscription-Key>',
);
$request->setHeader($headers);

$parameters = array(
    'visualFeatures' => 'Categories',
    'details' => '',
    'language' => 'en',
);
$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setBody(fopen('./Shaki_waterfall.jpg', 'r'));  

try {
    $response = $request->send();
    echo $response->getBody();

} catch (HttpException $ex) {
    echo $ex;
}