博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Ruby on Rails项目中用tesseract ocr读取图片上文字
阅读量:6833 次
发布时间:2019-06-26

本文共 2567 字,大约阅读时间需要 8 分钟。

hot3.png

最近公司要新做一个项目,需要用到从图片上识别文字,刚开始做demo时用的是百度OCR API(  ),但考虑到项目上线后这个功能的使用次数和处理速度,最后决定找一个开源项目来实现该功能。通过比较,最后选择google的tesseract-ocr。

整个功能的实现环境:ubuntu 14.04 + Ruby on Rails,整个项目的搭建步骤如下:

1,在ubuntu上安装imagemagick 和 tesseract-ocr
sudo apt-get install imagemagicksudo apt-get install libmagickwand-devsudo apt-get install tesseract-ocrsudo apt-get install tesseract-ocr-chi-sim  #简体中文包//下面这个gimagereader是网上同学说装一下,但本人目前不知道这个有什么用sudo add-apt-repository ppa:sandromani/gimagereadersudo apt-get updatesudo apt-get install gimagereader

我们先用tesseract命令行来识别一下图片

doorder@ubuntu-doorder:~/workspace/image_kit/public/cuts$ tesseract 1.png image_1Tesseract Open Source OCR Engine v3.03 with Leptonicadoorder@ubuntu-doorder:~/workspace/image_kit/public/cuts$ tesseract -l chi_sim 10.jpg image_10Tesseract Open Source OCR Engine v3.03 with Leptonica

我们看一下生成的image_1.txt和image_10.txt发现两个图片都识别成功了。这里需要注意的是识别中文时我们需要通过参数-l指定言语为简体中文,所以确保在此之前你已安装了tesseract-ocr-chi-sim,验证tesseract-ocr-chi-sim是否成功安装可以通过查看/usr/share/tesseract-ocr/tessdata/chi_sim.traineddata是否存在。

2,安装ruby gem

(本人使用的ruby版本是2.2,rails版本是4.2.4),因为用到的gem文件已经写在rails的Gemfile里了所以只需要执行bundle install就可以。主要用到的gem如下

gem "rmagick"gem "rtesseract"
3,测试tesseract-ocr,先来一个英文识别
img_path = File.join(Rails.root, "public/cuts/1.png")rt_img = RTesseract.new(img_path)rt_img.to_s

不出所料,程序识别出来了1.png文件里的字是“Hello, World"。

4,再来试一个中文的
img_path = File.join(Rails.root, "public/cuts/10.jpg")rt_img = RTesseract.new(img_path, :lang => "chi_sim")rt_img.to_s

很好,这个也识别出来了。识别中文时需要指定lang参数为chi_sim

5,对比一下tesseract-ocr和百度OCR

接下来我们对比一下tesseract-ocr和百度OCR识别结果,百度OCR识别我们用的是baidu_ocr这个gem。

[    ["1.png", "Hello, World"],    ["2.png", "AutoprefiXer required for Less/Sass"],    ["10.jpg", "战略合作伙伴"],    ["m8.jpg", "产品系列"],    ["m12.jpg", "精品工程"],    ["m14.jpg", "效果体验"],    ["m18.jpg", "加盟合作"]  ].each do |arr_item|    img_path = File.join(Rails.root, "public/cuts/#{arr_item[0]}")    if File.exist?(img_path)      rt_img = RTesseract.new(img_path, :lang => "chi_sim")      rt_text = rt_img.to_s      BaiduOcr.init_baidu_ocr(apikey: "66a70da7aeb00b24e2a3e73eb6ecf1e1",                              image: img_path,                              imagetype: 1)      baidu_text = BaiduOcr.recognize rescue baidu_text = "读取失败"      puts "#{arr_item[0]} real text: #{arr_item[1]}, baidu result: #{baidu_text}, Tesseract result: #{rt_text}"    else      puts "#{arr_item[0]} is not present"    end  end

通过对比发现两个的识别率基本差不多,但发现之前tesseract-ocr能准确识别出来1.png上的文字,但通过指定lang是chi_sim后却识别出来的结果不对。所以我们在使用tesseract-ocr时如果知道图片上的文字语言,最好指定成正确的语言参数。

转载于:https://my.oschina.net/laifuzi/blog/541339

你可能感兴趣的文章
FlipViewPager 对item实现左右对折滑动翻页效果《IT蓝豹》
查看>>
Leetcode日记5
查看>>
时间:2014年4月11日22:15:47 session 概念
查看>>
我的友情链接
查看>>
教育“优先”,落实才是关键
查看>>
传统IT大佬们,路在何方?
查看>>
基础练习
查看>>
shell学习笔记 (9.3)
查看>>
用chrome在电脑上模拟微信内置浏览器
查看>>
PHP获取常用时间的总结
查看>>
设计模式6大原则:里氏置换原则
查看>>
hbase0.94.14伪分布式安装
查看>>
Debug记录:vCenter6.5突然不能访问并报错“503 Service Unavailable”
查看>>
自动导出oracle的数据
查看>>
顺序表实现的源码
查看>>
我的友情链接
查看>>
iOS调用系统摄像头和相册
查看>>
mysql文件导入办法(直接copy数据库文件)
查看>>
【二叉树】线索化二叉树
查看>>
Office365混合部署之用户权限(角色)分配
查看>>