OCR-调用第三方API识别验证码

文章目录

      • 背景
      • 第三方API
      • 代码调用演示

背景

在有些注册、登录界面,经常需要使用到验证码,如果想要代码层面跳过这个步骤,需要进行验证码的识别。当然 Python 有着第三方库 pytesseract 可以用来识别字符,但是识别率比较低,稍微难一点的就无法识别,市场上付费的OCR识别技术相对较高。

先看下 pytesseract 的实例:

需要安装 pytesseractPIL

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Description:
# Author:zhuyuping
# datetime:2020/8/9 13:55
import os

import pytesseract   
from PIL import Image


def analyse_img(image_file) -> str:
    if os.path.exists(image_file):
        image_obj = Image.open(image_file)
        string_obj = pytesseract.image_to_string(image_obj)
        print(string_obj)
        return string_obj
    else:
        print(f'{image_file} not existed')


if __name__ == '__main__':
    analyse_img(r'selenium.png')

识别图片对象:
OCR-调用第三方API识别验证码_第1张图片
如果运行后提示如下报错:pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your PATH,请点击查看该 博客 处理,自己已经踩过坑了。

这种方法对于稍微复杂一点的就无法准确识别了。

这里介绍一种第三方的OCR。

第三方API

在该 网站 上有很多OCR识别的API,我这里使用的是 图片验证码识别。价格还是很便宜的,花一毛钱用100多次,仅仅用来学习练习完全是够用了。(该网站还有免费的API可供调用,试了下,感觉和 pytesseract 的效果差不多。还是付费的准确率高一些,毕竟是用大数据训练出来的算法。

首先看它的接口文档,里面包括:

  1. 接入点
  2. 请求参数
  3. 返回参数
  4. 请求示例

在接口文档的请求示例部分,含有不同语言的demo代码,你需要下载它的 SDK(这里就是一个脚本),在示例的demo中,会调用这个SDK脚本。

接着,将请求示例的代码拷贝到本地,根据自己的情况做一些修改,了解怎么使用后,感觉调用第三方的API还是挺容易的。

代码调用演示

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Description:
# Author:zhuyuping
# datetime:2020/8/9 13:05

import json
from ShowapiRequest import ShowapiRequest


def analyse_imgfile(img_file) -> str:
    r = ShowapiRequest("http://route.showapi.com/184-4", "xxxxxx", "aaaabbbbccc")
    # xxxxxx 和 aaaabbbbccc 是需要注册登录该网站后,在“接口使用者-我的应用”页面查看获取的
    
    r.addFilePara('image', img_file)
    r.addBodyPara("typeId", "34")  # 具体参数可见接口文档
    r.addBodyPara("convert_to_jpg", "0")
    r.addBodyPara("needMorePrecise", "0")
    response = r.post()
    
    # print(response.text)  # 返回所有信息
    res_dict = json.loads(response.text)
    img_str = res_dict['showapi_res_body']['Result']
    print(img_str)  # 打印图片中的字符
    return img_str


if __name__ == '__main__':
    file = r'verifyimg.png'  # 需要解析的验证码图片,你可以放一个待解析验证码图片的地址
    analyse_imgfile(file)

你可能感兴趣的:(Python,python,OCR)