PAYATHON 2026

Google API 如何统计 Android OCR 请求并收费?

架构老王

明确结论

com.google.android.gms:play-services-vision:10.0.1 使用的是 Android 端的 Mobile Vision API。OCR 在设备本地完成,不会把每一帧图片发送到 Google Cloud Vision API。因此:

  • 不需要 Google API Key、Cloud 项目或付款方式;
  • Google 不会按 OCR 调用次数收费;
  • 不存在”每月前 1000 次免费,超出后收费或停止识别”的限制。

按请求计费的是通过网络调用的 Google Cloud Vision API,与这个 Android 本地 OCR 组件无关。

为什么没有 API Key

教程中的 TextRecognizer 通过 Google Play services 在设备端识别文字:

TextRecognizer textRecognizer =
        new TextRecognizer.Builder(context).build();

if (!textRecognizer.isOperational()) {
    // 识别组件尚未准备好,或者设备环境不满足要求
}

图片数据会直接交给本地识别器:

Frame frame = new Frame.Builder()
        .setBitmap(bitmap)
        .build();

SparseArray<TextBlock> textBlocks = textRecognizer.detect(frame);

这里的 detect() 是本地方法调用,并非 Cloud Vision API 的 HTTP 请求。即使连续处理摄像头画面,也不会因调用次数增加而产生 Cloud Vision API 费用。

有些设备需要通过 Google Play services 下载 OCR 模型或相关组件,首次使用时 isOperational() 可能暂时返回 false。这是组件下载,与按 OCR 请求计费无关。

使用完毕后,应释放识别器:

textRecognizer.release();

哪种情况才会按请求收费

只有应用或后端主动调用 Google Cloud Vision API,才会涉及云端配额和计费。例如,请求可能发送到下面这样的服务端接口:

POST https://vision.googleapis.com/v1/images:annotate

典型的云端调用流程包括:

  1. 创建 Google Cloud 项目;
  2. 启用 Cloud Vision API;
  3. 为项目启用结算;
  4. 使用 API Key、OAuth 2.0 或服务账号进行身份认证;
  5. 将图片或 Cloud Storage 地址提交到云端;
  6. Google Cloud 根据项目、功能和请求量统计用量。

云端 OCR 的计费单位和免费额度可能随时间、地区及具体功能变化,应以实际调用时的官方定价和配额页面为准。

超过免费额度后会怎样

当前使用的是 Mobile Vision 本地实现,没有免费额度耗尽的问题。即使识别次数超过 1000 次,Google 也不会按照云端计费规则阻止识别。

如果改用 Cloud Vision API,超过免费额度后的情况取决于项目配置:

  • 已启用有效结算:请求通常会继续处理,并按适用价格收费;
  • 未启用结算或结算账户无效:请求可能失败;
  • 达到项目配额或人为设置的用量上限:请求可能返回配额错误;
  • 触发速率限制:可能暂时返回 429 Too Many Requests 等错误。

免费额度并不一定是硬性调用上限。

新项目应考虑迁移到 ML Kit

play-services-vision:10.0.1 是一个很旧的依赖,Mobile Vision API 也已有后续替代方案。新项目建议使用 ML Kit Text Recognition,并按需求选择模型交付方式:

  • Bundled 模型:模型随应用打包,安装后通常可以立即使用,但会增加应用体积;
  • Google Play services 模型:应用体积较小,但首次识别前可能需要下载模型。

ML Kit 的设备端文字识别同样主要在本地完成,不应与 Google Cloud Vision API 的按请求计费混淆。具体依赖版本应查阅最新官方文档,不建议继续沿用旧教程中的版本号。

注意事项

  • 不要仅凭产品名称中的 "Google OCR" 判断是否收费,应先确认识别是在设备端还是云端执行。
  • 本地 OCR 消耗的主要是设备的 CPU、内存、电量和模型存储空间,不会产生云端请求费用。
  • 如果以后改用 Cloud Vision API,不要将服务账号私钥直接放进 Android APK。APK 很容易被反编译,使用服务账号的调用应放在受控后端。
  • 即使使用受限制的 API Key,也应设置应用限制、API 限制、配额和预算告警。
  • 判断本地识别是否需要联网时,应区分”首次下载模型”和”上传图片执行识别”。需要下载模型,不代表每次识别都会调用付费云 API。

备注:内容仅供参考。