腾讯云OCR服务二次开发如何实现?

2026-05-19 20:481阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2165个文字,预计阅读时间需要9分钟。

腾讯云OCR服务二次开发如何实现?

本文记录了对腾讯云OCR服务二次开发的代码和实践过程,以及开发过程中遇到的问题。

腾讯云OCR服务二次开发

目录

1. 腾讯云OCR服务二次开发

2.前言

3.安装SDK

4.调用API

5.学习API文档

6.通用印刷体识别API

7.代码

前言

为了实现特定功能,我们对腾讯云OCR服务进行了二次开发。

安装SDK

首先,我们需要安装腾讯云OCR服务的SDK。

调用API

接下来,我们通过API调用OCR服务。

学习API文档

为了更好地使用API,我们仔细学习了API文档。

通用印刷体识别API

我们使用了通用印刷体识别API进行文本识别。

代码

以下是实现OCR功能的代码示例:

python

代码示例

以上是对腾讯云OCR服务二次开发的简要记录。

本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题。 腾讯云OCR服务二次开发

目录
  • 腾讯云OCR服务二次开发
    • 前言
    • 安装SDK
    • 调用API
      • 学习API文档
      • 通用印刷体识别API
    • 代码
      • main.py
      • parse_args.py
      • ocrtool.py
    • 运行结果
      • 本地图片
      • 本地PDF
      • 网络图片
    • 问题整理
      • 问题1:argparse模块参数之间如何生成依赖?
      • 问题2:argparse模块parser的参数type是bool时,CLI中传入参数即使是False,也会认为是True
      • 问题3:bytes格式转化为str格式的方法:
    • 后续想法

前言

因为腾讯云账户中还剩一点点钱,刚刚好够买腾讯云里文字识别服务,想着自己平时看PDF比较多,可以用这个服务来便捷的进行图像文字转换。我购买的是通用印刷体识别,即可以对图片进行识别,也可以对PDF文件进行识别。需要注意的的是,图片识别需要将图片转为Base64,PDF识别时每次只能识别一张。

腾讯云OCR服务二次开发如何实现?

本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题。

安装SDK

我使用的是Python 3.6,要使用腾讯云的OCR服务,要先在本地环境中安装腾讯云的SDK。安装方式见:Python - SDK 中心 - 腾讯云 (tencent.com)

调用API 学习API文档

安装好SDK后,调用相应的接口就ok了,可以参考:文字识别 API 概览 - 服务端 API 文档 - 文档中心 - 腾讯云 (tencent.com)

因为主要需求是对PDF以及其截图进行识别,我购买的是GeneralBasicOCR-通用印刷体识别,腾讯可以在API Explorer - 云 API - 控制台 (tencent.com)中进行调试,比较方便。

通用印刷体识别API

通用印刷体识别主要支持以下参数:

参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:GeneralBasicOCR。 Version 是 String 公共参数,本接口取值:2018-11-19。 Region 是 String 公共参数,详见产品支持的 地域列表,本接口仅支持其中的: ap-beijing, ap-guangzhou, ap-hongkong, ap-seoul, ap-shanghai, ap-singapore, na-toronto ImageBase64 否 String 图片/PDF的 Base64 值。 要求图片/PDF经Base64编码后不超过 7M,分辨率建议600*800以上,支持PNG、JPG、JPEG、BMP、PDF格式。 图片的 ImageUrl、ImageBase64 必须提供一个,如果都提供,只使用 ImageUrl。 ImageUrl 否 String 图片/PDF的 Url 地址。 要求图片/PDF经Base64编码后不超过 7M,分辨率建议600*800以上,支持PNG、JPG、JPEG、BMP、PDF格式。 图片存储于腾讯云的 Url 可保障更高的下载速度和稳定性,建议图片存储于腾讯云。非腾讯云存储的 Url 速度和稳定性可能受一定影响。 Scene 否 String 保留字段。 LanguageType 否 String 识别语言类型。 支持自动识别语言类型,同时支持自选语言种类,默认中英文混合(zh),各种语言均支持与英文混合的文字识别。 可选值: zh:中英混合 zh_rare:支持英文、数字、中文生僻字、繁体字,特殊符号等 auto:自动 mix:混合语种 jap:日语 kor:韩语 spa:西班牙语 fre:法语 ger:德语 por:葡萄牙语 vie:越语 may:马来语 rus:俄语 ita:意大利语 hol:荷兰语 swe:瑞典语 fin:芬兰语 dan:丹麦语 nor:挪威语 hun:匈牙利语 tha:泰语 hi:印地语 ara:阿拉伯语 IsPdf 否 Boolean 是否开启PDF识别,默认值为false,开启后可同时支持图片和PDF的识别。 PdfPageNumber 否 Integer 需要识别的PDF页面的对应页码,仅支持PDF单页识别,当上传文件为PDF且IsPdf参数值为true时有效,默认值为1。 IsWords 否 Boolean 是否返回单字信息,默认关

