Ubuntu上python识别验证码遇到的问题

python有专门图片识别的库
我用的是pytesseract

pytesseract说明

Python-tesseract is a wrapper for google’s Tesseract-OCR
http://code.google.com/p/tesseract-ocr/ ). It is also useful as a
stand-alone invocation script to tesseract, as it can read all image types
supported by the Python Imaging Library, including jpeg, png, gif, bmp, tiff,
and others, whereas tesseract-ocr by default only supports tiff and bmp.
Additionally, if used as a script, Python-tesseract will print the recognized
text in stead of writing it to a file. Support for confidence estimates and
bounding box data is planned for future releases.

大意如下:
1.Python-tesseract是一个基于google’s Tesseract-OCR的独立封装包
2.Python-tesseract功能是识别图片文件中文字,并作为返回参数返回识别结果
3.Python-tesseract默认支持tiff、bmp格式图片,只有在安装PIL之后,才能支持jpeg、gif、png等其他图片格式

那么问题来了,PIL是什么?
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

安装PIL

在Debian/Ubuntu Linux下直接通过apt安装:


1

$ sudo apt-get install python-imaging

Mac和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好:


1

$ sudo easy_install PIL

如果安装失败,根据提示先把缺失的包(比如openjpeg)装上。
Windows平台就去PIL官方网站下载exe安装包。

直接安装pytesseract


1

$ sudo pip install pytesseract

图文转换测试

ubuntu安装成功后
然后测试一下,随便找了个简单的验证码图片test.png放在同一目录下


1

2

3

4

5

6

7

8

9


# -*- coding:utf -8-*-

import pytesseract

from PIL import Image

image = Image.open(‘test.png‘)

code = pytesseract.image_to_string(image)

print (code)

出现了报错
OSError: [Errno 2] No such file or directory
黑人问号???

mmp,开始我以为是文件读不到
结果到网上查,是没有安装tesseract-ocr
然后安装下


1

apt-get install tesseract-ocr

可以,很完美

验证时的优化函数

接着写我的脚本,发现验证码全是数字
于是要把一些容易读出字母的数字改过来


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


change={

‘O‘:‘0‘,

‘o‘:‘0‘,

‘I‘:‘1‘,

‘i‘:‘1‘,

‘L‘:‘1‘,

‘l‘:‘1‘,

‘Z‘:‘2‘,

‘z‘:‘2‘,

‘e‘:‘3‘,

‘a‘:‘4‘,

‘S‘:‘5‘,

‘s‘:‘5‘,

‘b‘:‘6‘,

‘T‘:‘7‘,

‘t‘:‘7‘,

‘q‘:‘9‘

};

替换的时候


1

2


for x in change:

text = text.replace(x,change[x])

把他们合起来


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31


# -*-coding:utf-8-*-

import pytesseract

from PIL import Image

image = Image.open(‘test.png‘)

code = pytesseract.image_to_string(image)

change={

‘O‘:‘0‘,

‘o‘:‘0‘,

‘I‘:‘1‘,

‘i‘:‘1‘,

‘L‘:‘1‘,

‘l‘:‘1‘,

‘Z‘:‘2‘,

‘z‘:‘2‘,

‘e‘:‘3‘,

‘a‘:‘4‘,

‘S‘:‘5‘,

‘s‘:‘5‘,

‘b‘:‘6‘,

‘T‘:‘7‘,

‘t‘:‘7‘,

‘q‘:‘9‘

};

for x in change:

code = code.replace(x,change[x])

print code

python下载图片

python获取图片并写到本地的脚本如下


1

2

3

4

5

6

7

8


# -*- coding:utf-8 -*-

import requests

r = requests.get(url = "http://example/test.php")

data = r.content

f = file("captchatest.png","wb")

f.write(data)

f.close()

登录脚本

最后的登录脚本为


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43


# -*- coding:utf-8 -*-

import requests

import pytesseract

from PIL import Image

s = requests.session()

def change_to_string():

image = Image.open(‘captchatest.png‘)

code = pytesseract.image_to_string(image)

change={

‘O‘:‘0‘,

‘o‘:‘0‘,

‘I‘:‘1‘,

‘i‘:‘1‘,

‘L‘:‘1‘,

‘l‘:‘1‘,

‘Z‘:‘2‘,

‘z‘:‘2‘,

‘e‘:‘3‘,

‘a‘:‘4‘,

‘S‘:‘5‘,

‘s‘:‘5‘,

‘b‘:‘6‘,

‘T‘:‘7‘,

‘t‘:‘7‘,

‘q‘:‘9‘

};

