Python 全栈系列101 - 使用百度api识别营业执照

2024-03-03 14:50

本文主要是介绍Python 全栈系列101 - 使用百度api识别营业执照,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明

百度有提供营业执照的ocr,打算先试一下看看效果。从某些角度,还是感谢百度提供的免费资源的:

  • 1 当没什么时间自己做时,毕竟有一个还可以用的
  • 2 如果打算自己做,也有个参考和对比

在这里插入图片描述

内容

1 首先要获得调用权限

我很早的时候就有百度的账号,那时候设置好了,现在不太记得,有需要的同学自己试试。

2 OCR的功能

给了一些免费的配额,对我这种测试的需求来说也够了
在这里插入图片描述
如果要购买的话,一次2分8(一万次),其实还是有点小贵的。我觉得接口服务,按cpu处理时间,50ms1厘钱是比较合理的。我猜证照识别先是通过目标识别找出文本框,然后对文本框进行识别,两层模型的叠加。一共也不会超过500ms,也就是最多不应该超过1分钱(所以100万次的价格是9厘)。

不过进行优化后进行批量处理,特别是使用显卡,这个时间应该可以降一个数量级。(我没打算抢生意哈,只是估算一下)

在这里插入图片描述

3 调用

3.1 鉴权

在这里插入图片描述

  • 1 先要创建一个应用,然后里面有个人的信息。
  • 2 通过个人的信息,向百度发起一个授权请求,获得一个令牌
  • 3 使用这个令牌进行请求
3.1.1 获取令牌

文档可以参考这个,找到python的示例。
在这里插入图片描述
主要改这里(我觉得既然都文档了,还是写完整Application Key, Secret Key,或者在应用那边也附上缩写,小建议)

...dentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'# 授权结果 access_token的有效期为30天,需要每30天进行定期更换
the_token = response.json().get('access_token')

总体上,百度api的文档还是可以的,比较简单。

3.1.2 请求解析

我稍微封装了一下过程,让调用简单一点。输入就两个参数,token和图片地址。如果真的部署为服务的化,可以改为读文件流。

import requests
import base64
import pandas as pd
# 封装一下过程
def baidu_ocr_cert(the_token, the_fpath,request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license"):with open(the_fpath ,'rb') as f:img = base64.b64encode(f.read())params = {"image":img}access_token = the_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)
#     if response:
#         print (response.json())res_dict = response.json()the_key_list = list(res_dict['words_result'].keys())the_res_list = [res_dict['words_result'][x].get('words') for x in the_key_list]res_df = pd.DataFrame()res_df['识别项'] = the_key_listres_df['识别内容'] = the_res_listreturn res_df

4 调用测试

我从百度上搜索了两个营业执照测试,为了避嫌,我就不放企业名字。

4.1 模糊的证照

感受下图片的质量
在这里插入图片描述
解析结果整体上还不错,当然我们看不清的解析也是乱的
在这里插入图片描述

4.2 清晰的证照

在这里插入图片描述
此时的解析结果就好多了,但是又有另外一个问题,企业名称前面多了“副太号…”
在这里插入图片描述

4 总结

总体上百度api的调用还是比较方便的,文档写的也清晰。我大概10分钟左右就完成了调用测试。

ps: 我估计识别过程是这样的

  • 0 调整倾斜图片
  • 1 通过yolo定位关键词的坐标
  • 2 根据定位区块进行横向截取
  • 3 识别横向截取部分的问题

大概没有做仿射变换,把图片重新拉伸/压缩回去。

这篇关于Python 全栈系列101 - 使用百度api识别营业执照的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/769956

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4