多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 1.目标 中国知网注册:[http://o.cnki.net/Register/CommonRegister.aspx](http://o.cnki.net/Register/CommonRegister.aspx) ### 2.安装 [tesserocr](/1kai-fa-huan-jing-pei-zhi/1.3/134-tesserocrde-an-zhuang.md) ### 3.获取图形验证码 验证码地址:[http://o.cnki.net/Register/CheckCode.aspx](http://o.cnki.net/Register/CheckCode.aspx) 保存图片 ``` import requests content = requests.get("http://o.cnki.net/Register/CheckCode.aspx").content with open("code.jpg",'wb') as f: f.write(content) ``` ![](/assets/code.png) ### 4.识别测试 ``` import tesserocr from PIL import Image image = Image.open('code.png') result = tesserocr.image_to_text(image) print(result) print(tesserocr.file_to_text('code.png')) ``` 注意file\_totext的识别效果没有image\_to\_text的好 ### 5.验证码处理 验证码内的多条线余会干扰图片的识别 需要做一下额外的处理,如转灰度、二值化等操作 转灰度 利用Image对象的convert\(\)方法参数传入L,即可将图片转化为灰度图像 ``` import tesserocr from PIL import Image image = Image.open('code.png') image = image.convert('L') # image.show() # 显示图片 result = tesserocr.image_to_text(image) print(result) ``` 传入1即可将图片进行二值化处理 ``` image = image.convert('1') image.show() ``` 指定二值化的阈值,上面默认阈值是127 首先将原图先转为灰度图像,再指定二值化阈值 ``` import tesserocr from PIL import Image image = Image.open('code.png') image = image.convert('L') threshold = 130 table = [] for i in range(256): if i <threshold: table.append(0) else: table.append(1) image = image.point(table,'1') image.show() result = tesserocr.image_to_text(image) print(result) ```