for x in change:

code = code.replace(x,change[x])

return code

r = s.get(url = "http://example/login.php")

data = r.content

f = file("captchatest.png","wb")

f.write(data)

f.close()

# print change_to_string()

rr = s.post(url = "http://example/login.php" , data = {‘username‘:‘c014‘,‘password‘:‘c014‘,‘captcha‘:change_to_string()})

print "---------------------"

print rr.content

时间: 2024-09-29 10:34:52

Ubuntu上python识别验证码遇到的问题的相关文章

使用python识别验证码

公司的登录注册等操作有验证码,测试环境可以让开发屏蔽掉验证码,但是如果到线上的话就要想办法识别验证码或必过验证码了. 识别验证码主要分为三部分,一.对验证码进行二值化.二.将二值化后的图片分割.三.进行识别.理论上在识别之前有一个标准化的操作,是将图片进行旋转等操作,尽量将字符弄成一样的格式,方便识别,避免随进图片的差异. 用这个验证码作为例子:.下面是代码: 一.打开图片,将图片二值化. 图片是由RGB三个通道组成的,图片的验证码和他的干扰,比如点或横线等,RGB的阙值有很大的区别,我们可以使

python识别验证码

1.python识别验证码依赖 tesseract-ocr-setup-3.02.02.exe,所以首先需要安装 tesseract-ocr-setup-3.02.02.exe 2.然后安装pytesseract,通过pytesseract调用tesseract-ocr来识别验证码.pip install pytesseract 运行代码: import requestsfrom PIL import Imagefrom StringIO import StringIOimport pytess

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵. 读取图片 图片降噪 图片切割 图像文本输出 验证字符识别 验证码内的字符识别主要以机

关于利用python进行验证码识别的一些想法

转载:@小五义http://www.cnblogs.com/xiaowuyi 用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处理,然后利用字库特征匹配的方法,一类是图片处理后建立字符对应字典,还有一类是直接利用ocr模块进行识别.不管是用什么方法,都需要首先对图片进行处理,于是试着对下面的验证码进行分析.        一.图片处理 这个验证码中主要的影响因素是中间的曲线,首先考虑去掉图片中的曲线.考

python网络爬虫之如何识别验证码

有些网站的登录方式是验证码登录的方式,比如今天我们要测试的网站专利检索及分析. http://www.pss-system.gov.cn/sipopublicsearch/portal/uilogin-forwardLogin.shtml 登录此类网站的关键是识别其中的验证码.那么如何识别验证码呢.我们首先来看下网页源代码.在网页中,验证码的是通过下载一个图片得到的.图片的下载地址是src=/sipopublicsearch/portal/login-showPic.shtml 我们从实际的fi

ubuntu上用eclipse搭建java、python开发环境

上一篇文章讲到如何在windwos上用eclipse搭建java.python开发环境,这一讲将关注如何在ubuntu上实现搭建,本人使用虚拟机安装的ubuntu系统,系统版本为:14.04 lts 一.用eclipse + jdk搭建java开发环境 1.jdk官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 本人下载的是:jdk-8u77-linux-x64.tar.gz

ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2

ubuntu上跑python连接pg,报错  ImportError: No module named psycopg2 [email protected]:~# python /home/zxw/PGWriterTest_m.py Traceback (most recent call last): File "/home/zxw/PGWriterTest_m.py", line 4, in <module> import psycopg2 ImportError: No

python之验证码识别 特征向量提取和余弦相似性比较

0.目录 1.参考2.没事画个流程图3.完整代码4.改进方向 1.参考 https://en.wikipedia.org/wiki/Cosine_similarity https://zh.wikipedia.org/wiki/%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E6%80%A7 Cosine similarityGiven two vectors of attributes, A and B, the cosine similarity, cos(θ),

C#识别验证码技术-Tesseract

相信大家在开发一些程序会有识别图片上文字(即所谓的OCR)的需求,比如识别车牌.识别图片格式的商品价格.识别图片格式的邮箱地址等等,当然需求最多的还是识别验证码.如果要完成这些OCR的工作,需要你掌握图像处理.图像识别的知识,需要用到图形形态学.傅里叶变换.矩阵变换.贝叶斯决策等很多复杂的理论,这让绝大部分人都会望而却步. Tesseract这个开源项目的出现让我们普通人也可以涉足OCR的开发.Tesseract可以从图片中识别出文字内容,但不要以为Tesseract可以智能的识别出各种奇形怪状