You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Computer Vision API v1.0识别手写文本返回空响应求助

解决Azure Computer Vision API RecognizeText接口空响应问题

看起来你遇到的问题大概率是没摸透recognizeText接口的异步特性——这个接口不会直接返回识别结果,得分成两步操作:先提交图片获取任务地址,再轮询该地址拿到最终结果。另外从你给出的代码片段来看,还有几个关键细节没处理到位,我帮你梳理下:

常见问题根源

  • recognizeText是异步API,首次POST请求只会返回一个Operation-Location响应头,不会直接输出文本识别结果,直接读取响应体自然是空的
  • 代码里大概率缺失了订阅密钥头(Ocp-Apim-Subscription-Key),这是调用Azure认知服务的必备验证参数
  • 没有设置图片的请求体(比如图片二进制数据或者Base64编码内容),API根本拿不到待识别的素材

修正后的完整PHP代码示例

<?php
$subscriptionKey = "你的Azure订阅密钥";
$imageSource = "本地图片路径或者图片网络URL"; // 二选一即可

// 第一步:提交识别请求,获取任务轮询地址
$request = new HttpRequest();
$request->setUrl('https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/recognizeText');
$request->setMethod(HTTP_METH_POST);
$request->setQueryData(array(
    'language' => 'en',
    'handwriting' => 'true'
));
$request->setHeaders(array(
    'Ocp-Apim-Subscription-Key' => $subscriptionKey,
    'Content-Type' => 'application/octet-stream' // 用网络URL的话改成application/json
));

// 根据图片来源设置请求体
if (file_exists($imageSource)) {
    // 本地图片:读取二进制数据
    $request->setBody(file_get_contents($imageSource));
} else {
    // 网络图片:传入JSON格式的URL
    $request->setBody(json_encode(array('url' => $imageSource)));
    $request->setHeaders(array('Content-Type' => 'application/json'));
}

try {
    $response = $request->send();
    // 提取轮询用的Operation-Location地址
    $operationLocation = $response->getHeader('Operation-Location');
    
    if (!$operationLocation) {
        die("无法获取任务地址,请检查订阅密钥和请求参数是否正确");
    }

    // 第二步:轮询任务地址获取结果,建议间隔1-2秒重试
    $maxRetries = 10;
    $retryCount = 0;
    $finalResult = null;

    while ($retryCount < $maxRetries) {
        $retryCount++;
        sleep(1); // 等待1秒再发起重试,避免触发API限流

        $resultRequest = new HttpRequest();
        $resultRequest->setUrl($operationLocation);
        $resultRequest->setMethod(HTTP_METH_GET);
        $resultRequest->setHeaders(array(
            'Ocp-Apim-Subscription-Key' => $subscriptionKey
        ));

        $resultResponse = $resultRequest->send();
        $resultData = json_decode($resultResponse->getBody(), true);

        if ($resultData['status'] === 'Succeeded') {
            $finalResult = $resultData['recognitionResult'];
            break;
        } elseif ($resultData['status'] === 'Failed') {
            die("识别任务失败:" . $resultData['message']);
        }
    }

    if ($finalResult) {
        echo "识别结果:\n";
        foreach ($finalResult['lines'] as $line) {
            echo $line['text'] . "\n";
        }
    } else {
        die("超过重试次数,未能获取识别结果");
    }

} catch (HttpException $ex) {
    echo "请求出错:" . $ex->getMessage();
}
?>

关键注意事项

  • 务必替换$subscriptionKey为你自己的Azure Computer Vision订阅密钥
  • 根据图片来源选择对应的Content-Type:本地图片用application/octet-stream,网络URL用application/json
  • 异步接口的轮询间隔别太短,建议1-2秒一次,避免触发API限流机制
  • 检查代码里的API区域(示例中是westcentralus)是否和订阅密钥的所属区域一致,区域不匹配会直接导致请求失败

内容的提问来源于stack exchange,提问作者Nick Dunas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:51:34