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([tmp_image,"#{tmp_file.to_s}.txt"])
  #这里截获了所有异常!
  rescue
    raise RTesseract::ConversionError
  end

 2、结果不准

  可以适当调整图片的尺寸和灰度值

你可能感兴趣的:(Ruby)