图文翻译

一、 服务概述

针对包含文字的图片,结合OCR图文识别技术和机器翻译,对图片中的文字内容进行识别,并翻译为指定语言

二、 服务申请

翻译 API 采用全流程自助申请的模式。

点击云上曲率官网(https://www.ilivedata.com/) 右上方的“免费试用”按钮,按照提示信息“注册账号-创建企业”后,在控制台选择“实时文本翻译”服务并创建应用,即可获得 pid 和服务密钥。

如需开通更多服务,可在管理控制台-总览页面开通其他服务。

三、 接入方式

参数 是否必需 描述
Content-Type 必需 application/json;charset=UTF-8 请求体类型
Accept 必需 application/json;charset=UTF-8 接受的返回类型
X-AppId 必需 项目唯一标识 获取方式: <控制台-服务配置>中的项目编号
X-TimeStamp 必需 当前时间 需要把当前时间戳按W3C标准格式化,例如: 2010-01-31T23:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)
Authorization 必需 签名字符串 计算方式参照下方的请求签名
  • 请求体JSON参数
参数 是否必需 类型 描述
type 必需 Number 1: 图片URL
2: 图片BASE64值。推荐使用BASE64方式调用,图片URL在网络不佳时可能会造成图片下载缓慢或下载失败等问题
image 必需 String 图片内容,如type=1,则该值为图片URL,如type=2,则该值为图片BASE64值
支持格式:jpg, png, bmp, gif, webp, tiff, heic 图片大小上限:10M
target 必需 String 图片中文字翻译的目标语言,同上需设置为语言支持文档中列举的ISO 639-1标准的语言代码之一
  • 请求签名:

当用户请求 Image Translation API 时,可以使用 appIdsecretKey 对请求做签名,当 API 收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API 将会返回 401 给用户。如果 API 验证签名一致,且 appId 对应的用户有权限操作请求的资源,则请求成功,否则 API 返回 401

  • 通过 HTTP 请求 Header 发送签名

方法: 在请求中加入名为 Authorization 的 Header,值为签名值。如下:

	Authorization: *****
  • 签名计算方法

    1. 构造规范化的请求字符串(Canonicalized Query String):

      将请求体JSON字符串以UTF-8字符编码做sha256编码后转换为16进制字符串(注意不是Base64) CanonicalizedQueryString = hex(sha256(jsonBody))

    2. 构造被签名字符串 StringToSign ("\n" 代表 ASCII 里的换行符):

             StringToSign = HTTPMethod + "\n" + 
                            HostInLowercase + "\n" + 
                            HTTPRequestURI + "\n" + 
                            CanonicalizedQueryString <从上一步得到>
                            "X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
                            "X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
      

      HTTPRequestURI 是请求 URI 的绝对路径,不包含请求串。如果 HTTPRequestURI 为空,也需保留一个正斜杠 /

      使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码(HMAC),然后计算签名。

    3. StringToSign 作为签名字符串,secretKey 作为秘钥,SHA256作为哈希算法

      有关 HMAC 的更多信息,请参阅 HMAC:用于消息身份验证的哈希密钥(https://tools.ietf.org/html/rfc2104)。

    4. 将上一步的结果转换为 BASE64 串

    5. 将 BASE64 串放入 HTTP 请求 Header 的 Authorization

  • 签名示例

  1. appId & secretKey 的示例

     appId=***
     secrectKey=***
    
  2. 示例请求

Request Json:

{
    "type": "2",
    "userId": "test",
    "target": "zh-CN",
    "image": "T2dnUwACAAAAAAAAAAAd8pVTAAAAAGsIvpMBE..."
}

生成CanonicalizedQueryString: b3ad8e9d16439ccd5e91924d2516bf9592975003f69beff44e56cddf47bd3118

  1. 生成 StringToSign

     POST\n
     translate.ilivedata.com\n
     api/v1/image/translate\n
     b3ad8e9d16439ccd5e91924d2516bf9592975003f69beff44e56cddf47bd3118
     X-AppId:***
     X-TimeStamp:2020-07-31T07:59:03Z
    
  2. HMAC 计算得到的签名

     ******
    

    设置Header Authorization:******

  • 请求响应:

Content-Type: application/json;charset=UTF-8

具体参数说明:

字段名 类型 描述
errorCode Number 错误码,0表示成功
errorMessage String 错误消息
code Number 状态码,定义为:0:检测成功,1:图片下载失败,2:图片格式错误,3:其他
taskId String 翻译任务唯一标识
ocr String[] 识别出的图文列表
ocrDetail OcrDetail[] 识别出的图文详细信息列表 含有文本内容和
translateResult TranslateResult[] 翻译结果

OcrDetail结构:

字段名 类型 描述
text String 文本内容
coordinate Number[][] 文本对应的一组坐标, 分别是矩形文本框四个顶点的相对坐标, 范围在(0,1)

TranslateResult结构:

字段名 类型 描述
source String 图文语种
target String 翻译目标语种
sourceText String 图文内容
targetText String 翻译结果
  • HTTP 响应示例:
{
    "errorCode": 0,
    "code": 0,
    "ocr": [ "MICHAEL" ],
    "ocrDetail": [
      {
        "coordinate": [
            [0.8256130790190735,0.9365079365079365],
            [0.9346049046321526,0.9365079365079365],
            [0.9346049046321526,0.981859410430839],
            [0.8256130790190735,0.981859410430839]
        ],
        "text": "MICHAEL"
      }
    ],
    "taskId": "Tencent-ap_867488e27ab14c138180479992ab114b_1719829148272",
    "translateResult": [
      {
        "source": "en",
        "target": "zh-CN",
        "sourceText": "MICHAEL",
        "targetText": "迈克尔"
      }
    ]
}