ddddocr1.4.8失效的解决方法
1. 问题描述
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://124.223.30.31:xxxx/forum.php')
driver.find_element('id','ls_username').send_keys('admin')
driver.find_element('id','ls_password').send_keys('123456')
driver.find_element('css selector','.pn.vm').click()
sleep(2)
ele_pic =driver.find_element('css selector','[id^=vseccode_cS]>img') # webelement
ele_pic_bytes = ele_pic.screenshot_as_png # bytes
import ddddocr
ocr = ddddocr.DdddOcr(show_ad=False) # 得到一个ocr对象
code_text = ocr.classification(ele_pic_bytes) # 从bytes数据中提取 文本
driver.find_element('css selector','[id^=seccodeverify_cS]').send_keys(code_text)
url敏感,匿了,意思大概知道就是处理下面的这个图片中的验证码

以前运行的好好的,但现在报错了
2. 报错分析
Traceback信息如下
Traceback (most recent call last):
File "D:\Demos\demo1.py", line 15, in <module>
code_text = ocr.classification(ele_pic_bytes) # 从bytes数据中提取 文本
File "D:\Demos\.venv\lib\site-packages\ddddocr\__init__.py", line 1614, in classification
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'
追溯下源码
ddddocr的__init__.py
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
根据提示PIL.Image没有ANTIALIAS这个属性了
至此问题应该比较清晰了,应该是版本升级导致的
最终定位是ddddocr没有同步,pillow单方面升级导致的,这种太常见了
3. 解决方法
3.2 回退pillow库版本
找了下以前OK的环境,pillow库是9.5
现在默认安装ddddocr依赖的pillow是最新版到了10.0.1
解决就很简单
- 卸载pillow10.0.1
pip uninstall pillow - 重装pillow9.5
pip install pillow==9.5.0
3.3 修改ddddocr源码
pillow这种大库的升级,肯定会有详尽的说明和兼容处理
好的是它升级的并不频繁
https://pypi.org/project/Pillow/#history

在github上找到10.0.0的CHANGELOG
https://github.com/python-pillow/Pillow/blob/main/docs/releasenotes/10.0.0.rst
有这么一段
| Removed | Use instead |
|---|---|
Image.LINEAR |
Image.BILINEAR or Image.Resampling.BILINEAR |
Image.CUBIC |
Image.BICUBIC or Image.Resampling.BICUBIC |
Image.ANTIALIAS |
Image.LANCZOS or Image.Resampling.LANCZOS |
发现Image.LANCZOS可以替代,复制一下代码行,替换掉即可
#image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.LANCZOS).convert('L')
在这个代码中有很多ANTIALIAS,都应该替换下
4. ddddocr 犯错了?
这种简单的问题,ddddocr怎么会没处理呢?
https://pypi.org/project/ddddocr/#history

注意时间:pillow的10.0.0是7月1日发布的,ddddocr是8月30日更新了一次,按理说会同步,事实却并没有?
找到https://github.com/sml2h3/ddddocr

点进去能看到

