python 简单易懂的验证码识别

目录

1. 前言

2.样例

3. 灰度化

1).简单原理:

2).导包:

3).三种灰度化方法:

4).显示与写入:

5).效果图:

4. 二值化

5.  降噪

1).cv2中的morphologyEx方法

2).使用侵蚀与膨胀形态学去噪

 6.识别

1)muggle_ocr识别:

 2) 百度识别:


1. 前言

       验证码对于做采集的人来说是个烦人的小家伙!当然有很多打码平台,可以轻松解决!但可以自己来,干嘛靠别人!有技术不学是傻儿童!今天主要讲来用 opencv 解决验证码!

2.样例

这人眼看起都有点变扭,乱七八糟,干扰元素太多了!

python 简单易懂的验证码识别_第1张图片

3. 灰度化

1).简单原理:

        本身三原色为RGB,但opencv里是使用的BGR,在BGR值相同时为灰色。大概就是,将三通道的图片变为单通道就可以称为灰度化处理。

2).导包:

        包名:opencv-python与numpy

import cv2
import numpy as np

3).三种灰度化方法:

# 方法一  直接在读取图片的时候灰度化
yzm = cv2.imread('1.png',cv2.IMREAD_GRAYSCALE)
 
# 方法二 在读入图片后再进行灰度化
yzm = cv2.imread('1.png')
yzm = cv2.cvtColor(yzm,cv2.COLOR_BGR2GRAY)
 
# 方法三  使用numpy取值进行灰度化
# max:取最大值 较亮      min:取最小值  较黑      mean:取平均值
yzm = cv2.imread('1.png')
yzm = np.min(yzm,axis=2).astype(np.uint8)   

4).显示与写入:

# 保存灰度化的图片
cv2.imwrite('new_img.png',yzm)
 
# 显示灰度化的图片  windows1是窗口名称
cv2.imshow('windows1',yzm)
 
# waitKey()–是在一个给定的时间内(单位ms)等待用户按键触发,0表示任意按键
cv2.waitKey(0)
 
# 销毁特定的窗口
cv2.destroyWindow('windows1')

5).效果图:

python 简单易懂的验证码识别_第2张图片

4. 二值化

简单说:将图片变成黑白(0和255)叫做二值化处理,调用openCv里的threshold方法。

注意:阈值可以调整

import cv2
 
yzm = cv2.imread('1.png')  # 读图片
yzm = cv2.cvtColor(yzm,cv2.COLOR_BGR2GRAY)   # cv2 方法灰度化
 
# 二值化
thresh,yzm = cv2.threshold(yzm,160,255,cv2.THRESH_BINARY)
# yzm:表示需要操作的数组
# 160:表示阈值
# 255 表示最大值
 
 
cv2.imshow('window1',yzm)
cv2.waitKey(0)
cv2.destroyWindow('window1')

效果图:

   python 简单易懂的验证码识别_第3张图片

5.  降噪

 降噪方法有三:1.八邻域降噪       

                          2.使用侵蚀与膨胀形态学去噪

                          3.cv2 中的 morphologyEx 方法

八邻域不讲,本篇主要是简单易懂!用新人上手

1).cv2中的morphologyEx方法

import cv2
import numpy as np
 
yzm = cv2.imread('1.png')
yzm = cv2.cvtColor(yzm,cv2.COLOR_BGR2GRAY)   # cv2 方法灰度化
thresh,yzm = cv2.threshold(yzm,170,255,cv2.THRESH_BINARY)  # cv2二值化
 
# 降噪
yzm = cv2.morphologyEx(yzm,cv2.MORPH_CLOSE,np.ones(shape=(6,6)))
 
cv2.imwrite('2.png',yzm) # 写入
cv2.imshow('window1',yzm)
cv2.waitKey(0)
cv2.destroyWindow('window1')

效果图:

python 简单易懂的验证码识别_第4张图片

2).使用侵蚀与膨胀形态学去噪

import cv2
import numpy as np
 
yzm = cv2.imread('1.png')
yzm = cv2.cvtColor(yzm,cv2.COLOR_BGR2GRAY)   # cv2 方法灰度化
thresh,yzm = cv2.threshold(yzm,170,255,cv2.THRESH_BINARY)  # cv2二值化
 
# 先膨胀 让黑色遭点消失,再侵蚀让黑色加粗
dilate = cv2.dilate(yzm,np.ones(shape=(6,6)))
yzm = cv2.erode(dilate,np.ones(shape=(5,5)))
 
cv2.imwrite('2.png',yzm) # 写入
cv2.imshow('window1',yzm)
cv2.waitKey(0)
cv2.destroyWindow('window1')

  效果图:

python 简单易懂的验证码识别_第5张图片

 6.识别

可以使用:1.muggle_ocr识别

                  2.调用百度识别   (两者都是免费识别)

1)muggle_ocr识别:

# muggle_ocr识别
 
import muggle_ocr
 
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)
img = open('2.png','rb').read()
text = sdk.predict(image_bytes=img)
print(text)

 2) 百度识别:

from aip import AipOcr
 
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
 
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
img = open('2.png','rb').read()
result = client.basicGeneral(img)
print(result)

效果图:

python 简单易懂的验证码识别_第6张图片

你可能感兴趣的:(爬虫基础,python,numpy,opencv)