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

推荐订阅源

V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
V
V2EX
IT之家
IT之家
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
D
Docker
S
Secure Thoughts
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
博客园_首页
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Security Archives - TechRepublic
Security Archives - TechRepublic
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
I
InfoQ
Last Week in AI
Last Week in AI
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
T
Troy Hunt's Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Scott Helme
Scott Helme
T
Tor Project blog
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
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 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事 blockly与结对编程
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里,任务完成