请问为什么 M 函数调用百度文字识别 API 提示 image 参数出错?

Power Query Ntt docomo ⋅ 于 2018-08-27 16:30:11 ⋅ 最后回复由 Ntt docomo 2018-09-18 10:17:02 ⋅ 2792 阅读

file
file
我已经把图片编码成base64还是不行。

Ntt.Docomo

本帖已被设为精华帖!
本帖由 Alex 于 5年前 加精
最佳答案
  • Alex MOD 社区清洁工
    2018-08-27 17:37:40

    你的 access_token 是不是用的文档示例上的?
    根据文档的介绍,是需要根据 API KeySecret Key 获取的,有效期为 30 天。
    所以需要请求 2 次,先根据 API KeySecret Key 请求获取到 access_token,然后再根据 access_token 和图片获取文字。代码为:

    let
        token_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxx",
        token_headers = [#"Content-Type"="application/json; charset=UTF-8"],
        token = Json.Document(Web.Contents(token_url,[Headers=token_headers,Content=Text.ToBinary("")]))[access_token],
        img_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="&token,
        img_headers = [#"Content-Type"="application/x-www-form-urlencoded"],
        img_content = "image="&Uri.EscapeDataString(Binary.ToText(File.Contents("C:\xxxxxxxxxxx.png"),BinaryEncoding.Base64)),
        result = Table.FromRecords(Json.Document(Web.Contents(img_url,[Headers=img_headers,Content=Text.ToBinary(img_content)]))[words_result])
    in
        result

    注意修改图片的路径和 API KeySecret Key 为你自己的。

回复数量: 2
  • Alex MOD 社区清洁工
    2018-08-27 17:37:40

    你的 access_token 是不是用的文档示例上的?
    根据文档的介绍,是需要根据 API KeySecret Key 获取的,有效期为 30 天。
    所以需要请求 2 次,先根据 API KeySecret Key 请求获取到 access_token,然后再根据 access_token 和图片获取文字。代码为:

    let
        token_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxx",
        token_headers = [#"Content-Type"="application/json; charset=UTF-8"],
        token = Json.Document(Web.Contents(token_url,[Headers=token_headers,Content=Text.ToBinary("")]))[access_token],
        img_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="&token,
        img_headers = [#"Content-Type"="application/x-www-form-urlencoded"],
        img_content = "image="&Uri.EscapeDataString(Binary.ToText(File.Contents("C:\xxxxxxxxxxx.png"),BinaryEncoding.Base64)),
        result = Table.FromRecords(Json.Document(Web.Contents(img_url,[Headers=img_headers,Content=Text.ToBinary(img_content)]))[words_result])
    in
        result

    注意修改图片的路径和 API KeySecret Key 为你自己的。

  • Ntt docomo
    2018-08-27 19:44:38

    @Alex 感谢站长,问题是Base64编码没有使用Uri.EscapeDataString处理以及image是放在一个List里面了

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter