需求:利用java完成图像文字识别和翻译,实现拍照翻译的功能

​ 可拆分为以下两个小的功能逐一完成:

(1)实现图像文字识别

(2)将识别出来的文字进行翻译。

1.实现图像文字识别

​ 利用Tess4J进行图像文字识别

1.1 为方便集成tess4j的jar包,我们先创建一个maven项目,将所需jar包引入pom.xml

        <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.4.0</version></dependency>

1.2 我们还需要下载语言数据包,进入此仓库https://github.com/tesseract-ocr/tessdata将常用的chi_sim.traineddata 和 eng.traineddata语言包下载下来,存放在一个文件夹中,后面图像文字识别需要用到。我存放在F:\IDEA1\xiaochengxu\src\main\resources\lang

1.3 编写java代码调用Tess4J和语言包进行图像文字识别。

 //图片识别 传一个图片和语言(eng/chi_sim)@PostMapping("/tess4J")public String Tess4J(@RequestParam("img") MultipartFile img,String language) throws Exception {// 语言库位置(修改为跟自己上一步下载的语言库文件夹的路径)String lagnguagePath = "F:\\IDEA1\\xiaochengxu\\src\\main\\resources\\lang";ITesseract instance = new Tesseract();//设置训练库的位置instance.setDatapath(lagnguagePath);//chi_sim简体中文, eng英文instance.setLanguage(language); //chi_simString result = null;try {long startTime = System.currentTimeMillis();result =  instance.doOCR(MultipartFileToFile.multipartFileToFile(img)); //MultipartFileToFile类在下方long endTime = System.currentTimeMillis();System.out.println("Time is:" + (endTime - startTime) + " 毫秒");} catch (TesseractException e) {e.printStackTrace();}System.out.println("result: ");System.out.println(result);return result;}
//MultipartFile转成file
public class MultipartFileToFile {public static File multipartFileToFile(MultipartFile file) throws Exception {File toFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {InputStream ins = null;ins = file.getInputStream();toFile = new File(file.getOriginalFilename());inputStreamToFile(ins, toFile);ins.close();}return toFile;}//获取流文件private static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();} catch (Exception e) {e.printStackTrace();}}
}

1.4 此时我们已经写好了一个接口,将图片语言(英文eng/中文chi_sim)两个参数传入此接口就能返回图片的文字。配置一下swagger更方便测试。配置swagger教程http://www.gnnu.work/comm/articledetail?articleId=NTY%3D

2.将识别出来的文字进行翻译

接口写好了,这里使用微信小程序作为前端调用此接口。

整体思路就是:在微信小程序中使用wx.chooseImage唤起手机图片系统,上传一张图片,通过js发一个请求,将图片传给第一步写好的后端,后端对图片进行识别,后端将识别后的文字返回给前端,前端再调用翻译的接口将文字翻译即可。

小程序端代码如下:使用了vant https://youzan.github.io/vant-weapp/#/tab

