精华内容
下载资源
问答
  • 废话不多说,直接开干! 首先安装库 pip install pytesseract pip install PILLOW 然后按照tesseract程序下载安装 ...用户变量,系统变量都添加:PATH C:\Program Files (x86)\Tesseract-OCR; //这是tesseract的安装...
  • 在本篇内容里小编给大家整理的是一篇关于python识别验证码的思路及解决方案,有需要的朋友们可以参考下。
  • 今天小编就为大家分享一篇Python完全识别验证码自动登录实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python识别字符验证码
  • Python图片验证码字母或数字通用识别代码,简单方便调用。Python图片验证码字母或数字通用识别代码,简单方便调用。Python图片验证码字母或数字通用识别代码,简单方便调用。Python图片验证码字母或数字通用识别代码...
  • 在本篇内容里小编给大家整理的是一篇关于python识别验证码的思路及解决方案,有需要的朋友们可以参考下。 1、介绍 在爬虫中经常会遇到验证码识别的问题,现在的验证码大多分计算验证码、滑块验证码、识图验证码、...

    在本篇内容里小编给大家整理的是一篇关于python识别验证码的思路及解决方案,有需要的朋友们可以参考下。

    1、介绍

    在爬虫中经常会遇到验证码识别的问题,现在的验证码大多分计算验证码、滑块验证码、识图验证码、语音验证码等四种。本文就是识图验证码,识别的是简单的验证码,要想让识别率更高,识别的更加准确就需要花很多的精力去训练自己的字体库。

    识别验证码通常是这几个步骤:

    (1)灰度处理

    (2)二值化

    (3)去除边框(如果有的话)

    (4)降噪

    (5)切割字符或者倾斜度矫正

    (6)训练字体库

    (7)识别

    这6个步骤中前三个步骤是基本的,4或者5可根据实际情况选择是否需要。

    经常用的库有pytesseract(识别库)、OpenCV(高级图像处理库)、imagehash(图片哈希值库)、numpy(开源的、高性能的Python数值计算库)、PIL的 Image,ImageDraw,ImageFile等。博主的Python学习圈子点击即可进入一起交流学习,还有最新的Python资料可以免费下载

    2、实例

    以某网站登录的验证码识别为例:具体过程和上述的步骤稍有不同。
    在这里插入图片描述
    首先分析一下,验证码是由4个从0到9等10个数字组成的,那么从0到9这个10个数字没有数字只有第一、第二、第三和第四等4个位置。那么计算下来共有40个数字位置,如下:

    在这里插入图片描述

    那么接下来就要对验证码图片进行降噪、分隔得到上面的图片。以这40个图片集作为基础。

    对要验证的验证码图片进行降噪、分隔后获取四个类似上面的数字图片、通过和上面的比对就可以知道该验证码是什么了。

    以上面验证码2837为例:

    1、图片降噪
    在这里插入图片描述
    2、图片分隔

    在这里插入图片描述
    3、图片比对

    通过比验证码降噪、分隔后的四个数字图片,和上面的40个数字图片进行哈希值比对,设置一个误差,max_dif:允许最大hash差值,越小越精确,最小为0。
    在这里插入图片描述
    这样四个数字图片通过比较后获取对应是数字,连起来,就是要获取的验证码。

    完整代码如下:

    #coding=utf-8
    import os
    import re
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.common.action_chains import ActionChains
    import collections
    import mongoDbBase
    import numpy
    import imagehash
    from PIL import Image,ImageFile
    import datetime
    class finalNews_IE:
        def __init__(self,strdate,logonUrl,firstUrl,keyword_list,exportPath,codepath,codedir):
            self.iniDriver()
            self.db = mongoDbBase.mongoDbBase()
            self.date = strdate
            self.firstUrl = firstUrl
            self.logonUrl = logonUrl
            self.keyword_list = keyword_list
            self.exportPath = exportPath
            self.codedir = codedir
            self.hash_code_dict ={}
            for f in range(0,10):
                for l in range(1,5):
                    file = os.path.join(codedir, "codeLibrary\code" +  str(f) + '_'+str(l) + ".png")
                    # print(file)
                    hash = self.get_ImageHash(file)
                    self.hash_code_dict[hash]= str(f)
        def iniDriver(self):
            # 通过配置文件获取IEDriverServer.exe路径
            IEDriverServer = "C:\Program Files\Internet Explorer\IEDriverServer.exe"
            os.environ["webdriver.ie.driver"] = IEDriverServer
            self.driver = webdriver.Ie(IEDriverServer)
        def WriteData(self, message, fileName):
            fileName = os.path.join(os.getcwd(), self.exportPath + '/' + fileName)
            with open(fileName, 'a') as f:
                f.write(message)
        # 获取图片文件的hash值
        def get_ImageHash(self,imagefile):
            hash = None
            if os.path.exists(imagefile):
                with open(imagefile, 'rb') as fp:
                    hash = imagehash.average_hash(Image.open(fp))
            return hash
        # 点降噪
        def clearNoise(self, imageFile, x=0, y=0):
            if os.path.exists(imageFile):
                image = Image.open(imageFile)
                image = image.convert('L')
                image = numpy.asarray(image)
                image = (image > 135) * 255
                image = Image.fromarray(image).convert('RGB')
                # save_name = "D:\work\python36_crawl\Veriycode\mode_5590.png"
                # image.save(save_name)
                image.save(imageFile)
                return image
        #切割验证码
        # rownum:切割行数;colnum:切割列数;dstpath:图片文件路径;img_name:要切割的图片文件
        def splitimage(self, imagePath,imageFile,rownum=1, colnum=4):
            img = Image.open(imageFile)
            w, h = img.size
            if rownum <= h and colnum <= w:
                print('Original image info: %sx%s, %s, %s' % (w, h, img.format, img.mode))
                print('开始处理图片切割, 请稍候...')
                s = os.path.split(imageFile)
                if imagePath == '':
                    dstpath = s[0]
                fn = s[1].split('.')
                basename = fn[0]
                ext = fn[-1]
                num = 1
                rowheight = h // rownum
                colwidth = w // colnum
                file_list =[]
                for r in range(rownum):
                    index = 0
                    for c in range(colnum):
                        # (left, upper, right, lower)
                        # box = (c * colwidth, r * rowheight, (c + 1) * colwidth, (r + 1) * rowheight)
                        if index < 1:
                            colwid = colwidth + 6
                        elif index < 2:
                            colwid = colwidth + 1
                        elif index < 3:
                            colwid = colwidth
                        box = (c * colwid, r * rowheight, (c + 1) * colwid, (r + 1) * rowheight)
                        newfile = os.path.join(imagePath, basename + '_' + str(num) + '.' + ext)
                        file_list.append(newfile)
                        img.crop(box).save(newfile, ext)
                        num = num + 1
                        index += 1
                return file_list
        def compare_image_with_hash(self, image_hash1,image_hash2, max_dif=0):
            """
                    max_dif: 允许最大hash差值, 越小越精确,最小为0
                    推荐使用
                    """
            dif = image_hash1 - image_hash2
            # print(dif)
            if dif < 0:
                dif = -dif
            if dif <= max_dif:
                return True
            else:
                return False
        # 截取验证码图片
        def savePicture(self):
            self.driver.get(self.logonUrl)
            self.driver.maximize_window()
            time.sleep(1)
            self.driver.save_screenshot(self.codedir +"\Temp.png")
            checkcode = self.driver.find_element_by_id("checkcode")
            location = checkcode.location  # 获取验证码x,y轴坐标
            size = checkcode.size  # 获取验证码的长宽
            rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']),
                      int(location['y'] + size['height']))  # 写成我们需要截取的位置坐标
            i = Image.open(self.codedir +"\Temp.png")  # 打开截图
            result = i.crop(rangle)  # 使用Image的crop函数,从截图中再次截取我们需要的区域
            filename = datetime.datetime.now().strftime("%M%S")
            filename =self.codedir +"\Temp_code.png"
            result.save(filename)
            self.clearNoise(filename)
            file_list = self.splitimage(self.codedir,filename)
            verycode =''
            for f in file_list:
                imageHash = self.get_ImageHash(f)
                for h,code in self.hash_code_dict.items():
                    flag = self.compare_image_with_hash(imageHash,h,0)
                    if flag:
                        # print(code)
                        verycode+=code
                        break
            print(verycode)
            self.driver.close()
       
        def longon(self):
            self.driver.get(self.logonUrl)
            self.driver.maximize_window()
            time.sleep(1)
            self.savePicture()
            accname = self.driver.find_element_by_id("username")
            # accname = self.driver.find_element_by_id("//input[@id='username']")
            accname.send_keys('ctrchina')
            accpwd = self.driver.find_element_by_id("password")
            # accpwd.send_keys('123456')
            code = self.getVerycode()
            checkcode = self.driver.find_element_by_name("checkcode")
            checkcode.send_keys(code)
            submit = self.driver.find_element_by_name("button")
            submit.click()
    

    实例补充:

    # -*- coding: utf-8 -*
    import sys
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    import re
    import requests
    import io
    import os
    import json
    from PIL import Image
    from PIL import ImageEnhance
    from bs4 import BeautifulSoup
    
    import mdata
    
    class Student:
     def __init__(self, user,password):
     self.user = str(user)
     self.password = str(password)
     self.s = requests.Session()
    
     def login(self):
     url = "http://202.118.31.197/ACTIONLOGON.APPPROCESS?mode=4"
     res = self.s.get(url).text
     imageUrl = 'http://202.118.31.197/'+re.findall('<img src="(.+?)" width="55"',res)[0]
     im = Image.open(io.BytesIO(self.s.get(imageUrl).content))
     enhancer = ImageEnhance.Contrast(im)
     im = enhancer.enhance(7)
     x,y = im.size
     for i in range(y):
      for j in range(x):
      if (im.getpixel((j,i))!=(0,0,0)):
       im.putpixel((j,i),(255,255,255))
     num = [6,19,32,45]
     verifyCode = ""
     for i in range(4):
      a = im.crop((num[i],0,num[i]+13,20))
      l=[]
      x,y = a.size
      for i in range(y):
      for j in range(x):
       if (a.getpixel((j,i))==(0,0,0)):
       l.append(1)
       else:
       l.append(0)
      his=0
      chrr="";
      for i in mdata.data:
      r=0;
      for j in range(260):
       if(l[j]==mdata.data[i][j]):
       r+=1
      if(r>his):
       his=r
       chrr=i
      verifyCode+=chrr
      # print "辅助输入验证码完毕:",verifyCode
     data= {
     'WebUserNO':str(self.user),
     'Password':str(self.password),
     'Agnomen':verifyCode,
     }
     url = "http://202.118.31.197/ACTIONLOGON.APPPROCESS?mode=4"
     t = self.s.post(url,data=data).text
     if re.findall("images/Logout2",t)==[]:
      l = '[0,"'+re.findall('alert((.+?));',t)[1][1][2:-2]+'"]'+" "+self.user+" "+self.password+"\n"
      # print l
      # return '[0,"'+re.findall('alert((.+?));',t)[1][1][2:-2]+'"]'
      return [False,l]
     else:
      l = '登录成功 '+re.findall('!&nbsp;(.+?)&nbsp;',t)[0]+" "+self.user+" "+self.password+"\n"
      # print l
      return [True,l]
    
     def getInfo(self):
     imageUrl = 'http://202.118.31.197/ACTIONDSPUSERPHOTO.APPPROCESS'
     data = self.s.get('http://202.118.31.197/ACTIONQUERYBASESTUDENTINFO.APPPROCESS?mode=3').text #学籍信息
     data = BeautifulSoup(data,"lxml")
     q = data.find_all("table",attrs={'align':"left"})
     a = []
     for i in q[0]:
      if type(i)==type(q[0]) :
      for j in i :
       if type(j) ==type(i):
       a.append(j.text)
     for i in q[1]:
      if type(i)==type(q[1]) :
      for j in i :
       if type(j) ==type(i):
       a.append(j.text)
     data = {}
     for i in range(1,len(a),2):
      data[a[i-1]]=a[i]
     # data['照片'] = io.BytesIO(self.s.get(imageUrl).content)
     return json.dumps(data)
    
     def getPic(self):
     imageUrl = 'http://202.118.31.197/ACTIONDSPUSERPHOTO.APPPROCESS'
     pic = Image.open(io.BytesIO(self.s.get(imageUrl).content))
     return pic
    
     def getScore(self):
      score = self.s.get('http://202.118.31.197/ACTIONQUERYSTUDENTSCORE.APPPROCESS').text #成绩单
      score = BeautifulSoup(score, "lxml")
      q = score.find_all(attrs={'height':"36"})[0]
      point = q.text
      print point[point.find('平均学分绩点'):]
      table = score.html.body.table
      people = table.find_all(attrs={'height' : '36'})[0].string
      r = table.find_all('table',attrs={'align' : 'left'})[0].find_all('tr')
      subject = []
      lesson = []
      for i in r[0]:
      if type(r[0])==type(i):
       subject.append(i.string)
      for i in r:
      k=0
      temp = {}
      for j in i:
       if type(r[0])==type(j):
       temp[subject[k]] = j.string
       k+=1
      lesson.append(temp)
      lesson.pop()
      lesson.pop(0)
      return json.dumps(lesson)
    
     def logoff(self):
     return self.s.get('http://202.118.31.197/ACTIONLOGOUT.APPPROCESS').text
    
    if __name__ == "__main__":
     a = Student(20150000,20150000)
     r = a.login()
     print r[1]
     if r[0]:
     r = json.loads(a.getScore())
     for i in r:
      for j in i:
      print i[j],
      print
     q = json.loads(a.getInfo())
     for i in q:
      print i,q[i]
     a.getPic().show()
     a.logoff()
    

    到此这篇关于python识别验证码的思路及解决方案的文章就介绍到这了,更多Python技术和学习资料进入博主的Python圈子观看和下载。

    展开全文
  • python识别验证码

    千次阅读 2019-01-13 17:53:19
    验证码是页面上非常常见的一种识别用户身份的方式,如图所示: 在使用爬虫爬取网页时,我们要对验证码进行自动的识别和填写。这里使用tesseract来完成对验证码的扫描识别。 1. 安装tesseract。 tesseract是一个...

    验证码是页面上非常常见的一种识别用户身份的方式,如图所示:

    Image CAPTCHA

    在使用爬虫爬取网页时,我们要对验证码进行自动的识别和填写。这里使用tesseract来完成对验证码的扫描识别。

    1. 安装tesseract。

    tesseract是一个独立的软件,并不是python模块,需要单独的下载并安装。

    下载地址:https://github.com/UB-Mannheim/tesseract/wiki 选择适当的版本下载。

    当前最新版本是64位的4.00版本。下载后双击安装即可。

    安装完毕后要将tesseract.exe路径添加到环境变量中,在命令行窗口输入tesseract --version测试:

    2. 我们的测试网站是http://www.pythonscraping.com/humans-only 打开网页后有一个需要用户提交的表格,在提交内容的下方有一个由网站生成的验证码:

     利用requests访问网站,利用BeautifulSoup提取填写表格时必须要的验证信息,利用pillow处理和保存图片。

    resp = requests.get('http://www.pythonscraping.com/humans-only')
    bsobj = BeautifulSoup(resp.text, features='html.parser')

    表格中有很多防止CSRF的隐藏域,通过Chrome的开发者工具可以获得这些隐藏域的值。通过表单提交数据也必须提交这些隐藏域的信息作为CSRF_TOKEN,否则表单验证不会通过:

    图中标红框的内容都是要提取的内容,三个隐藏input的value值是CSRF_TOKEN,img标签的src值是验证码图片的地址。

    imageURL = bsobj.find('img', {'title': 'Image CAPTCHA'})['src']
    formBuildID = bsobj.find('input', {'name': 'form_build_id'})['value']
    captchaSid = bsobj.find('input', {'name': 'captcha_sid'})['value']
    captchaToken = bsobj.find('input', {'name': 'captcha_token'})['value']

     3. 根据imageURL发起网络请求获得验证码图片。需要注意的是,src是一个相对路径,访问时要使用完整的路径:

    imgContent = requests.get('http://pythonscraping.com' + imageURL)
    image = Image.open(BytesIO(imgContent.content))
    filename = 'captcha.jpg'
    image.save(filename)

    imgContent.content是图片的二进制格式,利用pillow的Image和io的BytesIO封装为一个pillow的Image对象,调用save方法将图片保存到指定路径。

    4. 为了提高识别的准曲率,可以适当对图像进行处理。增加图像的对比度:

    img = Image.open(filename)
    img = img.point(lambda x: 0 if x < 143 else 255)
    borderImg = ImageOps.expand(img, 10, 'white')
    borderImg.save(filename)

    尽量减少图像上的灰色内容,做到非黑即白。

    5. 在python中开启一条进程,启动tesseract识别图片中的内容,并将识别结果输出到一个txt文件中保存:

    p = subprocess.Popen(['tesseract', 'captcha.jpg', 'captcha'],
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    p.wait()

    通过subprocess在当前py运行的进程中开启另外一个线程运行tesseract,并且当前线程暂停等待tesseract线程完成识别工作并将识别结果保存到captcha.txt中。

    6. 打开captcha.txt,读取解析结果:

    with open('captcha.txt', 'r') as reader:
        catchacode = reader.read().replace(' ', '').replace('\n', '')
        print('验证码为:', catchacode)

    对识别中产生的空格和换行都做了替换处理,最终打印识别的结果。

    识别效果展示:

    识别效果还可以,但并不是每次都可以正确识别的。为了提高tesseract的识别率,可以对tesseract进行训练。具体方式可以参考相关技术文档。 

    展开全文
  • Python识别验证码

    2021-02-11 02:09:16
    图像预处理的方法前面已经完成了,关键是用什么方法来进行图像比对呢?一开始我想的很简单,直接对每张样本图片I1与测试图片I2相同坐标的像素进行...由于原始验证码图片添加了大量噪音,虽然做了降噪处理,但得到...

    图像预处理的方法前面已经完成了,关键是用什么方法来进行图像比对呢?

    一开始我想的很简单,直接对每张样本图片I1与测试图片I2相同坐标的像素进行逐一比对,计算I1与I2的相同坐标的像素相等的数目,最后求均值,得到10个分值,分数高的就是预测结果。

    这个计算方法看起来可行,但是在实际使用的时候有一些问题

    因为要遍历所有图片的所有像素,计算起来非常慢!

    由于原始验证码图片添加了大量噪音,虽然做了降噪处理,但得到的同一类别图片之间还是存在较大差异。因此,如果用像素完全匹配的方法,容易有误判。

    后来我找到了一个方法,先对样本图像进行编码转换。得到一个能体现图像特征的code,再将这些样本图像的code全部保存起来。这样下次要使用的时候,就不必每次都读一遍图片啦!

    图片转code的方法我选择的hash转换,过程大致如下:

    缩放:图片缩放为8*8

    求平均值:计算灰度图所有像素的平均值

    比较:像素值大于平均值记作1,相反记作0,总共64位

    生成hash:将上述步骤生成的1和0按顺序组合起来既是图片的指纹(hash)。顺序不固定。但是比较时候必须是相同的顺序。

    得到hash值后,将同一数字对于图片的hash值存在一个txt文件中,实际使用的时候,对预测图像进行上文相同的预处理操作,分割出4个图片后,再计算出4个预测图像的hash值,将测试图像的hash值与TXT文件中的hash进行比对,计算汉明距离,即两个64位的hash值有多少位是不一样的,不相同位数越少,图片越相似。

    得到测试图像与每个样本图像hash值的汉明距离后,进行统计,平均,取预测值最大的样本图像标签为预测值。识别的速度也还不错,平均只需要0.3秒就可以完成一次识别。

    这种识别的方法简单易操作,对简单的字母数字组合验证码非常有效,但是对图像预处理提出了更高的要求,而且不具备泛化性,碰到不同的验证码每次都需要单独编辑规则。

    55d7ccbccadee3374b1b068451364d16.png

    展开全文
  • 本文介绍了python使用tensorflow深度学习识别验证码 ,分享给大家,具体如下: 除了传统的PIL包处理图片,然后用pytessert+OCR识别意外,还可以使用tessorflow训练来识别验证码。 此篇代码大部分是转载的,只改了很少...
  • 主要介绍了mac使用python识别图形验证码功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 自动识别验证码源码
  • python 验证码图片识别源代码,适合学生课程设计、毕业设计参考资料。
  • Python 识别验证码数字

    千次阅读 2018-02-03 17:38:10
    问题: 识别验证码中的运算 最终识别效果不好,仍在想方法 环境: 1. Ubuntu 16.04 2. Python 3.5.2 使用了百度的OCR(optical character recognition)接口,发现无法识别验证码中的数字,无法使用。 1...

    问题: 识别验证码中的运算
    最终识别效果不好,仍在想方法

    环境:
    1. Ubuntu 16.04
    2. Python 3.5.2

    使用了百度的OCR(optical character recognition)接口,发现无法识别验证码中的数字,无法使用。

    1.安装项目依赖

    #1.tesseract-ocr安装 
    sudo apt-get install tesseract-ocr
    
    #2.pytesseract安装 
    sudo apt-get install python3-pip
    sudo pip3 install pytesseract
    
    #3.Pillow 安装 
    sudo pip3 install pillow
    
    #4.numpy 安装
    sudo pip3 install numpy
    
    #5.openCV
    pip install opencv-python

    这里写图片描述

    # -*- coding: UTF-8 -*_
    from PIL import Image
    from PIL import ImageFilter
    from pytesseract import *
    import PIL.ImageOps
    
    
    
    def initTable(threshold=140):
        table = []
        for i in range(256):
            if i < threshold:
                table.append(0)
            else:
                table.append(1)
        return table
    
    im = Image.open('3.png')
    #图片的处理过程
    im = im.convert('L')
    binaryImage = im.point(initTable(), '1')
    im1 = binaryImage.convert('L')
    im2 = PIL.ImageOps.invert(im1)
    im2.save('test_1.png');
    im3 = im2.convert('1')
    im2.save('test_2.png');
    im4 = im3.convert('L')
    im2.save('test_3.png');
    print(pytesseract.image_to_string(im2));
    #将图片中字符裁剪保留
    box = (120,0,265,60) 
    region = im4.crop(box)  
    region.save('test_4.png');
    
    fc = region.crop((0,0,48,60));
    fc.save('test_fc.png');
    op = region.crop((48,0,68,60));
    op.save('test_op.png');
    region.save('test_region.png');
    lc = region.crop((68,0,120,60));
    lc.save('test_lc.png');
    print(pytesseract.image_to_string(fc, config='-psm 6  -c tessedit_char_whitelist="0123456789"'));
    print(pytesseract.image_to_string(op, config='-psm 7  -c tessedit_char_whitelist="+-*/%"'));
    print(pytesseract.image_to_string(lc, config='-psm 6  -c tessedit_char_whitelist="0123456789"'));
    
    invImg = PIL.ImageOps.invert(region);
    invImg.save('test_5.png');
    print(pytesseract.image_to_string(invImg, config='-psm 7  -c tessedit_char_whitelist="0123456789+-*/"'));
    
    invIm2 = invImg.convert('RGB').filter(ImageFilter.SHARPEN);
    invIm2.save('test_6.jpg');
    #将图片字符放大
    out = region.resize((120,38)) 
    out.save('test_7.png');
    # out.save('test_6.png');
    asd = pytesseract.image_to_string(out)
    print(asd)
    # print(out.show())

    最终效果:
    这里写图片描述

    其他

    今天在使用Python的Pillow模块:

    from PIL import Image  
    from PIL import ImageFilter
    im=Image.open("google-logo.bmp")  
    out=im.filter(ImageFilter.DETAIL)  

    出现错误:
    ValueError: cannot filter palette images

    print (im.format, im.size,im.mode)  
    
    GIF (150, 55) P  

    P代表是调色板。
    在StackOverflow上搜索了下,找到了该问题:
    http://stackoverflow.com/questions/10323692/cannot-filter-palette-images-error-when-doing-a-imageenhance-sharpness
    It’s quite common for algorithms to be unable to work with a palette based image. The convert in the above changes it to have a full RGB value at each pixel location.
    大致翻译如下:在算法中,不能处理一个调色板图像很正常。这种“转换”需要在每一个像素点有全RGB值。

    本例子中,改为:

    out=im.convert('RGB').filter(ImageFilter.DETAIL)  

    常用滤镜有如下:
    滤镜名称 含义

    ImageFilter.BLUR    模糊滤镜
    ImageFilter.CONTOUR 轮廓
    ImageFilter.EDGE_ENHANCE    边界加强
    ImageFilter.EDGE_ENHANCE_MORE   边界加强(阀值更大)
    ImageFilter.EMBOSS  浮雕滤镜
    ImageFilter.FIND_EDGES  边界滤镜
    ImageFilter.SMOOTH  平滑滤镜
    ImageFilter.SMOOTH_MORE 平滑滤镜(阀值更大)
    ImageFilter.SHARPEN 锐化滤镜
    
    
    im1 = im.filter(ImageFilter.BLUR)
    im2 = im.filter(ImageFilter.MinFilter(3))
    im3 = im.filter(ImageFilter.MinFilter()) # same as MinFilter(3)

    Tesseract 参数

    root@1fc22f000bc8:/var/www/tmp# tesseract
    Usage:
      tesseract --help | --help-psm | --version
      tesseract --list-langs [--tessdata-dir PATH]
      tesseract --print-parameters [options...] [configfile...]
      tesseract imagename|stdin outputbase|stdout [options...] [configfile...]
    
    OCR options:
      --tessdata-dir PATH   Specify the location of tessdata path.
      --user-words PATH     Specify the location of user words file.
      --user-patterns PATH  Specify the location of user patterns file.
      -l LANG[+LANG]        Specify language(s) used for OCR.
      -c VAR=VALUE          Set value for config variables.
                            Multiple -c arguments are allowed.
      -psm NUM              Specify page segmentation mode.
    NOTE: These options must occur before any configfile.
    
    Page segmentation modes:
      0    Orientation and script detection (OSD) only.
      1    Automatic page segmentation with OSD.
      2    Automatic page segmentation, but no OSD, or OCR.
      3    Fully automatic page segmentation, but no OSD. (Default)
      4    Assume a single column of text of variable sizes.
      5    Assume a single uniform block of vertically aligned text.
      6    Assume a single uniform block of text.
      7    Treat the image as a single text line.
      8    Treat the image as a single word.
      9    Treat the image as a single word in a circle.
     10    Treat the image as a single character.
    
    Single options:
      -h, --help            Show this help message.
      --help-psm            Show page segmentation modes.
      -v, --version         Show version information.
      --list-langs          List available languages for tesseract engine.
      --print-parameters    Print tesseract parameters to stdout.
    
    展开全文
  • 主要介绍了python识别验证码图片实例详解,需要的朋友可以参考下
  • 本篇文章主要介绍了Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录,具有一定的参考价值,有兴趣的可以了解下
  • 代码如下: import requests from PIL import Image ...url3='获取验证码链接' for i in range(0,10): r = requests.get(url3) #保存验证码图片 with open(str(i)+'.bmp', 'wb') as f: for c...
  • Python识别验证码

    千次阅读 2020-09-28 11:04:14
    废话不多说,直接开干... print('ok') # print(pytesseract.image_to_string(im)) 执行结果 验证码识别结果:51188 <class 'str'> ok Process finished with exit code 0 只能识别部分验证码,加条线,下划线好像不行!
  • python识别验证码
  • [465]python识别验证码系列1

    千次阅读 2018-12-27 18:29:22
    验证码也分很多种类,主要的...(3)点触验证码:需要识别图片中的文字或类型并按序点击。比如12306的登录验证。 (4)宫格验证码:类似安卓的宫格解锁。比如新浪微博的宫格验证码。 利用pytesser识别简单图形验证...
  • 1、验证码的识别是有针对性的,不同的系统、应用的验证码区别有...2、我在识别验证码的路上走了很多弯路,重点应该放在怎么把图片处理成这个样子,方便pytesseract的识别,以提高成功率 3、原图为: 思想...
  • 。。。。
  • python识别验证码并登录

    千次阅读 2017-01-15 18:29:55
    尝试练习python,苦于没有什么想写……百度得知,pytesseract库识别验证码还可以,尝试利用结果: 识别验证码效果不理想,获取十张验证码能够准确识别一张的概率,加上自己对验证码的处理效果会稍微提高些环境: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,717
精华内容 7,486
关键字:

python识别验证码

python 订阅