我正在使用 Azure OCR 服务取回图像的文本( https://learn.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 请求的正文传递。
最佳答案
首先,当我们引用本地文件时,我们应该在 header 中使用 'Content-Type': 'application/octet-stream'
,然后我们可以发送使用流资源的请求 body 。
这是我使用 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;
}
关于PHP Azure OCR - 使用本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46075366/