imagemagick图片识别技术&数据抓取(转自:http://michael-roshen.iteye.com/blog/1982817)

来源:互联网 发布:淘宝童装店铺招牌图片 编辑:程序博客网 时间:2024/06/06 10:17

安装:
sudo apt-get install imagemagick

 

ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的 需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,即可以通过命令行 进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包, 部分支持SVG。现在,ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。

ImageMagick 是一个用来创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线, 多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。支持大多数的操作系统。


检测是否支持指定格式 identify -list format | grep PNG

sudo apt-get install tesseract-ocr

OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程。

Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后经由Google进行改进,消除bug,优化,重新发布


gem install mini_magick

mini_magick 是用ruby对ImageMagick命令的封装,可以这样简单的使用

 

image = MiniMagick::Image.open("input.jpg")image.resize "100x100"image.write  "output.jpg"
image = MiniMagick::Image.open("http://www.google.com/images/logos/logo.png")image.resize "5x5"image.format "gif"image.write "localcopy.gif"

https://github.com/minimagick/minimagick

gem install rtesseract

rtesseract对了tesseract-ocr进行了封装

识别验证码:

RTesseract.new(img.path).to_s

 

在 ubuntu12.04上安装如果出现如下问题,请安装 libmagickwand-dev

sudo apt-get install libmagickwand-dev


zhaol-a@ubuntu:~/gcj_project$ gem install rtesseract
/usr/share/ruby-rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
Building native extensions.  This could take a while...
ERROR:  Error installing rtesseract:
    ERROR: Failed to build gem native extension.

        /usr/share/ruby-rvm/rubies/ruby-1.9.3-p392/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config in /usr/share/ruby-rvm/gems/ruby-1.9.3-p392/bin:/usr/share/ruby-rvm/gems/ruby-1.9.3-p392@global/bin:/usr/share/ruby-rvm/rubies/ruby-1.9.3-p392/bin:/usr/share/ruby-rvm/gems/ruby-1.9.3-p392/bin:/usr/share/ruby-rvm/gems/ruby-1.9.3-p392@global/bin:/usr/share/ruby-rvm/rubies/ruby-1.9.3-p392/bin:/usr/share/ruby-rvm/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/share/ruby-rvm/rubies/ruby-1.9.3-p392/bin/ruby

使用mechanize,nokogiri进行数据抓取,验证码识别的例子:

Ruby代码  收藏代码
  1. #encoding: utf-8  
  2. require 'mechanize'  
  3. require 'nokogiri'  
  4. require 'spreadsheet'  
  5. require 'rtesseract'  
  6. require 'mini_magick'  
  7. require 'open-uri'  
  8. require 'uri'  
  9. require 'iconv'  
  10. require 'active_support/all'  
  11.   
  12. #调整图片的大小来提高图片的识别准确度  
  13. def parse_img_to_str(img_url)  
  14.   img = MiniMagick::Image.open(img_url)  
  15.   img.resize '200%x200%' # 放大  
  16.   img.colorspace("GRAY"# 灰度化  
  17.   img.monochrome # 去色  
  18.   str = RTesseract.new(img.path).to_s # 识别  
  19.   File.unlink(img.path) # 删除临时文件  
  20.   if str.nil?  
  21.     return nil  
  22.   else  
  23.     return str.strip.to_f  
  24.   end  
  25. end  
  26.   
  27. #使用异常处理,可以减少因为网络延迟导致timeout的问题,但是不能完全避免  
  28. #分析请求的url, 和参数  
  29. def get_json_data(agent, url, params)  
  30.   begin  
  31.     response = agent.post(url, params)  
  32.     json_data  = JSON.parse(response.body)  
  33.     return json_data  
  34.   rescue  
  35.    retry  # restart from beginning  
  36.  end  
  37. end  
  38.   
  39. "waiting................."   
  40. agent = Mechanize.new  
  41. agent.open_timeout = 15  
  42. file_path = File.dirname(__FILE__)user  
  43. #用户登陆要抓取的网站后,用firefox导出cookies信息到cookies.txt  
  44. cookies_file_path = "/home/username/project/cookies.txt"  
  45. #导入cookie信息,跳过登陆  
  46. agent.cookie_jar.load_cookiestxt(cookies_file_path)  
  47.   
  48. #抓取年份信息的例子  
  49. title_params = {"area" => area,"province" => "北京"}  
  50. years_info = get_json_data(agent, gov_mat_ttile_url, title_params)["result"
0 0
原创粉丝点击