当前位置: 首页 > 科技观察

Python项目实战篇常用验证码标注&识别(数据采集-预处理-字符图片裁剪)

时间:2023-03-12 18:32:58 科技观察

大家好,我是雪球。一、前言在上一篇文章中,小编为大家讲解了需求分析与实现思路,以及Python项目实战篇-常用验证码标注与识别(需求分析与实现思路),本文继续上一篇文章.内容,给大家讲解一下数据采集/预处理/字符图切割的内容。2.数据采集数据采集:根据图片验证码链接批量下载图片。一开始下载20张图片,手动修改文件名进行标注。下载这块的代码不难写。代码这里就不贴了,看image_download。py文件。3、预处理预处理:根据需求分析中的字符切割描述,针对作者图片验证码的情况,需要先进行常规的验证码图片预处理。预处理是通过OpenCV库实现的。处理过程为:原始图像->灰度图像->中值滤波->二值化->轮廓检测和绘制(仅在某些情况下)->字符切割和填充。[3.OpenCV文章专栏](https://blog.csdn.net/yukinoai/category_9283880.html)[4.OpenCV-Python视频](https://www.bilibili.com/video/BV1tb4y1C7j7)原图(RGB)转灰度图:去除颜色信息,减小图像尺寸,单通道值便于滤波处理。读者可以想一想,在不去除颜色信息的情况下,能否提取出指定字符颜色的轮廓呢?灰度图中的值滤波:进行去噪,取中间像素的平均值,二值化:只剩下0和255两个值,方便轮廓检测Contourdetection:这一步主要用来提取矩形字符轮廓坐标,不适合字符靠得很近的情况字符裁剪和填充:根据生成的字符轮廓图的直角坐标裁剪和填充,对齐到指定的宽高具体执行效果如下:以下是预处理过程的部分核心代码,详细代码见image_split.py文件。defpre_process_image(img,file_name):#去掉边img=img[2:-2,2:-2]#print(img.shape)#得到灰度图gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#show("gray",gray)#Removenoiseblur=cv2.medianBlur(gray,3)#show("blur",blur)temp=gray.mean().item()#binaryret,threshold=cv2.threshold(blur,temp,255,cv2.THRESH_BINARY)#show("threshold",threshold)#保存二值化图像ifIS_SAVE_FILE:cv2.imwrite(DST_IMG_DIR+file_name+"_threshold.png",threshold)returnthreshold执行图像预处理程序最终效果图1-3如下:轮廓检测绘制结果1:根据图像轮廓切割字符结果2:根据字符切割图片进行文件分类3:以上就是字符图片切割的全过程,核心流程代码如下:defsplit_image(file_path):file_name=get_file_name(file_path)img=read_image(file_path)#验证码预处理threshold=pre_process_image(img,file_name)#查找轮廓边界列表contours=find_counters(threshold)#Filtersuitablecontourrectanglelistrect_list,result_rect=get_filter_rect(contours,img,file_name)#分割矩形图像返回split_rect_img(file_path,threshold,rect_list,result_rect)详细代码可以看源码code,这里是笔者在这个过程中写预处理代码遇到的几个问题:一些图像的轮廓检测可以检测到多个轮廓。有的图片只有1-2个轮廓,有的可能没有任何轮廓。这里的代码做了相应的调整,比如过滤大外轮廓和较小的内轮廓根据剩余轮廓的坐标排序,所有字符轮廓根据部分坐标得到。得到4张字符轮廓图后,每张图片大小不一致,需要进行大小填充。width和height参数需要根据数据集进行调整。以上就是数据采集/预处理的实现过程。这里稍微说说学习OpenCV相关知识的过程。作者采用文章+视频断断续续的学习方式,大概需要20-40个小时,然后开始写切割特定字符和图片的代码。读者可根据自己的时间安排学习速度。建议工具要快点学会,马上就可以用。接下来介绍高效可复用的通用图片验证码。实现了数据标注功能。4.总结我是雪球。上一篇分享给大家,Python项目实战篇-常用验证码标注与识别(需求分析与实现思路),本篇内容主要讲解常用验证码标注与识别的数据采集/预处理实现过程。在下一篇文章中,小编将为大家介绍高效可复用的通用图片验证码数据标注功能的实现。小伙伴们快来练起来吧!如果你在学习过程中遇到什么问题,欢迎加我为好友,我会拉你进Python学习交流群一起讨论学习。