教你实现一个提取图片上文字的Java项目!
来源:https://mp.weixin.qq.com/s/FZy3Ppm_y6qTK_Lz65WlvQ
摘要
近日浏览网上一些图片提取文字的网站,觉得甚是有趣,花费半日也做了个在线图片识别程序,完成了两个技术方案的选择,一是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的工作模式如上图所示。假设现在有一个图片输入,整个执行流程为:
输入(一张图片)
有用信息提取(比如一个图片上只有一个字,那其他留白的是无用,这个字上每个色素是有效的并且相关)
找出文字/线条
字符分类集
输入与分类集对比找出最接近的
输出识别结果
二、安装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:
package com.lbh.web.controller;/** Copyright@lbhbinhao@163.com* Author:liubinhao* Date:2020/11/23* @author liubinhao*/
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;@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只能识别规则的字符,对于一些艺术字,抽象字它是无能为力的。
PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。
刚刚整理好了的第五版《Java大厂面试题》,而且已经分类 25份 PDF,累计 2098页!整理的面试题,内容列表互联网大厂面试题,怎么领取?注意,不要乱回复 (一定要回复 面试题 )否则获取不了
点分享
点收藏
点点赞
点在看
教你实现一个提取图片上文字的Java项目!相关推荐
- iPhone提取图片上文字的方法
随着互联网和多媒体的发展,现在很多的文件都会保存为电子档的格式,那将图片文字转换成文本也是我们经常遇到的问题,很多人都是打字录入,其实有更加简单的方法!下面就教大家用iPhone将纸质文档转换文本的方 ...
- 提取图片上文字的两种方法
目前我整理出两种方法: 第一种是利用onenote 插入照片-->点击图片右键,选择"复制图片中的文本"选项-->在当前onenote的空白处选择粘贴就好了(在其他地方 ...
- 爬虫requests如何提取图片_如何提取图片上的文字(办公技巧)
是夜,公寓里,一道黑影闪过窗前,对面楼顶传来一声凄厉的猫叫声. 王美丽一个机灵,目中闪过一丝恐惧. 她面前的电脑里,正在播放<午夜凶铃>. 阴森恐怖的配音,让她全身发冷,感觉后脊梁有一股凉 ...
- android 长按 秒事件_原来手机长按2秒,能开启5个实用功能,一键提取图片上的文字...
分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园! 随着科技的发展,手机上的功能越来越多,而且还非常实用,我也是今天才知道,原来手机长按2秒,能开启5个实用功能,感兴趣的朋友可以了 ...
- 如何快速识别提取图片上的文字
我们在日常工作中,我们经常会遇到将图片上文字转换成Word文档这样的情况,要知道, 图片上的文字是不能直接复制的,这是一件令人头疼的一件事情.那么要怎样才能快速的 提取这些图片的文字呢? 快速识别提取 ...
- 怎么提取图片上的文字?两款高效识别软件,你值得拥有!
怎么提取图片上的文字?前段时间,小编在经过一个小伙伴的座位时,发现她正一边对着图片,一边打字.当时第一反应是:不是吧,阿sir,都2021年了,不会还有人手动把图片中的文字提取出来吧.不是说这样的方式 ...
- 怎样提取图片上的文字?
我们在学习和工作中,难免会出现想要整理一些学习资料.工作资料等,而这些文件中难免会遇到图片上有文字之类的,这种通常是无法快速复制粘贴的.总不能逐字逐句抄录下来这也太费时间了.这时如果有个可以识别图片中 ...
- 屏幕文字识别_手机长按屏幕2秒,能开启4个实用功能,一键提取图片上的文字...
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以免费收到最新内容了.每天都有分享,完全是免费订阅,请放心关注.内容来源网络,侵权联系删除. ...
- Mac上如何提取图片上的文字?
当遇到一些网站的文案只能阅读不能复制的情况时,当需要将纸质文件转为可编辑的电子文档时,我们可以通过截图轻松快速的提取文字.本篇文章小编就教大家如何在Mac上提取图片上的文字. QQ识别屏幕文字 用了这 ...
最新文章
- Django 权限管理-后台根据用户权限动态生成菜单
- 1346. 检查整数及其两倍数是否存在 golang
- android+放大缩小图片+有jar嘛,Android相册支持点击放大图片,滑动切换图片,手势放大缩小...
- Java利用二维数组判断节假日_《剑指offer》面试题3 二维数组中的查找 Java版
- C#数据结构-双链表
- torch.cat() 函数用法
- CDH中hue使用oozie调度的文件注意事项
- windows Windows Defender彻底删除屏蔽后台启动占用内存 win10防火墙 windows10防火墙
- 入门 ggplot2 的图形语法
- 从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践
- 数据-第11课-双向链表
- Mxnet入门--第3篇
- 【TeachNLP】文本数据处理-词表获取
- 什么是恶意软件?病毒,蠕虫,特洛伊木马等有害程序
- iOS 强制屏幕实现旋转功能,超级简单。
- Xtrabackup 数据备份工具使用方法
- Android版本手机怎么截屏,安卓手机怎么截屏的4种方法
- javascript学习网站
- 从内网windows2008服务器复制文件到本地慢,Windows Server 2008网上邻居打开慢的解决...
- 中学学生成绩管理系统
热门文章
- 计算机网络八校联考,八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难?...
- 计算机学业水平测试基础知识,全国通用信息技术学业水平测试必考知识要点(一)...
- t3软件怎么生成报表_用友T3软件在软件财务报表模块生成资产负债表和利润表,保存到桌面以后,没办法打开,如何处理?...
- Windows优化大师 V7.7
- Epson机械手程序开发(5)重要指令讲解
- 【MySQL学习笔记】第17章 PHP脚本和HTML标签
- python写文字冒险游戏_木兰语言 0.0.15.1:继续改写 Python 冒险游戏;引用包路径规则小结...
- vue实战,前端如何调用手机录音功能
- python计算菜单消费总额字典_python之数据运算、字典、列表
- 嘘!wemall三级分销的最新秘密!