考虑到我的实际使用需求,主要会使用到ImageBase64ImageUrlIsPdfPdfPageNumber这几个参数。

代码

我主要使用了argparsebase64json这几个python内置模块。

我希望能够在CLI中便捷的使用这个工具,但是由于有很多不同的情况,所以使用argparse模块,覆盖不同的情况。同时,又因为对图片识别时,参数是base64,所以需要使用base64模块将图片转化为base64格式。

main.py

# -*- coding: UTF-8 -*- # 参考:cloud.tencent.com/document/product/866/33515 # Author:Zhangyifei 2022年4月10日 import pyperclip from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from ocrtool import MyOcrTool, ReqObj from parse_args import parse_args if __name__ == '__main__': try: # 实例化Ocr工具 my_ocr_tool = MyOcrTool() client = my_ocr_tool.client req = ReqObj() # 获取命令行参数 args = parse_args() if args.local: if args.isPdf: req.req_local_img(args.local, args.page) else: req.req_local_img(args.local) elif args.url: if args.isPdf: req.req_url_img(args.url, args.page) else: req.req_url_img(args.url) # 获取输出 resp = client.GeneralBasicOCR(req) ans = '' if args.newline: for i in resp.TextDetections: ans += (i.DetectedText + '\n') else: for i in resp.TextDetections: ans += (i.DetectedText) print(ans) if args.clip: pyperclip.copy(ans) except TencentCloudSDKException as err: print(err) parse_args.py

import argparse import sys def parse_args(): # 设置命令行参数 parser = argparse.ArgumentParser(description='OCR解析方式') parser.add_argument('-u', '--url', type=str, required=False, help='图片的url') parser.add_argument('-l', '--local', type=str, required=False, help='本地图片的地址') parser.add_argument('-p', '--isPdf', required=False, action='store_true', help='是否是Pdf') parser.add_argument('-n', '--page', type=int, required=False, help='识别哪一页PDF') parser.add_argument('-s', '--newline', required=False, action='store_true', help='Ocr识别结果是否换行') parser.add_argument('-c', '--clip', required=False, action='store_true', help='输出结果是否粘贴到剪切板中') # 当未输入命令行参数时,打印帮助 if len(sys.argv) == 1: parser.print_help() sys.exit(1) # 获取命令行参数 args = parser.parse_args() # page参数和isPdf参数存在依赖 if args.isPdf and not args.page: parser.print_help() parser.error('The --isPdf argument requires the --page argument.') # url参数和local参数只能有一个 if args.url and args.local: parser.error('There can only be one argument --url and argument --local') return args ocrtool.py

# -*- coding: UTF-8 -*- # 参考:cloud.tencent.com/document/product/866/33515 # Author:Zhangyifei 2022年4月10日 import base64 import json from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.cloud.tencent.com/document/product/866/33515 self.region = "ap-guangzhou" self.cred = credential.Credential("xxx", "xxx") self.gimg2.baidu.com/image_search/src=http%3A%2F%2Fww2.sinaimg.cn%2Fmw690%2F001SRYirly1h0czgvocbqj60uj0u043f02.jpg&refer=http%3A%2F%2Fwww.sina.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1652184476&t=f35c29a812ee6a9a8e8d8fd582e0b60f

我们复制图片url,使用-u(或者--url)表示对url进行处理,使用-s(或者--newline)表示对图片中每行识别出来的内容进行换行。

问题整理 问题1:argparse模块参数之间如何生成依赖?

使用if语句进行判断,不符合依赖条件则抛出错误。

# page参数和isPdf参数存在依赖 if args.isPdf and not args.page: parser.print_help() parser.error('The --isPdf argument requires the --page argument.') 问题2:argparse模块parser的参数type是bool时,CLI中传入参数即使是False,也会认为是True

这是因为命令行传入的参数默认会认为是字符串格式,因此传参是False仍会认为是True。这个问题在argparse bool python - CSDN中有说明解决办法。我的解决办法是涉及到type是bool格式的,使用action参数进行判断。

parser.add_argument('-c', '--clip', required=False, action='store_true', help='输出结果是否粘贴到剪切板中') 问题3:bytes格式转化为str格式的方法:

str(encoded_string, 'UTF-8') 后续想法

  • 封装函数对整个pdf进行处理并输出成文档(或EXCEL)

  • 部署web服务器,在网页中进行操作OCR识别操作。

