惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
博客园 - 【当耐特】
I
InfoQ
腾讯CDC
人人都是产品经理
人人都是产品经理
H
Help Net Security
Y
Y Combinator Blog
B
Blog
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 叶小钗
D
Docker
博客园 - 聂微东
B
Blog RSS Feed
G
Google Developers Blog

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟
OCR应用一例
2018-03-15 · via 夜行人

晚上朋友发微信问能否帮忙折腾个东西: 明天需要整理出一份Word文档,大部分内容来自一篇公众号文章,文章内容由一张张图片组成,好几十张,字数很多

朋友的问题是:手动输入太累了,能否帮她用程序把图片内容转成文本,放在Word文档里

我看了下她发过来的公众号文章,内容确实很长,好在虽然用的是图片,字体还算端正。不过用电脑打开后看,字体比较小,不大清晰。

试着折腾了一下,大约花了半小时。记录下过程

思路

从图片中提取出文字内容是个OCR(Optical Character Recognition,光学字符识别)问题

首先想到的是自然是大名鼎鼎的Tesseract

我比较懒,想到现在云端工具那么多,何必为这个小任务多折腾,找个好用的云端工具,5分钟弄好继续看书

准备工作

微信中的图片是webp格式(可以通过chrome调试工具查看),我把整站保存后,资源文件夹中,图片有一堆,不过没带后缀,在ipython中写2行程序为所有文件,加上.webp后缀

捷径

之前在折腾冲顶大会外挂时,觉得百度OCR识别率还不错。为百度OCR做过简单的Python包装,想着用它来试试

当时的百度OCR接口只接收jpg图片,我们先使用ffmpeg吧webp图片转为jpg

ffmpeg -i 640\(1\).webp 01.jpg

ps: 640\(1\)是微信公众号文章保存后某个图片的默认名字

之后使用百度OCR工具对01.jpg做识别,效果很烂,可能是图片不够清晰或其中字数很多的缘故

我换了其他几个云端OCR工具,效果都不好

正好上个周末在用Tesseractopencv和树莓派帮朋友折腾个项目:目标是利用树莓派摄像头从身份证中提取信息,对tesseract还算熟悉,于是决定用Tesseract来折腾试试

环境安装

根据你自己的系统,按照官方wiki里的方式安装:tesseract Installation

我用的是mac,使用:brew install tesseract来安装

我的tesseract版本是

1
2
3
4
>>> tesseract -v
tesseract 3.05.01
 leptonica-1.75.3
  libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8

我们的目标是识别简体中文,如果你不打算自行训练模型的话,可以直接下载官方训练好的

进入到模型存放目录/usr/local/Cellar/tesseract/3.05.01/share/tessdata,根据系统和tesseract不同,做相应调整。如果你不知道目录在哪儿也没关系,往下读,待会儿在你实际运行命令,缺少相应语言模型的时候,系统会告诉你语言模型该放置的的目录

在这儿下载官方训练好的简体中文模型:wget https://github.com/tesseract-ocr/tessdata/raw/master/chi_sim.traineddata

更多语言模型可以参考tessdata

完成之后,我们就可以使用tesseract在本地提取图片中的文字了

使用tesseract

前边的准备工作中,我们已经从微信公众号下载下来的一堆webp图片转为一堆的jpg图片:01.jpg-020.jpg

我们先来试着将一张图片转为文本内容看看

tesseract -l chi_sim /tmp/01.jpg /tmp/output

ps:如果你没下载chi_sim(简体中文模型),系统会告诉你该在什么目录下放置这个模型

图片里边文字较多,执行识别操作需要一会儿时间,完成后,在本地生成一个output.txt文件,将文本内容对照原图,正确率在90%以上!出错的地方主要是容易识别为'

于是我们在ipython中简单写几行来遍历处理所有图片:

1
2
3
import subprocess
for i in range(1,21):
    subprocess.call("tesseract -l chi_sim 0{}.jpg   output_{}".format(i,i),shell=True)

ps: 如果想用更Pythonic的方式使用tesseract,你可以看看pytesseract

洗个澡回来,全部处理完毕,再写个和上边类似的几行代码,把所有output文件粘合起来,放到Word里,任务完成