几行 Java 代码搞定图片提取文字功能
近日浏览网上一些图片提取文字的网站,觉得甚是有趣,花费半日也做了个在线图片识别程序,完成了两个技术方案的选择,一是 tesseract + Python flask的方案实现,二是 tesseract + Spring web 的技术解决方案,并简作论述,与君共勉。
一、tesseract-ocr介绍
ocr 含义是Optical Character Recognition,含义即视觉字符识别。而tesseract是该领域特别优秀开源的作品。
官方的tesseract定义:
OCR engine - libtesseract and a command line program - tesseract.
即tesseract包括一个视觉字符识别引擎libtesseract和命令行程序tesseract。
当前最新稳定版本是4.x.x基于LSTM,源码可从找到tesseract的GitHub: tesseract.找到。
输入(一张图片)
有用信息提取(比如一个图片上只有一个字,那其他留白的是无用,这个字上每个色素是有效的并且相关)
找出文字/线条
字符分类集
输入与分类集对比找出最接近的
输出识别结果
二、安装tesseract
第一步下载
下载合适的exe安装文件:
网址:https://digi.bib.uni-mannheim.de/tesseract/,下载完成后后装即可
第二步环境变量配置
在path变量中加入tesseract-ocr的安装路径
第三步安装成功检测
使用tesseract指令,显示如下:
Linux环境下载安装与上述类似
下载leptonica 和 tesseract两个包,解压安装,配置环境变量即可。网上很容易找到该安装包。
三、使用命令行
1.tesseract + 图片路径 + 保存结果名 + -l 语言集
示列: tesseract 1606150081.png 1606150081 -l chi_sim
2.tesseract + 图片路径 +stdout -l +语言集
示列: tesseract D:\company\ruigushop\spring-2s\test.png stdout -l chi_sim
有了上述之后就可以完成web图片识别程序的开发啦,废话不多说,直接上代码。
四、程序实现(Python)
程序设计思路:
上传图片 -> 保存 ->对上传的图片执行tesseract指令->获取识别结果
只有二十多行代码就实现了,so easy,以后网上看到图片识别程序再也不会感觉神奇了吧!
# coding=utf-8
from flask import Flask, request
import os
import datetime
import timeapp = Flask(__name__)def get_time_stamp():times = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')array = time.strptime(times, "%Y-%m-%d %H:%M:%S")time_stamp = int(time.mktime(array))return time_stamp@app.route('/image/extract', methods=['POST'])
def pure_rec():file = request.files.get('file')ts = str(get_time_stamp())up_path = os.path.join(ts + file.filename)file.save(up_path)cmd = "tesseract "+up_path+" " + ts + " -l chi_sim"print(cmd)os.system(cmd)with open(ts+".txt", 'r+', encoding="utf-8") as f:result = f.read()return resultif __name__ == '__main__':app.run(debug=True)
五、程序实现(Java)
不需要任何引入第三方jar包,搭建一个简单的 Springboot Web 项目就可以了,没有其他额外的依赖。
Controller:
@RestController
public class LiteralExtractController {@PostMapping("/image/extract")public String reg(@RequestParam("file")MultipartFile file) throws IOException {String result = "";String filename = file.getOriginalFilename();File save = new File(System.getProperty("user.dir")+"\\"+filename);if (!save.exists()){save.createNewFile();}file.transferTo(save);String cmd = String.format("tesseract %s stdout -l %s",System.getProperty("user.dir")+"\\"+filename,"chi_sim");result = cmd(cmd);return result;}public static String cmd(String cmd) {BufferedReader br = null;try {Process p = Runtime.getRuntime().exec(cmd);br = new BufferedReader(new InputStreamReader(p.getInputStream()));String line = null;StringBuilder sb = new StringBuilder();while ((line = br.readLine()) != null) {sb.append(line + "\n");}return sb.toString();} catch (Exception e) {e.printStackTrace();}finally{if (br != null){try {br.close();} catch (Exception e) {e.printStackTrace();}}}return null;}
}
六、实验测试
很简单二十多行代码就完成了,看看效果怎么样吧。
测试一图片:
测试一结果:
测试二图片:
测试二结果:
perfect,识别的很准确,第二个测试全部是英文字符的时候我们采用了中文训练的数据集,虽然也很好的识别了,但是速度会慢很多。
七、总结
图片识别在当今网络技术领域是非常热门的一块,而这次完成的这个程序完全是依赖别人开源框架来完成了这个技术实现,在应用层面这是成功的,但是本质上并没有实际算法,技术核心上的东西,如果只关心应用层开发上述解决了我们计算机在规则字符识别上的问题。
上述代码中基本没有难点,直接复制即可使用。此外,tesseract作为一款优秀的开源字符识别软件,但它也不是万能的,tesseract只能识别规则的字符,对于一些艺术字,抽象字它是无能为力的。
来源:blog.csdn.net/weixin_44671737/article/details/110000864
#投 稿 通 道#
让你的博客被更多人看到
如果你在 CSDN、博客园、掘金等平台有写技术博客的习惯,想让自己的原创博客被更多人看到,可以来 Java后端 投稿。
Java后端 鼓励读者投稿个人技术博客、面试经验、教程。不管是入门的图文教程、还是热门技术讲解,只要你喜欢写东西,我们欢迎你来投稿。
???? 稿件基本要求:
• 文章确系个人原创作品,如果在其他非公众号渠道有过发表也可以,只要是个人原创即可。
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰、语句通顺。
• 如果被采纳的原创稿件,我们将提供稿费以及个人影响力曝光,具体依据文章阅读量和质量结算稿费。
???? 投稿通道:
• 投稿请联系下方微信,备注:原创投稿
△长按添加 Java后端 小编
几行 Java 代码搞定图片提取文字功能相关推荐
- c语言将图像转换成字符画,25行Java代码将普通图片转换为字符画图片和文本的实现...
本文主要介绍了25行Java代码将普通图片转换为字符画图片和文本的实现,分享给大家,具体如下: 原图 生成字符画文本(像素转换字符显示后,打开字符画显示相当于原图的好几倍大,不要用记事本打开,建议用n ...
- 图片提取文字功能很神奇?Java几行代码搞定它!
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_44671737/ article/details/110000864 摘要 近日浏 ...
- 图片提取文字功能很神奇?Java几行代码搞定它
摘要 近日浏览网上一些图片提取文字的网站,觉得甚是有趣,花费半日也做了个在线图片识别程序,完成了两个技术方案的选择,一是tesseract+python flask的方案实现,二是tesseract+ ...
- 零基础如何用 15 行 Python 代码搞定网易云热门歌单?
健身.吃饭.敲代码:等车.撸猫.下午茶--若能佐以合适的音乐当"配餐",总是惬意非常.本文就将带你爬一爬网易云的那些热门歌单! 作者 | 上海小胖 责编 | 仲培艺 心情好或心情坏 ...
- 分享4个方法,手机就能搞定图片转文字提取
在工作中,有时候会遇到需要将一些文件发送给其他人的情况,但是这些文件是图片格式,如果对方需要编辑或者复制其中的内容就比较麻烦了.为了解决这个问题,我们可以使用一些工具将图片转换成文字,方便编辑和复制. ...
- 再见PDF提取收费!我用100行Python代码搞定!
点上方"菜鸟学Python",选择"星标" 第471篇原创干货,第一时间送达 大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将P ...
- 再见PDF提取收费!我用100行Python代码搞定!去你的收费!
大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将PDF文件中的文字.图片和表格数据提取出来的问题.能够对PDF文件中的文字.表格等数据进行编辑,网上现存的PDF提取的软 ...
- 60行Python代码搞定,王者荣耀雷达图!
点击上方"菜鸟学Python",选择"星标"公众号 超级无敌干货第一时间推给你!!! 现有以下表格,我需要画成第二张图中的雷达图(类似fifa足球.王者荣耀里面 ...
- 十几行程序代码搞定 Master-Detail GridView(内含子 GridView)
摘要在网络上看到很多 GridView 内含子 GridView 的范例,虽然方法不同不过程序代码都有点小复杂,想说难道没有更简单易懂的方法吗? 在此文章中将用十几行的程序代码,就教你快速学会并搞定这 ...
最新文章
- java写类似百度统计_资讯 | 与百度统计功能类似的产品—360分析系统
- Android数据存储之文件存储(瞬时数据的存储与读取)项目已上传GitHub
- 论文写作常见错误(1)
- SAP odata消费失败的故障排错
- python 多次读取文件的细节
- gbase 8s oracle,GBase8s 查看数据库表空间信息
- 英语笔记:词组句子:0812
- c++-虚函数与多态
- nacos当配置中心读取其他配置文件_SpringBoot+Nacos实现配置中心
- Learn OpenGL(三)——顶点着色器(Vertext Shader)
- mysql5.5默认引擎,在MySQL5.5以上系统中,默认的存储引擎是( )。
- linux解压文件卡住,linux停解压文件
- 安装时间大于30秒_辟谣│有氧运动30分钟以上才会燃烧脂肪?你被这个观点骗了多久?...
- 30行python代码实现豆瓣电影排行爬取
- 计算机网络课程论文:《浅谈交换机、路由器》
- 2021-07-19支付宝扫码点餐推广怎么做(干货来了)
- 使用Unity动作融合概述
- 介绍一个产品的思维导图_原来产品经理都是这样用思维导图的!
- 陈奕迅-浮夸-国语谐音
- java正则提取字符串中的符号汉字数字字母