前言
最近在研究验证码相关的操作,所以准备记录下安装以及使用的过程。虽然之前对验证码的破解有所了解的,但是之前都是简单使用之后就不用了,没有记录一个详细的过程,所以后面再用起来也要重新从网上查找资料比较麻烦,所以这里准备对研究过程的关键点做一个记录。
首先这篇文章,主要是研究图形验证码,后期会不定时拓展内容。
在网上查了很多版本的图形验证码识别,目前看到最多的两个模块是pytesseract和tesserocr,但是因为我这里安装tesserocr的时候各种出错,所以最终我锁定了使用pytesseract。
那么接下来,就记录下安装以及使用过程。这里的系统环境是mac os 10.14.
安装tesserocr
brew install tesserocr
因为pytesseract依赖于tesserocr所以首先需要先安装tesserocr这个软件。接下来就是安装python相关的包
安装python所需要的包
pip3 install pytesseract pip3 install pillow
安装pytesseract是ocr识别图片上的字,因为验证码的识别难度高低不同,所以在这个过程中需要对图片做一定的处理,这就需要使用处理图片的模块pillow。
一个简单的demo
import pytesseract from PIL import Image import os def binarizing(img, threshold): """传入image对象进行灰度、二值处理""" pixdata = img.load() w, h = img.size # 遍历所有像素,大于阈值的为黑色 for y in range(h): for x in range(w): if pixdata[x, y] < threshold: pixdata[x, y] = 0 else: pixdata[x, y] = 255 return img _temp = os.path.dirname(__file__) file_path = os.path.join(_temp, 'code2.jpg') print("file_path", file_path) image = Image.open(file_path) image = image.convert('L') threshold = 157 table = [] # 接下来是二值化处理 # 遍历所有像素,大于阈值的为黑色,threshold是阀值 image = binarizing(image, threshold) result = pytesseract.image_to_string(image) print(result)
示例中的图片
需要用到的图像知识:
对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”也就是我们说的灰度化的一个操作。除此之外,还有其他的模式,不过我们在处理验证码的时候是将其转为灰度模式,所以就不强调其他的模式了。
模式“L”
模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
L = R * 299/1000 + G * 587/1000+ B * 114/1000
通过灰度化之后的图片变为
灰度化我们还要对其进行二值化操作
二值化操作
二值化故名思议,就是整个图像所有像素只有两个值可以选择,一个是黑(灰度为0),一个是白(灰度为255)。二值化的好处就是将图片上的有用信息和无用信息区分开来,比如二值化之后的验证码图片,验证码像素为黑色,背景和干扰点为白色,这样后面对验证码像素处理的时候就会很方便。对于简单的图形验证码,到这里基本上就够了,但是如果有干扰线,还要进行除干扰线的操作。
对应的代码为
def binarizing(img, threshold): """传入image对象进行灰度、二值处理""" pixdata = img.load() w, h = img.size # 遍历所有像素,大于阈值的为黑色 for y in range(h): for x in range(w): if pixdata[x, y] < threshold: pixdata[x, y] = 0 #小于阀值设为0,0是黑色 else: pixdata[x, y] = 255 0 #大于阀值设为255,255是白色 return img
此时的图片效果为
可以看到图片变得锐化了很多,这个时候再去识别就比较好识别了。
去干扰线
常见的4邻域、8邻域算法。所谓的X邻域算法,可以参考手机九宫格输入法,按键5为要判断的像素点,4邻域就是判断上下左右,8邻域就是判断周围8个像素点。如果这4或8个点中255的个数大于某个阈值则判断这个点为噪音,阈值可以根据实际情况修改。
使用cv2处理
除此之外还可以使用cv2模块进行处理。
安装
pip install opencv-python
代码示例
# -*- coding: utf-8 -*- import cv2 import numpy as np import os _temp = os.path.dirname(__file__) file_path = os.path.join(_temp, 'code2.jpg') def remove_noise(img, k=4): ###8领域过滤 img2 = img.copy() # img处理数据,k过滤条件 w, h = img2.shape def get_neighbors(img3, r, c): count = 0 for i in [r - 1, r, r + 1]: for j in [c - 1, c, c + 1]: if img3[i, j] > 10: # 纯白色 count += 1 return count # 两层for循环判断所有的点 for x in range(w): for y in range(h): if x == 0 or y == 0 or x == w - 1 or y == h - 1: img2[x, y] = 255 else: n = get_neighbors(img2, x, y) # 获取邻居数量,纯白色的邻居 if n > k: img2[x, y] = 255 return img2 img = cv2.imread(file_path) # 将图片灰度化处理,降维,加权进行灰度化c gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) t, gray2 = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY) cv2.imshow('threshold', gray2) result = remove_noise(gray2) cv2.imshow('8neighbors', result) cv2.waitKey(0) #cv2.destroyAllWindows()
总结
以上所述是小编给大家介绍的mac使用python识别图形验证码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]