呃呃呃,作者语法错了,尴尬
Pillow==9.5.0
这个项目维护的不多了,readme.md还是1.4.3的,将就用用吧
ddddocr1.4.8失效的解决方法的更多相关文章
- margin-top失效的解决方法
异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 我的是属于这种情况 按照网上的说法,我就是这个现象了 两个层box1和box2,b ...
- Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法
Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 2014-03-27 11:44:46| 分类: Easy UI|举报|字号 订阅 可以使用$.parser.pa ...
- IE7的overflow失效的解决方法
IE7的position:relative bug今天遇到了一个相对定位(position:relaitve)引起的IE7中overflow:hidden失效的bug,特此记录!解决方法很简单,给父层 ...
- ode.js 版本控制 nvm 和 n 使用 及 nvm 重启终端失效的解决方法
今天的话题包括2个部分 node.js 下使用 nvm 或者 n 来进行版本控制 nvm 安装node.js 版本后,重启终端 node , npm 环境变量失效 第一部分 用什么来管理 node.j ...
- jquery中checkbox全选失效的解决方法
这篇文章主要介绍了jquery中checkbox全选失效的解决方法,需要的朋友可以参考下 如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将 ...
- IE8下部分方法失效的解决方法
1.IE8下String的Trim()方法失效的解决方法 用jquery的trim()方法,$.trim(str)就可以了: 例:_id.trim() !='' 改为 $.trim(_id) != ...
- IIS上发布站点后URL重写失效的解决方法
在发布网站时URL重写有可能会失效,如果失效的话就需要您设置一下IIS:1.Windows XP系统或Windows 2003系统等使用以下方法:>打开IIS,主目录-〉配置-〉映射-〉在窗体左 ...
- CentOS忘记密码修改方案以及centos卡在开机登录界面,命令失效的解决方法
CentOS忘记密码修改方案 应用场景 linux管理员忘记root密码,需要进行找回操作. 注意事项:本文基于CentOS7.2环境进行操作的,由于CentOS的版本之间是有差异的,继续之前请先确定 ...
- UEditor设置内容setContent()失效的解决方法
ueditor常见用法: https://blog.csdn.net/qq_31879707/article/details/54894735#UE.Editor:setContent() UEdit ...
- IE8下String的Trim()方法失效的解决方法
String的Trim()方法失效,在ie8下是有这样的情况的,解决方法也很简单使用$.trim(str)即可,需要的朋友可以了解下 用jquery的trim()方法,$.trim(str)就可以了.
随机推荐
- python3使用pjsua进行呼叫测试
环境:CentOS 7.6_x64 Python版本 :3.9.12 pjsip版本:2.13 之前写过一篇CentOS7环境编译python3.9版本pjsua的文章: https://w ...
- 基于生成式预训练Transformer的跨语言文本摘要与情感分析
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...
- 密码学概念科普(加密算法、数字签名、散列函数、HMAC)
密码散列函数 密码散列函数 (Cryptographic hash function),是一个单向函数,输入消息,输出摘要.主要特点是: 只能根据消息计算摘要,很难根据摘要反推消息 改变消息,摘要一定 ...
- 谁在以太坊区块链上循环交易?TuGraph+Kafka的0元流图解决方案
都在说数据已经成为新时代的生产资料. 但随着大数据和人工智能等技术的发展,即便人们都知道数据的价值日益凸显,却无法凭借一己之力获取和分析如此大规模的数据. 要想富,先修路.要想利用新时代的数据致富,也 ...
- .NET周报 【7月第1期 2023-07-02】
国内文章 C# 实现 Linux 视频聊天.远程桌面(源码,支持信创国产化环境,银河麒麟,统信UOS) https://www.cnblogs.com/shawshank/p/17420469.htm ...
- Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!
在这篇文章中,我将手把手地教你如何从零开始部署一个使用Django框架的Python服务.无论你是一个刚开始接触开发的新手,还是一个有经验的开发者想要快速了解Django,这篇教程都会为你提供一条清晰 ...
- 特性介绍 | MySQL测试框架 MTR 系列教程(四):语法篇
作者:卢文双 资深数据库内核研发 序言: 以前对 MySQL 测试框架 MTR 的使用,主要集中于 SQL 正确性验证.近期由于工作需要,深入了解了 MTR 的方方面面,发现 MTR 的能力不仅限于此 ...
- 现代C++(Modern C++)基本用法实践:三、移动语义
概述 移动 移动(move)语义C++引入了一种新的内存优化,以避免不必要的拷贝.在构造或者赋值的时候,如果实参是右值(或者左值由std::move转换成右值),便会匹配移动语义的函数调用如下述举例的 ...
- Linux 命令:btrfs filesystem resize
btrfs filesystem resize 2:300G /path ## 为创建了btrfs文件系统,已经挂载到/path 且device ID为2的硬盘/分区进行resize # 已经做过硬盘 ...
- linux 字符集与编码格式相关
字符集:多个字符的集合. # 书写系统字母与符号的集合. 字符编码:把 字符集 中的字符 编码为(映射)指定集合中的某一对象. # 以便文本在计算机中存储和通过通信网络的传递 查看文件的的编码格式 ...