文章插图
图片到手了,接下来就是调用百度文字识别的OCR来识别这些图片了,在识别之前,先简单介绍一下百度OCR的使用方法,因为很多识别验证码的教程用的都是tesserocr库,所以一开始我也尝试过,安装过程中就遇到了很多坑,后来还是没有继续使用,而是选择了百度OCR来识别 。百度OCR接口提供了自然场景下图片文字检测、定位、识别等功能 。文字识别的结果可以用于翻译、搜索、验证码等代替用户输入的场景 。另外还有其他视觉、语音技术方面的识别功能,大家可以直接阅读文档了解:百度OCR-API文档https://ai.baidu.com/docs#/OCR-API/top

文章插图
使用百度OCR的话,首先注册用户,然后下载安装接口模块,直接终端输入pip install baidu-aip即可 。然后创建文字识别应用,获取相关Appid,API Key以及Secret Key,需要了解一下的是百度AI每日提供50000次免费调用通用文字识别接口的使用次数,足够我们挥霍了 。

文章插图
然后就可以直接调用代码了 。
from aip import AipOcr# 你的 APPID AK SK APP_ID = '你的 APP_ID 'API_KEY = '你的API_KEY'SECRET_KEY = '你的SECRET_KEY'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 读取图片 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read()image = get_file_content('test.jpg')# 调用通用文字识别, 图片参数为本地图片 result = client.basicGeneral(image)# 定义参数变量 options = { # 定义图像方向 'detect_direction' : 'true', # 识别语言类型,默认为'CHN_ENG'中英文混合 'language_type' : 'CHN_ENG',}# 调用通用文字识别接口 result = client.basicGeneral(image,options)print(result)for word in result['words_result']: print(word['words'])这里我们识别的是这张图

文章插图
可以看一下识别结果
上面是识别后直接输出的结果,下面是单独提取出来的文字部分 。可以看到,除了破折号没有输出外,文字部分都全部正确输出了 。这里我们使用的图片是jpg格式,文字识别传入的图像支持jpg/png/bmp格式,但在技术文档中有提到,使用jpg格式的图片上传会提高一定准确率,这也是我们爬取验证码时使用jpg格式保存的原因 。
输出结果中,各字段分别代表:
- log_id : 唯一的log id,用于定位问题
- direction : 图像方向,传入参数时定义为true表示检测,0表示正向,1表示逆时针90度,2表示逆时针180度,3表示逆时针270度,-1表示未定义 。
- words_result_num : 识别的结果数,即word_result的元素个数
- word_result : 定义和识别元素数组
- words : 识别出的字符串
还有一些非必选字段大家可以去文档里熟悉一下 。
from aip import AipOcrimport osi = 0j = 0APP_ID = '你的 APP_ID 'API_KEY = '你的API_KEY'SECRET_KEY = '你的SECRET_KEY'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 读取图片 file_path = 'D:******验证码图片'filenames = os.listdir(file_path)# print(filenames)for filename in filenames: # 将路径与文件名结合起来就是每个文件的完整路径 info = os.path.join(file_path,filename) with open(info, 'rb') as fp: # 获取文件夹的路径image = fp.read() # 调用通用文字识别, 图片参数为本地图片 result = client.basicGeneral(image) # 定义参数变量options = { 'detect_direction' : 'true', 'language_type' : 'CHN_ENG', } # 调用通用文字识别接口result = client.basicGeneral(image,options) # print(result) if result['words_result_num'] == 0: print(filename + ':' + '----') i += 1 else: for word in result['words_result']:print(filename + ' : ' +word['words']) j += 1print('共识别验证码{}张'.format(i+j))print('未识别出文本{}张'.format(i))print('已识别出文本{}张'.format(j))和识别图片一样,这里我们将文件夹验证码图片里的图片全部读取出来,依次让OCR识别,并依据“word_result_num”字段判断是否成功识别出文本,识别出文本则打印结果,未识别出来的用“----”代替,并结合文件名对应识别结果。最后统计识别结果数量,再来看下识别结果 。
推荐阅读
- Python 实现docx文件的读写操作
- 动态路由协议OSPF基础了解,作为信息管理人员必须了解的网络技术
- Python算法中的时间复杂度
- 茶产业发展基础在传统 突破在现代
- 物理化学|基础物理要推倒重写?科学家们爆了:标准模型出现最大BUG
- 时空旅行的悖论 时间旅行悖论解释的基础理论
- 淘宝开店攻略技巧 新手淘宝开店入门基础
- Nginx基础知识从小白到入门
- 用 Python 监控知乎和微博的热门话题
- 交换机最基本的配置,零基础学习下交换机基础配置,每天进步一点