本文共计2165个文字,预计阅读时间需要9分钟。

腾讯云OCR服务二次开发如何实现?

本文记录了对腾讯云OCR服务二次开发的代码和实践过程,以及开发过程中遇到的问题。

腾讯云OCR服务二次开发

目录

1. 腾讯云OCR服务二次开发

2.前言

3.安装SDK

4.调用API

5.学习API文档

6.通用印刷体识别API

7.代码

前言

为了实现特定功能,我们对腾讯云OCR服务进行了二次开发。

安装SDK

首先,我们需要安装腾讯云OCR服务的SDK。

调用API

接下来,我们通过API调用OCR服务。

学习API文档

为了更好地使用API,我们仔细学习了API文档。

通用印刷体识别API

我们使用了通用印刷体识别API进行文本识别。

代码

以下是实现OCR功能的代码示例:

python

代码示例

以上是对腾讯云OCR服务二次开发的简要记录。

本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题。 腾讯云OCR服务二次开发

目录
  • 腾讯云OCR服务二次开发
    • 前言
    • 安装SDK
    • 调用API
      • 学习API文档
      • 通用印刷体识别API
    • 代码
      • main.py
      • parse_args.py
      • ocrtool.py
    • 运行结果
      • 本地图片
      • 本地PDF
      • 网络图片
    • 问题整理
      • 问题1:argparse模块参数之间如何生成依赖?
      • 问题2:argparse模块parser的参数type是bool时,CLI中传入参数即使是False,也会认为是True
      • 问题3:bytes格式转化为str格式的方法:
    • 后续想法

前言

因为腾讯云账户中还剩一点点钱,刚刚好够买腾讯云里文字识别服务,想着自己平时看PDF比较多,可以用这个服务来便捷的进行图像文字转换。我购买的是通用印刷体识别,即可以对图片进行识别,也可以对PDF文件进行识别。需要注意的的是,图片识别需要将图片转为Base64,PDF识别时每次只能识别一张。

腾讯云OCR服务二次开发如何实现?

本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题。

安装SDK

我使用的是Python 3.6,要使用腾讯云的OCR服务,要先在本地环境中安装腾讯云的SDK。安装方式见:Python - SDK 中心 - 腾讯云 (tencent.com)

调用API 学习API文档

安装好SDK后,调用相应的接口就ok了,可以参考:文字识别 API 概览 - 服务端 API 文档 - 文档中心 - 腾讯云 (tencent.com)

因为主要需求是对PDF以及其截图进行识别,我购买的是GeneralBasicOCR-通用印刷体识别,腾讯可以在API Explorer - 云 API - 控制台 (tencent.com)中进行调试,比较方便。

通用印刷体识别API

通用印刷体识别主要支持以下参数:

参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:GeneralBasicOCR。 Version 是 String 公共参数,本接口取值:2018-11-19。 Region 是 String 公共参数,详见产品支持的 地域列表,本接口仅支持其中的: ap-beijing, ap-guangzhou, ap-hongkong, ap-seoul, ap-shanghai, ap-singapore, na-toronto ImageBase64 否 String 图片/PDF的 Base64 值。 要求图片/PDF经Base64编码后不超过 7M,分辨率建议600*800以上,支持PNG、JPG、JPEG、BMP、PDF格式。 图片的 ImageUrl、ImageBase64 必须提供一个,如果都提供,只使用 ImageUrl。 ImageUrl 否 String 图片/PDF的 Url 地址。 要求图片/PDF经Base64编码后不超过 7M,分辨率建议600*800以上,支持PNG、JPG、JPEG、BMP、PDF格式。 图片存储于腾讯云的 Url 可保障更高的下载速度和稳定性,建议图片存储于腾讯云。非腾讯云存储的 Url 速度和稳定性可能受一定影响。 Scene 否 String 保留字段。 LanguageType 否 String 识别语言类型。 支持自动识别语言类型,同时支持自选语言种类,默认中英文混合(zh),各种语言均支持与英文混合的文字识别。 可选值: zh:中英混合 zh_rare:支持英文、数字、中文生僻字、繁体字,特殊符号等 auto:自动 mix:混合语种 jap:日语 kor:韩语 spa:西班牙语 fre:法语 ger:德语 por:葡萄牙语 vie:越语 may:马来语 rus:俄语 ita:意大利语 hol:荷兰语 swe:瑞典语 fin:芬兰语 dan:丹麦语 nor:挪威语 hun:匈牙利语 tha:泰语 hi:印地语 ara:阿拉伯语 IsPdf 否 Boolean 是否开启PDF识别,默认值为false,开启后可同时支持图片和PDF的识别。 PdfPageNumber 否 Integer 需要识别的PDF页面的对应页码,仅支持PDF单页识别,当上传文件为PDF且IsPdf参数值为true时有效,默认值为1。 IsWords 否 Boolean 是否返回单字信息,默认关

