Mac下ruby+RTesseract获取图片验证码
Tesseract是Ray Smith于1985到1995年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。该项目目前支持Windows、Linux和Mac OS等主流平台。但作为一个引擎,它只提供核心功能,没有界面。
RTesseract是Tesseract的ruby封装调用,其内部原理是先用mini_magick将图片转换为tif格式,再执行命令行调用Tesseract软件返回最终解析的字符串。
一、安装ImageMagick
sudo brew install imagemagick
二、安装Leptionica
下载地址:http://www.leptonica.org/download.html
tar zxvf leptonica-1.69.tar.gz
cd leptonica-1.69
./configure
make
sudo make install
三、安装tesseract-ocr
下载地址:http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.01.tar.gz
tar zxvf tesseract-3.01.tar.gz
cd tesseract-3.01
./autogen.sh
./configure
make
sudo make install
四、安装MiniMagick
gem install mini_magick
五、调用
# -*- encoding: utf-8 -*-
require 'rtesseract'
require 'mini_magick'
def parse_price(price_url)
img = MiniMagick::Image.open(price_url)
img.resize '200x100' # 放大
img.colorspace("GRAY") # 灰度化
img.monochrome # 去色
str = RTesseract.new(img.path).to_s # 识别
File.unlink(img.path)# 删除临时文件
if str.nil?
puts price_url
else
price = str.strip.sub(/Y/,'').to_f
end
end
调用:
parse_price('http://jprice.360buyimg.com/price/gp723049-1-1-1.png')
# => 169999.0
六、遇到的困难
1、识别的时候可能报异常:
RTesseract::ConversionError: RTesseract::ConversionError
追查到RTesseract插件内部发现里面抛出异常的位置,作者没把实际错误返回回来真可悲!
#Convert image to string
def convert
generate_uid
tmp_file= Pathname.new(Dir::tmpdir).join("#{@uid}_#{@source.basename}")
tmp_image = image_to_tiff
#这里生成了命令行命令,格式类似:tesseract xxx.tif xxx.jpg
`#{@command} "#{tmp_image}" "#{tmp_file.to_s}" #{lang} #{psm} #{config_file} #{clear_console_output}`
@value = File.read("#{tmp_file.to_s}.txt").to_s
@uid = nil
remove_file()
#这里截获了所有异常!
rescue
raise RTesseract::ConversionError
end
2、结果不准
可以适当调整图片的尺寸和灰度值
页:
[1]