验证码识别是搞爬虫实现自动化脚本避不开的一个问题。通常验证码识别程序要么部署在本地,要么部署在服务器端。如果部署在服务器端就需要自己去搭建配置网络环境并编写调用接口,这是一个极其繁琐耗时的过程。
本文来自 Serverless 社区用户「乂乂又又」供稿
但是现在我们通过腾讯云云函数 SCF,就可以快速将本地的验证码识别程序发布上线,极大地提高了开发效率。
效果展示
可以看到,识别效果还是蛮好的,甚至超过了肉眼识别率。
操作步骤
传统的验证码识别流程是
- 图像预处理(灰化,去噪,切割,二值化,去干扰线等)
- 验证码字符特征提取(SVM,CNN 等)
- 验证码识别
下面我就带大家一起来创建、编写并发布上线一个验证识别云函数
第一步:新建 python 云函数
参见系列文章《万物皆可Serverless之使用 SCF+COS 快速开发全栈应用》
第二步:编写验证识别云函数
Life is short, show me the code.
这里我就以一个最简单的验证码识别程序为例,直接上代码
import io
import os
import time
from PIL import Image as image
import json
#字符特征
chars = {
'1': [1, 1, 1, 0, 1, ...],
'2': [1, 0, 0, 1, 0, ...],
'3': [0, 1, 0, 0, 1, ...],
# 其他字符特征...
}
# 灰度处理
def covergrey(img):
return img.convert('L')
# 去除验证码边框
def clearedge(img):
for y in range(img.size[1]):
img.putpixel((0, y), 255)
img.putpixel((1, y), 255)
img.putpixel((2, y), 255)
img.putpixel((img.size[0]-1, y), 255)
img.putpixel((img.size[0]-2, y), 255)
img.putpixel((img.size[0]-3, y), 255)
for x in range(img.size[0]):
img.putpixel((x, 0), 255)
img.putpixel((x, 1), 255)
img.putpixel((x, 2), 255)
img.putpixel((x, img.size[1]-1), 255)
img.putpixel((x, img.size[1]-2), 255)
img.putpixel((x, img.si