贠旭
(安康学院, 跨文化交际与翻译研究中心, 陕西, 安康 725000)
随着全球化进程的加快,世界上各个国家之间的交往和联系愈加密切,在不同语种的人群之间用英语进行快速沟通已经成为一种迫切的需求,借助于移动终端技术的快速发展,手机智能翻译软件的开发逐渐成为热点[1]。本文提出了一种基于Tesseract框架的手机智能翻译系统,采用开源COR引擎框架Tesseract对印刷体字符进行识别、转换和翻译,从而实现即时翻译、拍照翻译和字典翻译的基本功能。
系统总体框架结构如图1所示。根据智能翻译软件的功能需求,系统设置了即时翻译、拍照翻译和字典翻译3个基本功能模块,除此以外,为了满足不同语种客户的使用需求,系统中还包含有语言选择功能模块。其中,即时翻译模块下设采集图像、预览影像、字符识别、文本翻译4个子模块;拍照翻译模块下设采集图像、显示图像、字符识别、文本翻译4个子模块;语言选择模块下设选择语言和下载2个子模块。
在移动终端启动后,系统软件的各模块首先进行初始化操作,之后手机摄像头开启并进入影像预览界面,在该界面下有多项功能按钮,系统持续自动检测是否有功能按钮被用户选择,如果没有则自动开始即时在线翻译,如果有则立即跳转到相应的功能界面,此时若用户点击了返回功能键,则系统回到即时翻译界面,如果没有则在当前界面继续完成相关的操作。在即时翻译功能界面下当系统检测到返回键被点击时,则系统自动停止运行。
图1 智能翻译系统总体框架结构
即时翻译是智能翻译系统的核心功能。系统开始运行后会首先打开摄像头,此时起会持续预览摄像头所拍摄到的界面,当摄像头拍摄到字符图片时,系统运行程序会进行实时采集并将数据发送给OCR字符自动识别模块,通过该模块将图片信息转换为文本信息[2],接下来再将文本信息发送给翻译模块完成文字内容的翻译,最终经识别转换的文本信息和翻译得到的结果会同时显示在手机屏幕上[3]。即时翻译功能通过拍照识别为用户节省了大量的文字输入时间,极大地提高了翻译的效率,该功能具体实现流程如图2所示。
图2 即时翻译功能实现流程
与即时翻译功能相似,在该功能下系统会首先利用摄像头进行图片采集,同时通过手机屏幕显示图片信息,在完成整幅图片中文字的OCR识别后,保存识别得到的文本信息[4],文本中除了文字外还包含有每个字符所处的坐标信息,从而使用户能够在点击原始图片的某个位置后即刻提取出该位置处的单词,然后将其发送给翻译模块,翻译结果会随后出现在手机屏幕上[5]。与即时翻译功能相比,拍照翻译功能可以获得更为精确的识别和翻译结果,该功能具体实现流程如图3所示。
图3 拍照翻译功能实现流程
该功能通过有道在线API实现2种不同语言的在线翻译,用户手动输入想要翻译的单词或词组并点击界面中的“查询”按钮,系统运行程序发送http请求,具体方式为get,数据接口内容如下[6]:
数据接口内容 http:∥fanyi.youdao.com/openapi.do?keyfrom=
在数据解析的过程中,优先对标签中的数据进行解析,对于该数据,可能存在以下情况[7]:
数据解析0正常返回翻译数据20待翻译文本长度超限30无法正常识别或翻译40系统不支持目标文本的语言50key无效
在返回的数据不是0的情况下,系统会向用户进行相应错误信息的提示。如果返回的数据是0,则系统会开始对目标文本进行翻译解析。得到的翻译结果保存在标签中,标签中的内容通过GetStrBetweenXAndY(Stringstr,Stringstr1,Stringstr2)方法获取,其中,参数str代表目标字符串,str1代表左标签,str2代表右标签,在该方法下,目标字符串str的内容为由str1开始到str2结束截取并返回的字符串[8]。在返回的信息中,单个词汇的翻译结果保存在标签<![CDATA[…]]>中,解析完成后获取的翻译结果则保存在容器string中,最终解析获取的有效信息保存在手机屏幕文本控件中[9]。
该功能使用户能够对源语言和目标语言进行选择,系统启动时默认翻译程序为英译汉,同时提供其它几种应用较为广泛的语言由用户进行选择,当用户所需翻译的语言不在列表之中时,则需要下载相应的语言包。OCR在系统初始化的过程中首先检测系统内已集成的语言包种类,同时将当前语言包初始化为英语。如果系统没有检测到某一类语言包而用户提出了该类语言的翻译需求,系统会自动下载该语言包,完成后再次进行OCR初始化[10]。
图形容器SurfaceView是实现影像预览功能的关键组件,其中集成了绘制专用surface,摄像头拍摄到的画面都映射到surface上。为了使系统能够正常调用SurfaceView组件,需要将其布局设置添加到布局文件main.xml的LinearLayout视图组中,配置代码如下:
配置代码
预览功能能继承SurfaceView类并完成SurfaceHolder.Callback接口配置的基础上实现,通过该接口,利用以下3个方法来改变预览界面[11]:
响应初始化操作请求并创建预览界面时调用surfaceCreated(SurfaceHolderholder);
改变预览界面的大小和格式时调用surfaceChanged(SurfaceHolderholder,intformat,intwidth,int);
关闭预览界面时调用surfaceDestroyed(SurfaceHolderholder)。
影像预览模块通过MainActivity实现,MainActivity是即时翻译功能实现的基础。利用MainActivity中的onCreated方法进行SurfaceView组件属性和窗口的初始化,再通过surfaceCreated方法启动摄像头并完成相关参数的设置,由此开始进行图像预览。
为了实现图像文件中字符的OCR识别功能,需要采用JNI技术通过Andriod系统的编程语言Java实现Tesseract方法的调用,这一过程通过以下步骤完成:
(1) 系统应用程序所调用的函数在Java代码中进行说明,且其中应附加native,从而能够在外部实现Java编辑器中提出的方法;
(2) 在基于C代码的头文件中加入关于C编辑器所识别本次函数的描述,其中应包含C代码所能访问的属性与方法的参数;
(3) 利用System.loadLibrary()方法加载Tesseract动态库;
(4) 载入Tesseract动态链接库时,利用JNI_OnLoad()方法完成Tesseract的初始化;
(5) 通过registerNativeMethods()方法进行本地注册;
(6) 通过JNI_OnUnLoad()方法完成虚拟机对Tesseract资源的释放。
具体实现流程如图4所示。
图4 利用JNI技术调用Tesseract方法的流程
系统的在线翻译功能基于有道API实现。用户提出翻译需求后,系统通过有道API数据接口发送http请求,接口的具体内容如下:
数据接口内容http:∥fanyi.youdao.com/openapi.do?keyfrom=
其中,
为了了解系统的工作性能,单独设计了一个在单例模式下实现的类ConsoleTime,利用其中的方法对函数的运行时间进行计算。ConsoleTime类的实现代码如下:
代码含义public final class ConsoleTime{ public final class MyTimeData{定义开始执行时间变量、结束执行时间变量、总耗时变量private Map
通过该类的方法分别记录函数开始运行和结束运行的时间点,从而计算出函数的运行时长。在系统设置的多个模块中,翻译模块、字符识别模块和格式转换模块的运算量相对较大,因此系统性能分析基于这3个模块的运行情况进行。启动手机中的系统软件开始性能测试,系统运行过程中通过LogCat窗口的日志信息观察各模块的运行时间,具体结果如图5所示。
由图5可见,格式转化模块的运行时长约为35 ms,字符识别模块的运行时长在200—300 ms范围内,翻译模块的运行时长约为80 ms,字符识别模块运行的耗时相对较长,且随着字符量的增加其运行时间会快速增长。此外,即时翻译模块的运行时长在400—600 ms范围内,系统能够快速为用户提供翻译结果,满足用户的使用体验需求。
本文提出了一种基于Tesseract的手机智能翻译系统,利用Tesseract框架下的COR引擎对图像文件中的字符进行识别,先将图片信息转换为文本信息,再对文本信息中的文字内容进行翻译,从而得到用户想要的翻译结果,此外,通过有道API实现了用户输入内容的在线翻译功能。性能测试结果表明,系统能够在400—600 ms的时间内向用户提供翻译结果,完全满足用户的使用体验需求。