检测图片中的文本

Google Distributed Cloud (GDC) 空气隔离环境中的 Vertex AI 光学字符识别 (OCR) 服务使用 BatchAnnotateImages API 方法检测图片中的文本。该服务支持 JPEG 和 PNG 格式的图片文件。

本页介绍如何使用 Distributed Cloud 上的 OCR API 检测图片文本。

准备工作

在开始使用 OCR API 之前,您必须有一个启用了 OCR API 的项目,并且拥有相应的凭据。 您还可以安装客户端库,以便调用 API。如需了解详情,请参阅设置字符识别项目

检测 JPEG 和 PNG 文件中的文本

BatchAnnotateImages 方法可检测一批 JPEG 或 PNG 文件中的文本。 您直接在 API 请求中将要检测文本的文件作为内容发送。系统会在 API 响应中以 JSON 格式返回检测到的文本结果。

您必须为 API 请求的 JSON 正文中的字段指定值。下表介绍了使用 BatchAnnotateImages API 方法发出文本检测请求时必须提供的请求正文字段:

请求正文字段 字段说明
content 要检测的包含文字的图片。您提供二进制图片数据的 Base64 表示(ASCII 字符串)。
type 您需要从图片中检测到的文字类型。

指定以下两种注解功能之一:
  • TEXT_DETECTION 可检测并提取任何图片中的文本。JSON 响应包含提取的字符串、各个字词及其边界框。
  • DOCUMENT_TEXT_DETECTION 也可提取图片中的文本,但该服务会针对密集文本和文档优化响应。JSON 包含页面、文本块、段落、字词和换行信息。
如需详细了解这些注解功能,请参阅光学字符识别功能
language_hints 可选。用于文本检测的语言列表。

系统会将此字段的空值解读为自动语言检测。

对于基于拉丁字母的语言,您无需设置 language_hints 字段。

如果您知道图片中文本的语言,设置提示有助于获得更好的结果。

如需了解完整的 JSON 表示形式,请参阅 AnnotateImageRequest

发出 API 请求

使用 REST API 方法向 OCR 预训练 API 发出请求。否则,请通过 Python 脚本与 OCR 预训练 API 交互,以检测 JPEG 或 PNG 文件中的文本。

以下示例展示了如何使用 OCR 检测图片中的文字:

REST

如需使用 REST API 方法检测图片中的文字,请按以下步骤操作:

  1. 保存以下 request.json 文件作为请求正文:

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "image": {
            "content": BASE64_ENCODED_IMAGE
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          }
        }
      ]
    }
    EOF
    

    替换以下内容:

    • BASE64_ENCODED_IMAGE:二进制图片数据的 Base64 表示(ASCII 字符串)。此字符串以类似于 /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q== 的字符开头。
    • FEATURE_TYPE:您需要从图片中检测出的文本类型。允许的值为 TEXT_DETECTIONDOCUMENT_TEXT_DETECTION
    • LANGUAGE_HINT:用作文本检测语言提示的 BCP 47 语言标记,例如 en-t-i0-handwrit。此字段是可选字段,系统会将空值解读为自动语言检测。
  2. 获取身份验证令牌

  3. 发出请求:

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/images:annotate
    

    替换以下内容:

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/images:annotate" | Select-Object -Expand Content
    

    替换以下内容:

Python

按照以下步骤操作,使用 Python 脚本中的 OCR 服务检测图片中的文本:

  1. 安装最新版本的 OCR 客户端库

  2. 在 Python 脚本中设置所需的环境变量

  3. 对 API 请求进行身份验证

  4. 将以下代码添加到您创建的 Python 脚本中:

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_client(creds):
      opts = ClientOptions(api_endpoint=api_endpoint)
      return vision.ImageAnnotatorClient(credentials=creds, client_options=opts)
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
        print("Got token: ")
        print(creds.token)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    def vision_func(creds):
      vc = vision_client(creds)
      image = {"content": "BASE64_ENCODED_IMAGE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single image. To annotate more
      # images, create a request element for each image and add it to
      # the array of requests
      req = {"image": image, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_image(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

    替换以下内容:

    • ENDPOINT:您组织使用的 OCR 端点。如需了解详情,请查看服务状态和端点
    • BASE64_ENCODED_IMAGE:二进制图片数据的 Base64 表示(ASCII 字符串)。此字符串以类似于 /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q== 的字符开头。
    • FEATURE_TYPE:您需要从图片中检测出的文本类型。允许的值为 TEXT_DETECTIONDOCUMENT_TEXT_DETECTION
    • PROJECT_ID:您的项目 ID。
  5. 保存 Python 脚本。

  6. 运行 Python 脚本以检测图片中的文本:

    python SCRIPT_NAME
    

    SCRIPT_NAME 替换为您为 Python 脚本指定的名称,例如 vision.py