摘? 要:文章主要介紹了基于百度AI的文字識(shí)別系統(tǒng)設(shè)計(jì)。該系統(tǒng)采用Exynos4412核心板為主控制器,采用USB攝像頭為圖像采集設(shè)備,采用RGB LCD觸摸屏為顯示設(shè)備。在Linux操作系統(tǒng)下,使用Qt設(shè)計(jì)控制界面,調(diào)用OpenCV庫(kù)函數(shù)和百度AI接口函數(shù)來(lái)實(shí)現(xiàn)車牌識(shí)別、手寫文字識(shí)別和語(yǔ)音合成。測(cè)試結(jié)果表明,系統(tǒng)具有界面友好、識(shí)別準(zhǔn)確率高等優(yōu)點(diǎn),具有一定的實(shí)用推廣價(jià)值。
關(guān)鍵詞:百度AI;OpenCV;文字識(shí)別;語(yǔ)音合成
中圖分類號(hào):TP311? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):2096-4706(2023)07-0045-04
Abstract: This paper mainly introduces the design of character recognition system based on Baidu AI. The system uses Exynos4412 core board as the main controller, USB camera as the image acquisition device, and RGB LCD touch screen as the display device. Under Linux operating system, use Qt to design control interface, call OpenCV library function and Baidu AI interface function to realize license plate recognition, handwritten character recognition and speech synthesis. The test results show that the system has the advantages of friendly interface, high recognition accuracy, and has a certain practical promotion value.
Keywords: Baidu AI; OpenCV; character recognition; speech synthesis
0? 引? 言
文字識(shí)別常見于車牌識(shí)別、手寫文字識(shí)別、證件號(hào)碼識(shí)別等,廣泛應(yīng)用于各個(gè)相關(guān)領(lǐng)域。如車牌識(shí)別應(yīng)用于智能交通系統(tǒng)的各個(gè)領(lǐng)域(停車、道路車輛監(jiān)測(cè)等),對(duì)智能交通管理起著非常重要的作用;手寫文字識(shí)別能夠輔助將手寫稿轉(zhuǎn)換成電子稿,便于傳送和長(zhǎng)時(shí)間保存。
為了提升文字識(shí)別的準(zhǔn)確率,各種高性能的文字識(shí)別算法層出不窮[1-3],然而高性能算法需要依賴高性能硬件設(shè)備,所以基本采用PC機(jī)來(lái)實(shí)現(xiàn)[4],具有體積大、成本高、移動(dòng)難等缺點(diǎn)。
隨著人工智能時(shí)代的到來(lái),為了降低人工智能的使用門檻,普及更多的人工智能應(yīng)用,許多公司轉(zhuǎn)而開發(fā)集各種成熟算法于一體的人工智能應(yīng)用平臺(tái),各種優(yōu)秀的人工智能平臺(tái)也應(yīng)運(yùn)而生,例如百度AI平臺(tái),可為使用者提供豐富且高性能的AI應(yīng)用案例。本文設(shè)計(jì)的基于百度AI的文字識(shí)別系統(tǒng),正是借助百度AI平臺(tái),在不需要深入研究底層算法和進(jìn)行大量模型訓(xùn)練的情況下,快速實(shí)現(xiàn)車牌識(shí)別、手寫文字識(shí)別、語(yǔ)音合成等開發(fā),大大降低了文字識(shí)別系統(tǒng)對(duì)軟硬件的要求。
1? 系統(tǒng)設(shè)計(jì)
如圖1所示,本文基于百度AI的文字識(shí)別系統(tǒng)采用服務(wù)器/客戶端架構(gòu)。服務(wù)器即百度AI平臺(tái),客戶端則是基于Exynos4412的軟硬件平臺(tái)。
百度AI平臺(tái)實(shí)現(xiàn)了豐富的人工智能案例,如人臉識(shí)別、車牌識(shí)別、語(yǔ)音處理等,用戶只需在平臺(tái)上注冊(cè)賬號(hào),創(chuàng)建應(yīng)用,就可以通過調(diào)用對(duì)應(yīng)的接口函數(shù)使用平臺(tái)資源。
基于Exynos4412的硬件平臺(tái)由核心板、攝像頭、LCD和耳機(jī)外放及其他必要的外設(shè)構(gòu)成。其中,核心板由基于Cortex-A9的四核處理器、存儲(chǔ)器和電源管理器構(gòu)成,主頻為1.4~1.6 GHz,內(nèi)存為1 GB,支持Linux、Android和Ubuntu等操作系統(tǒng)。攝像頭采用HBV-5640AF模塊,內(nèi)核采用OV5640芯片,視場(chǎng)角為65°,焦距為2.7 mm,具有USB免驅(qū),可以自動(dòng)對(duì)焦,清晰度為500萬(wàn)像素等優(yōu)點(diǎn),用于車牌圖片和手寫文字圖片的獲取。LCD使用4.3寸電容式觸控液晶屏,分辨率為480×272像素,使用RGB-LCD接口,通過軟排線連接到開發(fā)板,用于顯示QT控制界面,進(jìn)行系統(tǒng)交互;耳機(jī)外放用于播放識(shí)別結(jié)果。軟件平臺(tái)采用Ubuntu操作系統(tǒng)和QtCreator集成開發(fā)環(huán)境進(jìn)行設(shè)計(jì)。
系統(tǒng)總體實(shí)現(xiàn)過程為:首先在百度AI平臺(tái)上創(chuàng)建應(yīng)用,制作支持OpenCV和百度AI的文件系統(tǒng),然后設(shè)計(jì)QT界面,最后調(diào)用百度AI進(jìn)行文字識(shí)別等。
2? 系統(tǒng)具體實(shí)現(xiàn)
2.1? 百度AI平臺(tái)應(yīng)用創(chuàng)建
系統(tǒng)中車牌識(shí)別、手寫文字識(shí)別都屬于文字識(shí)別類,語(yǔ)音合成屬于語(yǔ)音技術(shù)類,所以需要在百度AI平臺(tái)上分別創(chuàng)建一個(gè)文字識(shí)別應(yīng)用和一個(gè)語(yǔ)音技術(shù)應(yīng)用,保存好各自的AppID、API Key、Secret Key備用,并下載對(duì)應(yīng)的SDK包添加到工程文件中,主要包括工程相關(guān)的頭文件(如基礎(chǔ)頭文件base.h、base64.h、http.h、utils.h)、文字識(shí)別頭文件ocr.h和語(yǔ)音合成的speech.h,添加結(jié)果如圖2所示。
2.2? 文件系統(tǒng)制作
文件系統(tǒng)制作主要是在根文件系統(tǒng)中添加OpenCV庫(kù)支持OpenCV、百度AI的相關(guān)庫(kù)(openssl、libcurl和jsoncpp庫(kù)),支持百度AI和中文字庫(kù)更好地顯示中文字體。其中,OpenSSL[5]是一個(gè)安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,添加openssl庫(kù)是為了添加libcurl庫(kù)對(duì)https協(xié)議的支持。libcurl[6]是跨平臺(tái)的開源網(wǎng)絡(luò)協(xié)議庫(kù),支持http、https、ftp、gopher、telnet等協(xié)議。JSON[7]的全稱為JavaScript ObjectNotation,它是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀、編寫、解析。
每個(gè)庫(kù)都需要先進(jìn)行配置和安裝,其中,在安裝OpenCV庫(kù)之前,一定要先安裝val/v4l2等必要的依賴庫(kù),接著把對(duì)應(yīng)庫(kù)文件統(tǒng)一拷貝到/usr/local/下,并把庫(kù)文件中l(wèi)ib目錄下的所有文件拷貝到文件系統(tǒng)中的/lib目錄下。然后在/etc/init.d/rcS文件中設(shè)置好是OpenSSL和libcurl的環(huán)境變量,方便系統(tǒng)調(diào)用。最后使用mkimage工具將文件系統(tǒng)打包生成可下載的system.img文件(具體命令為make_ext4fs -s -l 2092957696 -a root -L linux system.img root),并使用引導(dǎo)程序(uboot)燒寫到板上。
2.3? QT界面設(shè)計(jì)
QtCreator是一款功能豐富的圖形界面開發(fā)軟件,具有強(qiáng)大的跨平臺(tái)移植功能,支持在多種平臺(tái)上工作,為了保證系統(tǒng)最終能在基于Exynos4412的嵌入式開發(fā)板上正常運(yùn)行,首先需要給QtCreator添加ARM的編譯套件,主要包括交叉編譯器、調(diào)試器和工程管理文件(Makefile)生成器(qmake),具體如圖3所示。然后創(chuàng)建工程,就可以在工程文件中進(jìn)行UI界面設(shè)計(jì)。
本系統(tǒng)的QT界面設(shè)計(jì)如圖4所示,主要由三個(gè)label、兩個(gè)按鈕和一個(gè)消息框組成。其中的三個(gè)label,最上面的為標(biāo)題框,用來(lái)設(shè)計(jì)系統(tǒng)標(biāo)題,本系統(tǒng)設(shè)置為:文字識(shí)別—嘉庚學(xué)院;底下的兩個(gè)label,左邊為攝像頭顯示框,用于實(shí)時(shí)更新攝像頭的畫面;右邊為圖片顯示框,用于顯示拍攝的一張車牌和手寫字體圖片;兩個(gè)按鈕分別為車牌識(shí)別和手寫文字識(shí)別,用來(lái)控制攝像頭拍照、圖片處理、傳送圖片到百度AI進(jìn)行識(shí)別及識(shí)別結(jié)果處理等操作;消息框則用于顯示識(shí)別結(jié)果,如成功識(shí)別的話則顯示車牌號(hào)碼或手寫文字。此外,這里還需要注意的是窗口(qwidge)的大小要設(shè)置成與屏幕分辨率的大小一樣,本系統(tǒng)設(shè)置成480×272。
2.4? 文字識(shí)別
文字識(shí)別是系統(tǒng)的核心部分,整體流程如圖5所示,主要包括client創(chuàng)建、圖片處理、車牌識(shí)別、手寫文字識(shí)別、語(yǔ)音合成和語(yǔ)音播放幾個(gè)部分。
client創(chuàng)建包括創(chuàng)建文字識(shí)別和語(yǔ)音合成兩個(gè)client,主要用來(lái)綁定百度AI平臺(tái)創(chuàng)建的應(yīng)用,實(shí)現(xiàn)與AI平臺(tái)的交互,具體代碼為:
std::string app_id = "你的App_id"
std::string api_key = "你的Api_key"
std::string secret_key = "你的Secret_key"
aip::Ocr client(app_id, api_key, secret_key)
其中,"你的App_id" "你的Api_key"和"你的Secret_key"需要分別用AI平臺(tái)上相應(yīng)的數(shù)據(jù)來(lái)替代。
圖片處理包括攝像頭初始化、圖片獲取和圖片顯示等,主要通過調(diào)用OpenCV的庫(kù)函數(shù)來(lái)實(shí)現(xiàn)。系統(tǒng)首先需要添加OpenCV相關(guān)頭文件highgui.h和cv.h,并在widget.h中聲明一個(gè)屬于OpenCV的CvCapture類型的指針,并取名為camera,用來(lái)保存攝像頭數(shù)據(jù);接著在主窗體上調(diào)用InitCamara()實(shí)現(xiàn)攝像頭相關(guān)初始化,具體包括調(diào)用cvCreateCameraCapture(204)打開攝像頭,其中參數(shù)204為本文使用的攝像頭索引(即USB接口的索引),并將獲取到的視頻流賦值給頭文件聲明的camera變量,這樣后續(xù)其他函數(shù)就可以直接從這個(gè)變量中獲取圖片了;調(diào)用timer.start(50)開啟定時(shí)器,定時(shí)器的溢出時(shí)間設(shè)置為50 ms,即每隔50 ms刷新一次;調(diào)用connect(&timer,SIGNAL(timeout()),this,SLOT(ReadFarme()))關(guān)聯(lián)槽函數(shù)ReadFarme,當(dāng)定時(shí)器達(dá)到設(shè)定的時(shí)間時(shí)就觸發(fā)槽函數(shù)ReadFarme執(zhí)行;然后槽函數(shù)ReadFarme通過調(diào)用cvQueryFrame從攝像頭中獲取一幀圖片,同時(shí)將圖片格式轉(zhuǎn)換為支持QT界面顯示的QImage格式,并在界面左邊lable上每隔50 ms更新一幀圖片;最后車牌識(shí)別和手寫文字識(shí)別按鈕的槽函數(shù)中也同樣調(diào)用cvQueryFrame從攝像頭獲取一張圖片,圖片格式轉(zhuǎn)換后送右邊label顯示。
圖片識(shí)別包括車牌識(shí)別和手寫文字識(shí)別,主要是通過調(diào)用百度AI接口函數(shù)來(lái)實(shí)現(xiàn),工程文件中要包含文字識(shí)別相關(guān)頭文件ocr.h。
車牌識(shí)別首先調(diào)用GetPlateNumber,將車牌圖片傳遞給百度AI進(jìn)行識(shí)別,其中,GetPlateNumber函數(shù)實(shí)現(xiàn)直接使用百度AI提供的車牌識(shí)別客戶端接口函數(shù),核心代碼為:
// 調(diào)用車牌識(shí)別
result = client.license_plate(image, aip::null);
// 如果有可選參數(shù)
std::map
options["multi_detect"] = "true";
// 帶參數(shù)調(diào)用車牌識(shí)別
result = client.license_plate(image, options);
// 帶參數(shù)調(diào)用車牌識(shí)別
識(shí)別完則調(diào)用result["words_result"][0]["number"].asString(),將接口返回來(lái)的數(shù)據(jù)顯示到文本顯示框中。這里需要注意的是,所顯示的數(shù)據(jù)中含有中文字體,因此要在工程中添加相應(yīng)的字體文件,并在主函數(shù)中實(shí)現(xiàn)中文字體顯示。
手寫文字識(shí)別的整體實(shí)現(xiàn)流程和車牌識(shí)別類似,主要區(qū)別在于百度AI的接口函數(shù)和text文本顯示上有所不同。其中,百度AI接口采用GetHandwriting函數(shù)實(shí)現(xiàn),其核心代碼為:
// 手寫文字識(shí)別
result = client.handwriting(image,aip::null);
// 如果有可選參數(shù)
std::map
// 帶參數(shù)調(diào)用手寫文字識(shí)別
result = client.handwriting(image, options);
text文本顯示上則通過result_sum = result_sum + result["words_result"][i]["wor
ds"].asString() + " \n"實(shí)現(xiàn)多行顯示,其中i為識(shí)別到的文字行數(shù)。
語(yǔ)音合成部分首先需要在頭文件中添加speech.h,在設(shè)置好語(yǔ)速和發(fā)聲人后,調(diào)用Json::Value result = client.text2audio(text, options, file_ret),將text中的識(shí)別結(jié)果送往百度AI進(jìn)行語(yǔ)音合成,并保存在文件file_ret中;合成成功后,通過ofile << file_ret寫入ofile;最后調(diào)用system("mplayer ofile &"),使用mplayer進(jìn)行語(yǔ)音播放。
2.5? 背景設(shè)計(jì)
為了使系統(tǒng)顯示界面更加美觀,在界面設(shè)計(jì)上添加背景圖片。具體流程如下:首先選擇合適圖片保存為background.jpg;其次把該背景圖片文件添加到工程資源目錄下;最后在主窗體中調(diào)用setPalette函數(shù),顯示背景圖片。
3? 系統(tǒng)測(cè)試
工程編譯成功后,開發(fā)板接上攝像頭、網(wǎng)線、電源線等,上電,設(shè)置網(wǎng)絡(luò)地址,測(cè)試網(wǎng)絡(luò)連通后,就可以運(yùn)行可執(zhí)行文件進(jìn)行系統(tǒng)測(cè)試。其中,車牌識(shí)別測(cè)試結(jié)果如圖6所示,LCD顯示屏上首先出現(xiàn)車牌識(shí)別界面,同時(shí)攝像頭會(huì)自動(dòng)開啟并在左邊的label中實(shí)時(shí)更新攝像頭畫面;接著攝像頭對(duì)準(zhǔn)待識(shí)別車牌圖片按下車牌識(shí)別按鈕后,攝像頭會(huì)拍攝一張車牌圖片同時(shí)在右邊label上予以顯示,并將處理后的圖片送往百度AI進(jìn)行識(shí)別;最后識(shí)別結(jié)果顯示在左下方的文本框中,同時(shí)耳機(jī)外放接口也能清晰聽到對(duì)應(yīng)的語(yǔ)音播報(bào)。手寫文字測(cè)試過程雷同,測(cè)試結(jié)果如圖7所示。
4? 結(jié)? 論
本文所設(shè)計(jì)的文字識(shí)別系統(tǒng),經(jīng)過多次車牌圖片和手寫文字測(cè)試,均能正常完成車牌識(shí)別、手寫文字識(shí)別和語(yǔ)音合成。系統(tǒng)整體運(yùn)行穩(wěn)定,同時(shí)系統(tǒng)借助百度AI平臺(tái)進(jìn)行設(shè)計(jì),具有識(shí)別速度快,準(zhǔn)確度高等優(yōu)點(diǎn)。此外,借鑒該系統(tǒng)的實(shí)現(xiàn)流程,結(jié)合實(shí)際的應(yīng)用需求,用戶可以快速地開發(fā)其他基于百度AI平臺(tái)的項(xiàng)目,本文設(shè)計(jì)的系統(tǒng)具有很好的指導(dǎo)意義。
參考文獻(xiàn):
[1] 顏?zhàn)峪P.基于改進(jìn)Faster R-CNN 及 YOLO的大角度車牌識(shí)別算法 [J].工業(yè)控制計(jì)算機(jī),2022,35(2):79-81+83.
[2] 辛莉,趙欽炎,許茜,等.基于計(jì)算機(jī)視覺的復(fù)雜場(chǎng)景車牌識(shí)別算法 [J].制造業(yè)自動(dòng)化,2021,43(12):135-139.
[3] 許嘉諭,林楚燁,陳志濤,等.基于深度學(xué)習(xí)的手寫書法字體識(shí)別算法 [J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2021,30(2):213-218.
[4] 孫鵬,李賽,寇鵬,等.基于手持設(shè)備圖像的車牌定位與車牌識(shí)別系統(tǒng)設(shè)計(jì) [J].軟件工程,2022,25(1):29-32.
[5] 胡景秀,楊陽(yáng),熊璐,等.國(guó)密算法分析與軟件性能研究 [J].信息網(wǎng)絡(luò)安全,2021,21(10):8-16.
[6] 唐云琪,溫國(guó)劍,鄧志,等.智能公交車載終端數(shù)據(jù)的傳輸研究 [J].網(wǎng)路信息工程,2020(15):75-78.
[7] 陳二陽(yáng),袁姜紅,黎忠文,等.基于JSON的土壤環(huán)境監(jiān)測(cè)物聯(lián)網(wǎng)感知源信任評(píng)價(jià)模型研究 [J].西安理工大學(xué)學(xué)報(bào),2020,36(4):557-561.
作者簡(jiǎn)介:連麗紅(1984—),女,漢族,福建泉州人,副教授,碩士,主要研究方向:嵌入式系統(tǒng)及應(yīng)用。