考虑到我的实际使用需求,主要会使用到ImageBase64ImageUrlIsPdfPdfPageNumber这几个参数。

代码

我主要使用了argparsebase64json这几个python内置模块。

我希望能够在CLI中便捷的使用这个工具,但是由于有很多不同的情况,所以使用argparse模块,覆盖不同的情况。同时,又因为对图片识别时,参数是base64,所以需要使用base64模块将图片转化为base64格式。

main.py

# -*- coding: UTF-8 -*- # 参考:cloud.tencent.com/document/product/866/33515 # Author:Zhangyifei 2022年4月10日 import pyperclip from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from ocrtool import MyOcrTool, ReqObj from parse_args import parse_args if __name__ == '__main__': try: # 实例化Ocr工具 my_ocr_tool = MyOcrTool() client = my_ocr_tool.client req = ReqObj() # 获取命令行参数 args = parse_args() if args.local: if args.isPdf: req.req_local_img(args.local, args.page) else: req.req_local_img(args.local) elif args.url: if args.isPdf: req.req_url_img(args.url, args.page) else: req.req_url_img(args.url) # 获取输出 resp = client.GeneralBasicOCR(req) ans = '' if args.newline: for i in resp.TextDetections: ans += (i.DetectedText + '\n') else: for i in resp.TextDetections: ans += (i.DetectedText) print(ans) if args.clip: pyperclip.copy(ans) except TencentCloudSDKException as err: print(err) parse_args.py

import argparse import sys def parse_args(): # 设置命令行参数 parser = argparse.ArgumentParser(description='OCR解析方式') parser.add_argument('-u', '--url', type=str, required=False, help='图片的url') parser.add_argument('-l', '--local', type=str, required=False, help='本地图片的地址') parser.add_argument('-p', '--isPdf', required=False, action='store_true', help='是否是Pdf') parser.add_argument('-n', '--page', type=int, required=False, help='识别哪一页PDF') parser.add_argument('-s', '--newline', required=False, action='store_true', help='Ocr识别结果是否换行') parser.add_argument('-c', '--clip', required=False, action='store_true', help='输出结果是否粘贴到剪切板中') # 当未输入命令行参数时,打印帮助 if len(sys.argv) == 1: parser.print_help() sys.exit(1) # 获取命令行参数 args = parser.parse_args() # page参数和isPdf参数存在依赖 if args.isPdf and not args.page: parser.print_help() parser.error('The --isPdf argument requires the --page argument.') # url参数和local参数只能有一个 if args.url and args.local: parser.error('There can only be one argument --url and argument --local') return args ocrtool.py

# -*- coding: UTF-8 -*- # 参考:cloud.tencent.com/document/product/866/33515 # Author:Zhangyifei 2022年4月10日 import base64 import json from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.cloud.tencent.com/document/product/866/33515 self.region = "ap-guangzhou" self.cred = credential.Credential("xxx", "xxx") self.gimg2.baidu.com/image_search/src=http%3A%2F%2Fww2.sinaimg.cn%2Fmw690%2F001SRYirly1h0czgvocbqj60uj0u043f02.jpg&refer=http%3A%2F%2Fwww.sina.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1652184476&t=f35c29a812ee6a9a8e8d8fd582e0b60f

我们复制图片url,使用-u(或者--url)表示对url进行处理,使用-s(或者--newline)表示对图片中每行识别出来的内容进行换行。

问题整理 问题1:argparse模块参数之间如何生成依赖?

使用if语句进行判断,不符合依赖条件则抛出错误。

# page参数和isPdf参数存在依赖 if args.isPdf and not args.page: parser.print_help() parser.error('The --isPdf argument requires the --page argument.') 问题2:argparse模块parser的参数type是bool时,CLI中传入参数即使是False,也会认为是True

这是因为命令行传入的参数默认会认为是字符串格式,因此传参是False仍会认为是True。这个问题在argparse bool python - CSDN中有说明解决办法。我的解决办法是涉及到type是bool格式的,使用action参数进行判断。

parser.add_argument('-c', '--clip', required=False, action='store_true', help='输出结果是否粘贴到剪切板中') 问题3:bytes格式转化为str格式的方法:

str(encoded_string, 'UTF-8') 后续想法

  • 封装函数对整个pdf进行处理并输出成文档(或EXCEL)

  • 部署web服务器,在网页中进行操作OCR识别操作。