html
<van-tabs  active="{{activename}}" bind:change="tabonChange" ><van-tab title="1.拍照识别" name="1" ><view style="display:flex;align-items:center;"><text style="font-weight:700;margin-right:10px">识别成什么语言:</text><van-dropdown-menu><van-dropdown-item bind:change="changeorclanguage" value="{{ orclanguage }}" options="{{ option1 }}" /></van-dropdown-menu></view><button style="" type="primary" disabled="{{disabled1}}" bindtap="uploadImg">{{disabled1?"正在识别中,请稍等":"拍照"}}</button><!-- {{orcString}} --></van-tab><van-tab title="2.翻译" name="2"><view style="display:flex;align-items:center;"><text style="font-weight:700;margin-right:10px">翻译成什么语言:</text><van-dropdown-menu><van-dropdown-item bind:change="changetranslatelanguage" value="{{ translatelanguage }}" options="{{ option2 }}" /></van-dropdown-menu></view><button  type="primary" bindtap="translate">翻译</button><!-- {{translatelanguage}} --><van-cell-group><van-fieldmodel:value="{{ orcString }}"placeholder="请输入需要翻译的内容"type="textarea"autosize/></van-cell-group><!-- <textarea  model:value="{{orcString}}" style="margin-top:10px;border:2px solid #ccc;width:100%"  /> --></van-tab><van-tab title="3.结果" name="3"><view style="display:flex;align-items:center;"><text style="font-weight:700;margin-right:10px;margin-bootom:1px solid #ccc"> 是否显示原文:</text><van-switch checked="{{ showorigin }}" bind:change="changetranslateResutl" size="24px" /></view><view class="adviseCon" wx:for="{{translateResutl}}" wx:for-item="item" wx:for-index="idx" wx:key="idx"><view ><view wx:if="{{showorigin}}"  style=";margin-bottom:5px" >{{item.src}}</view><view style="color:red;margin-bottom:5px" >{{item.dst}}</view></view></view></van-tab>
</van-tabs>
// pages/imgtranslate/imgtranslate.js
Page({/*** 页面的初始数据*/data: {orcString:'请输入', //识别图像的结果activename:'1', //当前的disabled1:false, //是否禁用第一个按钮option1: [ //识图的语言{ text: '中文', value: 'chi_sim' },{ text: '英文', value: 'eng' },],orclanguage:'chi_sim', //识别的目标语言option2: [ //翻译的语言{ text: '自动', value: 'auto' },{ text: '英文', value: 'en' },{ text: '中文', value: 'zh' },],translatelanguage:'auto', //翻译的语言translateResutl:[] ,//翻译后的结果showorigin:true, //在翻译后是否显示原文对比},//选择识别的语言changeorclanguage:function(e){// console.log(e.detail)this.setData({orclanguage:e.detail,}) },//选择翻译的语言changetranslatelanguage:function(e){// console.log(e.detail)this.setData({translatelanguage:e.detail,}) },changetranslateResutl:function(e){// console.log(e.detail)this.setData({showorigin:e.detail,}) },tabonChange:function(e){console.log(e.detail)this.setData({activename:e.detail.name,}) },//识别图片uploadImg:function(){var _this = this;wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success:  (res)=> {_this.setData({disabled1:true,}) // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片var that = _this;var tempFilePaths = res.tempFilePathswx.uploadFile({url: 'http://127.0.0.1:8080/tess4J?language='+that.data.orclanguage,filePath: tempFilePaths[0],name: 'img',success: function(res){var data = res.data;console.log(res)that.setData({orcString : res.data,activename: "2",disabled1:false,}) },fail:function(){wx.showToast({ title: '服务器错误!', icon: 'none', duration: 2500 })that.setData({disabled1:false,}) }})},fail:function(){wx.showToast({ title: '是你自己放弃的', icon: 'none', duration: 2500 })_this.setData({disabled1:false,}) }})},translate:function(){if(this.data.orcString == ""){wx.showToast({title: '什么都没有翻译个毛线,下方可以输入',icon: 'none',duration: 5500})return}var that = this;that.setData({translateResutl:[],activename: "3",}) // console.log(this.data.orcString)wx.request({url: 'http://127.0.0.1:8080/bdtranslate',header: {"Content-Type": "application/x-www-form-urlencoded"},method: "POST",data: {word:this.data.orcString,origin:"auto",to:this.data.translatelanguage},success: function (res) {console.log(res)wx.showToast({title: '翻译成功',icon: 'none',duration: 1500})that.setData({translateResutl : res.data.trans_result,activename: "3",}) },fail:function(){wx.showToast({ title: '服务器错误!', icon: 'none', duration: 1500 })}})},})


最后线上体验请微信扫码

利用java完成图像文字识别和翻译,实现拍照翻译的功能相关推荐

  1. Prizmo Pro for Mac(OCR图像文字识别工具)

    Prizmo Pro mac版可以自动扫描相机中的图片,可根据用户选择的文档类型进行特殊处理,支持常用的扫描仪.数码相机.iPhone.iPad 等,也支持自动截图桌面部分区域然后识别出文字,非常的有 ...

  2. 图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

    由于tesseract的中文语言包"chi_sim"对中文手写字体或者环境比较复杂的图片,识别正确率不高,因此需要针对特定情况用自己的样本进行训练,提高识别率,通过训练,也可以形成 ...

  3. 应用示例:图像文字识别

    Problem Description and Pipeline 在图像文字识别应用中,我们希望从给定的图片中识别图中的文字,如: 为了实现图像文字识别,常采取如下步骤: 文字检测(text dete ...

  4. 图像文字识别初探(二)-FAN(Focusing Attention Network)

    图像文字识别初探(一)-CRNN(Convolution Recurrent Neural Network)和DTRN(Deep-text Recurrent Network) 图像文字识别初探(二) ...

  5. 利用Paddle OCR进行文字识别

    利用Paddle OCR HubServing + Java Demo进行文字识别 需求描述 需要批量过滤一批本地图片,将含有网址水印的图片剔除 实现逻辑 使用python开源库 chinese_oc ...

  6. python 利用百度AI实现文字识别(cv2 + aip module)

    python 利用百度AI实现文字识别(cv2 + aip module) (该案例将利用cv2,aip等模块,详细的安装以及使用的方法将在后文进行简单的介绍.) 一.KNN算法的简介(机器学习算法之 ...

  7. Java的开源文字识别Tess4j与Tesseract-OCR

    提示:本文中部分内容图片节选自互联网,无意冒犯.如有侵权请私信联系作者即可删除.更改. 原因 由于项目需要,要求项目可以识别简单的图片,客户不想使用付费的大厂接口,于是我在查看资料后决定使用Tesse ...

  8. 如何使用Python实现图像文字识别OCR

    要使用Python实现图像文字识别OCR,可以使用以下步骤: 安装Tesseract OCR引擎 Tesseract是一种开源OCR引擎,可以处理多种语言和字体.要使用Python进行OCR,需要安装 ...

  9. 基于Python实现的图像文字识别OCR工具

    引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作.生活中常常会用到,比如票据.漫画.扫描件.照片的文本提取. 博主基于 PyQt + labelme + PaddleOCR 写了一个桌面 ...

  10. 基于Python实现的图像文字识别OCR工具,包含GUI界面附完整版代码可直接运行

    引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作.生活中常常会用到,比如票据.漫画.扫描件.照片的文本提取. 博主基于 PyQt + labelme + PaddleOCR 写了一个桌面 ...

最新文章

  1. 定向输出命令_Linux系统管理-输入输出
  2. 河南民办计算机大学排名,2020年河南最好的民办大学最新排名
  3. asp.net core 系列之webapi集成EFCore的简单操作教程
  4. TypeScript Parameter Destructuring 语法 - 参数解构
  5. mysql一对一修改_MYSQL的一对一
  6. python 爬虫002-http与urllib2
  7. Attribute “singleton” must be declared for element type “bean”.
  8. 控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow
  9. mui + php,GitHub - alphaphp/mui-kidApp: 基于 MUI 构建一个具有 90 +页面的APP应用
  10. 什么是 BI?和报表有什么关系?有了 BI 还要做报表吗?
  11. matlab怎么画两个自变量的图_横道图怎么画?免费使用的项目管理软件
  12. 正则表达式-国际手机号或座机号校验
  13. 北通手柄连接电脑没反应_北通手柄连接电脑教程
  14. sql优化之终极方案
  15. DevExpress 控件中文化教程详解(内含下载官网中文化包和自定义修改中文化包制作教程)
  16. JS中各种width和height的区别
  17. 2013年 雷诺 Renault Zoe | 警告信息 “停车: 电力故障危险”
  18. 零基础通过直播小程序组件实现电商带货
  19. Android 钉钉第三方登录问题
  20. Visual Studio2022编译报错解决方法

热门文章

  1. CAD2020学习教程
  2. PowerMockito框架入门及使用
  3. 计算机abcd地址,IP地址ABCDE的分类说明
  4. 软件工程师笔试编程题
  5. 智能家居APP原型设计(附下载链接)—基于物联网的终端设备设计研究—Axure9高保真原型设计
  6. c语言开根函数不用math,c语言开平方函数怎么用 该函数头文件:math.h;
  7. 《Java 核心技术 卷1》 笔记 第六章 接口和内部类(3) 接口回调与内部类
  8. C语言函数库之字符串比较函数(string.h)
  9. 《数字图像处理 第三版》(冈萨雷斯)——第九章 形态学图像处理
  10. 【转】演化博弈理论(EGT)