贠旭
(安康學院, 跨文化交際與翻譯研究中心, 陜西, 安康 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的時間內向用戶提供翻譯結果,完全滿足用戶的使用體驗需求。