R+OCR︱借助tesseract包实现图片文本提取功能
2016年11月,Jeroen Ooms在CRAN发布了tesseract包,实现了R语言对简单图片的文本提取、分析功能。 利用开源OCR引擎进行图片处理,目前可以识别超过100种语言,R语言可以借助tesseract调用OCR引擎进行相应操作。 从图像中提取文本时,需要提前安装训练数据(地址:https://github.com/tesseract-ocr/tessdata),系统默认为英语训练数据。在使用过程中,最好使用高对比度、低噪声、水平格式文本的图片。
转载于公众号R语言中文社区
一.核心函数介绍
ocr(image, engine = tesseract("eng"))
tesseract(language = NULL, datapath = NULL, options = NULL,cache = TRUE)
参数: image 图片文件路径,支持png、tiff、jpeg等格式 engine tesseract引擎,通过函数tesseract()来创建 language 训练数据的语言字符简写,默认为英语(eng) datapath 训练数据的路径,模型为系统库 options tesseract引擎的相关参数,默认为NULL,可查看文档 cache 可以使用训练数据的缓存版本,默认为TRUE
3.tesseract_download(lang, datapath = NULL, progress = TRUE) #下载训练数据 4.tesseract_info() #查看训练数据路径、可使用数据的语言格式、当前版本
参数: lang 训练数据的语言格式简写,比如英语就是eng,可查看tessdata repository. datapath 训练数据下载路径地址 progress 下载中,是否要输出下载进程,默认为输出
二.案例演示
1.环境配置
install.packages('tesseract')
library('tesseract')
setwd('e:/tess') # 设定工作路径
2.利用tesseract包提取英文文本
tesseract_info() #查看当前可用语言格式
text_1<-ocr('e:/tess/eng_1.jpg', engine = tesseract("eng"))
cat(text_1) #输出结果
3. 利用tesseract包提取中文文本
tesseract_info() #先查看是否有中文训练数据,如果没有,需要下载安装
tesseract_download("chi_tra")
tesseract_download("chi_sim") #chi_sim和chi_tra均是中文训练数据
text<-ocr('e:/tess/chi_1.jpg', engine = tesseract("chi_sim"))
4. 批量提取图片文本内容
temp<-list.files(pattern='*.jpg') #处理默认路径下jpg格式图片
text<-ocr(temp, engine = tesseract("chi_tra"))
cat(text)
注释:在使用图片批量处理方法时,需要图片格式一致!
三.文章小结
目前R软件通过tesseract包调用OCR引擎提取图片文本信息,对图片文本格式、噪声、对比度要求比较高,同时在多种语言(简体中文、英文等)混合时,提取准确度比较低,目前可以借助tesseract包实现简单图片的文本提取,同时结合jiebaR包、tm包进行文本分析与挖掘。 Github:https://github.com/tesseract-ocr
.
延伸一:实践过程中乱码较多
[1] "L】 = ′,n` /′ /` _ …翦n"n酐 敬n〖 》 ' ` …n`/n鳙 Z … 蓁L `n仗 ′ `) 犍 En璧荸「翼 〈v胴 ′ 量n" 麸 ` n嵩支 ′′n`=…荃′′熹立′n_ 二鼻′婶 二: 冀三熹′ “ "un~z(…毫屋喹墓莫重…了篡=`′′_-._′′ …` ′′_〉:、.” c, ) `z 『n一.〈 脲 _ 『 .n. _ 霆) 映忧愁郁渤瓜nWe|bo.Com/u/6069986291nn"
这是一张图的输出,乱码这么多? 这是R问题,还是算法的问题? 从笔者在python那边实践来看,还是一样的不好,需要自己训练自己词库才能更好的识别,所以这也只是简单的应用了,中文还是需要自己训练一些文件才能进行识别。
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试
- 关于order by中的数据排序(r4笔记第6天)
- 深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)
- Markdown语法讲解及MWeb使用教程
- 通过Linu命令实现屏幕录制和回放(r4笔记第5天)
- 用keras对国产剧评论文本的情感进行预测
- python常用可视化技巧
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM
- 通过java程序抽取日志中的sql语句(r4笔记第4天)
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建
- position:sticky的兼容性尝试
- Python爬虫股票评论,snowNLP简单分析股民用户情绪
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十一)SVN服务器进阶
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 动手写简单的嵌入式操作系统一
- LeetCode 92 | 大公司常考的面试题,翻转链表当中指定部分
- 快速学习-Apollo从入门到精通
- dotnet 使用 SourceLink 将 NuGet 链接源代码到 GitHub 等仓库
- 嵌入式linux之go语言开发(八)存储模块的封装(一)
- QGIS制图中面积小的区域不显示注记
- linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)
- 满眼只有React和Vue,却对前端数据层几乎一无所知
- 嵌入式linux之go语言开发(八)存储模块的封装(二)
- 招商银行校招题二
- 小程序工程化系列(一):文件依赖分析
- ucgui在windows上的移植,及为go语言打造简易跨平台GUI的想法
- React setState 是异步执行还是同步执行?
- sm2,sm3,sm4国密算法的纯c语言版本,使用于任何嵌入式平台
- sm2国密算法的纯c语言版本,使用于单片机平台(静态内存分配)