网站建设的职责,地方网站域名用全拼,优惠卷网站建设怎么挣钱,电子商务网站建设 上海验证码的识别
使用打码平台识别验证码
利用打码平台可以轻松识别各种各样的验证码#xff0c;图形验证码、滑动验证码、点选验证码和逻辑推理验证码。打码平台提供了一系列API#xff0c;只需要向API上传验证码图片#xff0c;它便会返回对应的识别结果。
使用超级鹰平台…验证码的识别
使用打码平台识别验证码
利用打码平台可以轻松识别各种各样的验证码图形验证码、滑动验证码、点选验证码和逻辑推理验证码。打码平台提供了一系列API只需要向API上传验证码图片它便会返回对应的识别结果。
使用超级鹰平台官网https://www.chaojiying.com/ 首页如图所示
超级鹰打码平台支持识别的内容包括但不限于简单数字、字母、中文字符、滑动拼图验证等类型的验证码。同时该平台还提供云端识别服务可为所有软件提供验证码识别自动化解决方案帮助客户进行验证码识别、远程答题、人工打码以实现价值。
使用超级鹰打码平台进行验证码识别的步骤通常包括以下几点
注册并登录超级鹰打码平台的账号。下载需要识别的验证码图片并将其保存在本地。调用平台提供的API或示例代码将图片数据发送到超级鹰打码平台进行识别。接收平台返回的识别结果并进行后续的操作。
通过这个平台用户可以轻松地对各种类型的验证码进行识别从而提高自动化流程的效率和准确性。
准备工作
安装两个Python库——opencv-python和Pillow安装命令如下
pip3 install opencv-python pillow自行下载测试所用的验证码地址为https://github.com/Python3WebSpider/CaptchaPlatform可以先复制下来
git clone [https://github.com/Python3WebSpider/CaptchaPlatform](https://github.com/Python3WebSpider/CaptchaPlatform).git复制之后本地出现一个CaptchaPlatform-master文件夹内部存放的是测试需要的验证码图片。还有一个chaojiying.py文件内容如下
import requests
from hashlib import md5class Chaojiying(object):def __init__(self, username, password, soft_id):self.username usernameself.password md5(password.encode(utf-8)).hexdigest()self.soft_id soft_idself.base_params {user: self.username,pass2: self.password,softid: self.soft_id,}self.headers {User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36,}def post_pic(self, im, codetype):im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.htmlparams {codetype: codetype,}params.update(self.base_params)files {userfile: (ccc.jpg, im)}r requests.post(http://upload.chaojiying.net/Upload/Processing.php, dataparams, filesfiles,headersself.headers)return r.json()def report_error(self, im_id):im_id:报错题目的图片IDparams {id: im_id,}params.update(self.base_params)r requests.post(http://upload.chaojiying.net/Upload/ReportError.php, dataparams, headersself.headers)return r.json()定义了一个Chaojiying类其构造方法接收三个参数。
username:超级鹰账户的用户名password:超级鹰账户和密码soft_id:软件ID需要到超级鹰后台的“软件ID”中获取如图所示就生成一个软件ID928939 这个类还实现了两个方法post_pic方法用于上传验证码并获取识别结果report_error方法用于上报识别错误识别错误时不扣提分就是不花钱。
以上内容都准备好后开始识别验证码首先是图像验证码。 图形验证码
这是一个由英文字母和数字组合而成的验证码一共六位查阅价格文档https://www.chaojiying.com/price.html和这个验证码相符合的描述是“1-6位英文数字”类型是“1006”如图所示 接着就可以编写实现代码
from chaojiying import Chaojiying
USERNAME、PASSWORD、SOFT_ID需要更改为自己的用户名、密码和软件IDUSERNAME lxw1973
PASSWORD 2-**w
SOFT_ID 928939
CAPTCHA_KIND 1006
FILE_NAME captcha1.png
client Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result client.post_pic(open(FILE_NAME, rb).read(), CAPTCHA_KIND)
print(result)这里首先利用USERNAME PASSWORD和SOFT_ID三个信息初始化了一个Chaojiying对象赋值为client变量然后调用client的post_pic方法上传了图片中的二进制内容这里把post_pic方法的第二个参数设置为CAPTCHA_KIND即1006。
返回结果如下
{err_no: 0, err_str: OK, pic_id: 2246121180794820046, pic_str: 6m44nn, md5: 275d14cb7a43b2ce7c9aa1745be2aafd}可以看到返回结果中的pic_str字段出现了正确的识别结果识别成功。
点选验证码
12306的验证码就是非常典型的一种点选验证码。如下图所示的点选验证码 比较符合这个验证码的描述是“坐标多选”类型是“9004”会返回14个坐标如图所示 将“图形验证码”代码中的CAPTCHA_KIND改为9004FILE_NAME改成captcha2.png然后重新运行代码结果如下
{err_no: 0, err_str: OK, pic_id: 2246121320794820047, pic_str: 94,121|206,139, md5: b7ab91737bc958b6dd47bf63921a615d}可以看到返回结果中的pic_str字段变成了’94,121|206,139’使用OpenCV技术在上图中标注出这个点
import cv2image cv2.imread(captcha2.png)
image cv2.circle(image, (94, 121), radius10, color(0,0,255), thickness-1)
image cv2.circle(image, (206,139), radius10, color(0,0,255), thickness-1)
cv2.imwrite(captcha2_label_test.png, image)运行结果如下图 可以看到标注出来的正是第1张和第2张图片没问题验证成功
另外还有些验证码也属于点选类型例如指定点击物品的颜色的验证码如图所示 指定文字点击顺序的验证码如图所示 要求按照语序点击文字的验证码如图所示 滑动验证码
我们再来验证滑块验证码这里以下图为例进行讲解如下图所示 查阅价格文档比较符合这个验证码的描述是“坐标选一”类型是“9101”如图所示 和“点选验证码”类似将“图形验证码”代码中国内地CAPTCHA_KIND改成9101FILE_NAME改成captcha3.png然后重新运行代码得到如下结果
{err_no: 0, err_str: OK, pic_id: 1246122000794820048, pic_str: 204,90, md5: 66608b4a14544e3b3b36c56c94e1959d}可以看到返回结果中的pic_str字段变成了204,90我们用OpneCV技术在例图上标注这个点
import cv2image cv2.imread(captcha3.png)
image cv2.circle(image, (204, 90), radius10, color(0,0,255), thickness-1)
cv2.imwrite(captcha3_label_test.png, image)返回结果如下图 可以在图片上做一些处理例如添加自定义的文字提醒标注人员哪里是正确的位置。下面使用OpenCV技术在例图上加一行字“请点击目标缺口的左上角”
import cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np
import io
from chaojiying import ChaojiyingUSERNAME lxw1973
PASSWORD 2-**w
SOFT_ID 928939
CAPTCHA_KIND 9101
def cv2_add_text(image, text, left, top, textColor(255, 0, 0), text_size20):image Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))draw ImageDraw.Draw(image)font ImageFont.truetype(simsun.ttc, text_size, encodingutf-8)draw.text((left, top), text, textColor, fontfont)return cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)image cv2.imread(captcha3.png)
image cv2_add_text(image, 请点击目标缺口的左上角, int(image.shape[1]/10), int(image.shape[0]/2), (255,0,0), 40)
client Chaojiying(USERNAME, PASSWORD, SOFT_ID)image cv2.circle(image, (204, 90), radius10, color(0,0,255), thickness-1)
client Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result client.post_pic(io.BytesIO(cv2.imencode(.png, image)[1]).getvalue(), CAPTCHA_KIND)
print(result)这里我们定义一个cv2_add_text方法由于直接添加中文会产生乱码所以需要借助Pillow库并且依赖一个中文字体文件添加文字后图片如下所示 重新运行代码得到如下结果
{err_no: 0, err_str: OK, pic_id: 1246209360794820050, pic_str: 200,90, md5: 428e629f358f39a7d899a0f19a5852de}这时返回结果中的pic_str字段变成了200,90标注一下这个点结果如图所示 问答验证码
再看一种验证码——问答验证码样例图片入下图所示 可以看到验证码上有一个问题并且在问题后的括号里有答案提示问题中每个字的颜色、形状和字与字之间距离各不相同背景中还有一些干扰线。
这种验证码如果想自动化完成识别难度是比较大的。首先需要识别出图片上的文字这对正确率有很高的要求。在能正确提取所有文字并且问题相对简单的前提下可以通过用爬虫模拟一些网络搜索操作获得结果。如果问题稍微复杂一些或者在网络上搜素不到答案可以通过一些自然语言处理技术或者知识库获得答案。但总的来说通过纯技术手段识别问答验证码的难度还是比较高的。
这样的验证码比较合适的解决方案依然是打码平台借助平台背后的人工力量完成识别。同样查阅一下超级鹰平台对此类验证码的支持情况如图所示 可以看到6004类型是支持此类验证码的我们把代码中的CAPTCHA_KIND改成6004FILE_NAME改成captcha4.png然后重新运行代码得到如下结果
from chaojiying import Chaojiying
USERNAME、PASSWORD、SOFT_ID需要更改为自己的用户名、密码和软件IDUSERNAME lxw1973
PASSWORD ~~~~-**w
SOFT_ID 928939
CAPTCHA_KIND 6004
FILE_NAME captcha4.png
client Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result client.post_pic(open(FILE_NAME, rb).read(), CAPTCHA_KIND)
print(result)运行结果如下
{err_no: 0, err_str: OK, pic_id: 2246210120794820051, pic_str: 大象, md5: 985c12e820556347a54f149111a40bba}返回结果中的pic_str字段是大象回答正确如此看来打码平台着实非常强大。
更多的体验可以在小蜜蜂AI网站获取网址为https://zglg.work