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的工作模式如上图所示。假设现在有一个图片输入,整个执行流程为:

  1. 输入(一张图片)

  2. 有用信息提取(比如一个图片上只有一个字,那其他留白的是无用,这个字上每个色素是有效的并且相关)

  3. 找出文字/线条

  4. 字符分类集

  5. 输入与分类集对比找出最接近的

  6. 输出识别结果

二、安装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 time

app = 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 result

if name == ‘main’:

app.run(debug=True)

五、程序实现(Java)


不需要任何引入第三方jar包,搭建一个简单的springboot web项目就可以了,没有其他额外的依赖。

Spring Boot 基础就不介绍了,推荐下这个实战教程: https://www.javastack.cn/categories/Spring-Boot/

Controller:

package com.lbh.web.controller;

/*

  • Copyright@lbhbinhao@163.com

  • Author:liubinhao

  • Date:2020/11/23

  • ++++ ______ @author liubinhao ______ ______

  • +++/ /| / /| / /|

  • +// | // | /_____/ |

  • | | | | | | | | |

  • | | | | | |________| | |

  • | | | | | / | | |

  • | | | | |/___________| | |

  • | | |___________________ | |____________| | |

  • | | / / | | | | | | |

  • | |/ _________________/ / | | / | | /

  • |_________________________|/b ||/ ||/

*/

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;

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
1Z2dmfrW-1715703716608)]

[外链图片转存中…(img-MlZXZR4F-1715703716609)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值