python切图并识别图片中的文字

某些图片化数据,想要批量处理成文字信息。可以使用python的PiL库。

一.环境

win 10 

python 3.6 

anaconda

二.切图

from PIL import Image
import pytesseract

def cut_image(fiel_path):
    img = Image.open(fiel_path)
    region = (0,0,100,200)
    #裁切图片
    cropImg = img.crop(region)
    #保存裁切后的图片
    cropImg.save(new_file_path)
    info = Image.open(new_file_path)
    # 识别图片
    image_info = pytesseract.image_to_string(info)
    return image_info

region 区域由一个4元组定义,表示为坐标是 (left, upper, right, lower)。 Python Imaging Library 使用左上角为 (0, 0)的坐标系统



### 实现滑动图片验证码识别 为了实现滑动图片验证码的自动化识别,可以采用多种技术组合来完成这一任务。下面介绍一种基于`ddddocr`库和`requests`库的方法,这种方法适用于那些可以通过API获取到原始像以及带有缺口的目标像的情况。 #### 导入库安装依赖项 首先,在环境中安装必要的Python包: ```bash pip install requests ddddocr ``` 这些工具可以帮助发送HTTP请求与OCR服务交互以解析中的文字或模式。 #### 获取验证码数据 当涉及到具体的应用场景时,比如访问某个特定网站上的滑动验证码功能,通常会有一个GET请求用于加载初始页面及其资源文件,其中包括了未处理过的背景(`slider`)与含有遮挡部分(即所谓的“缺口”)的整体(`img`)。对于给定的例子而言,URL如下所示: - `https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=<timestamp>` 此接口返回的数据中包含了两个重要的字段——一个是代表完整但存在缺失区域的大;另一个则是用来指示应该怎样移动的小标位置信息。此外还有其他辅助性的元数据如时间戳等[^1]。 #### 处理上传至OCR引擎 一旦获得了上述两张图片之后,就可以利用base64编码的方式将其转换成字符串形式,作为参数传递给第三方提供的OCR API进行分析。这里推荐使用`ddddocr`这个轻量级且高效的开源项目来进行中文字符以及其他复杂形状(例如本案例里的拼碎片)的检测工作。 以下是具体的代码片段展示了如何调用该SDK去定位出正确的偏移量: ```python import base64 from io import BytesIO import requests import ddddocr def get_captcha_images(): url = "https://example.com/api/captcha" response = requests.get(url) data = response.json() img_base64 = data['data']['img'] slider_base64 = data['data']['slider'] return { 'background': Image.open(BytesIO(base64.b64decode(img_base64))), 'slider': Image.open(BytesIO(base64.b64decode(slider_base64))) } def recognize_gap_position(background_image, slider_image): ocr = ddddocr.DdddOcr(show_ad=False) bg_bytes = BytesIO() background_image.save(bg_bytes, format='PNG') sl_bytes = BytesIO() slider_image.save(sl_bytes, format='PNG') result = ocr.slide_match( target_bytes=sl_bytes.getvalue(), template_bytes=bg_bytes.getvalue()) return int(result['target'][0]) # 返回横坐标值表示缺口起点相对于左侧边缘的距离 ``` 这段程序先是从指定的服务端拉取到了两幅待匹配的对象,接着借助于`ddddocr`所提供的函数完成了两者之间的相似度比较运算,最终得到了一个确数值说明了应当向右平移到多远才能使二者完美契合在一起。 #### 提交解决方案 最后一步就是把计算所得的结果封装进POST请求体里提交回去供服务器校验合法性。这一般意味着要构建一个新的JSON对象将之前求得的那个位移量赋值给相应的键名下,同时附带上任何可能被要求提供额外的身份认证令牌或者其他上下文关联的信息。 请注意实际部署过程中还需要考虑更多细节方面的问题,诸如异常情况下的重试机制设计、网络延迟影响因素规避策略等等。不过以上已经涵盖了核心逻辑要点所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值