?

基于百度AI的文字識別系統設計

2023-06-25 04:07連麗紅
現代信息科技 2023年7期

摘? 要:文章主要介紹了基于百度AI的文字識別系統設計。該系統采用Exynos4412核心板為主控制器,采用USB攝像頭為圖像采集設備,采用RGB LCD觸摸屏為顯示設備。在Linux操作系統下,使用Qt設計控制界面,調用OpenCV庫函數和百度AI接口函數來實現車牌識別、手寫文字識別和語音合成。測試結果表明,系統具有界面友好、識別準確率高等優點,具有一定的實用推廣價值。

關鍵詞:百度AI;OpenCV;文字識別;語音合成

中圖分類號:TP311? 文獻標識碼:A? 文章編號: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? 引? 言

文字識別常見于車牌識別、手寫文字識別、證件號碼識別等,廣泛應用于各個相關領域。如車牌識別應用于智能交通系統的各個領域(停車、道路車輛監測等),對智能交通管理起著非常重要的作用;手寫文字識別能夠輔助將手寫稿轉換成電子稿,便于傳送和長時間保存。

為了提升文字識別的準確率,各種高性能的文字識別算法層出不窮[1-3],然而高性能算法需要依賴高性能硬件設備,所以基本采用PC機來實現[4],具有體積大、成本高、移動難等缺點。

隨著人工智能時代的到來,為了降低人工智能的使用門檻,普及更多的人工智能應用,許多公司轉而開發集各種成熟算法于一體的人工智能應用平臺,各種優秀的人工智能平臺也應運而生,例如百度AI平臺,可為使用者提供豐富且高性能的AI應用案例。本文設計的基于百度AI的文字識別系統,正是借助百度AI平臺,在不需要深入研究底層算法和進行大量模型訓練的情況下,快速實現車牌識別、手寫文字識別、語音合成等開發,大大降低了文字識別系統對軟硬件的要求。

1? 系統設計

如圖1所示,本文基于百度AI的文字識別系統采用服務器/客戶端架構。服務器即百度AI平臺,客戶端則是基于Exynos4412的軟硬件平臺。

百度AI平臺實現了豐富的人工智能案例,如人臉識別、車牌識別、語音處理等,用戶只需在平臺上注冊賬號,創建應用,就可以通過調用對應的接口函數使用平臺資源。

基于Exynos4412的硬件平臺由核心板、攝像頭、LCD和耳機外放及其他必要的外設構成。其中,核心板由基于Cortex-A9的四核處理器、存儲器和電源管理器構成,主頻為1.4~1.6 GHz,內存為1 GB,支持Linux、Android和Ubuntu等操作系統。攝像頭采用HBV-5640AF模塊,內核采用OV5640芯片,視場角為65°,焦距為2.7 mm,具有USB免驅,可以自動對焦,清晰度為500萬像素等優點,用于車牌圖片和手寫文字圖片的獲取。LCD使用4.3寸電容式觸控液晶屏,分辨率為480×272像素,使用RGB-LCD接口,通過軟排線連接到開發板,用于顯示QT控制界面,進行系統交互;耳機外放用于播放識別結果。軟件平臺采用Ubuntu操作系統和QtCreator集成開發環境進行設計。

系統總體實現過程為:首先在百度AI平臺上創建應用,制作支持OpenCV和百度AI的文件系統,然后設計QT界面,最后調用百度AI進行文字識別等。

2? 系統具體實現

2.1? 百度AI平臺應用創建

系統中車牌識別、手寫文字識別都屬于文字識別類,語音合成屬于語音技術類,所以需要在百度AI平臺上分別創建一個文字識別應用和一個語音技術應用,保存好各自的AppID、API Key、Secret Key備用,并下載對應的SDK包添加到工程文件中,主要包括工程相關的頭文件(如基礎頭文件base.h、base64.h、http.h、utils.h)、文字識別頭文件ocr.h和語音合成的speech.h,添加結果如圖2所示。

2.2? 文件系統制作

文件系統制作主要是在根文件系統中添加OpenCV庫支持OpenCV、百度AI的相關庫(openssl、libcurl和jsoncpp庫),支持百度AI和中文字庫更好地顯示中文字體。其中,OpenSSL[5]是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,添加openssl庫是為了添加libcurl庫對https協議的支持。libcurl[6]是跨平臺的開源網絡協議庫,支持http、https、ftp、gopher、telnet等協議。JSON[7]的全稱為JavaScript ObjectNotation,它是一種輕量級的數據交換格式,易于閱讀、編寫、解析。

每個庫都需要先進行配置和安裝,其中,在安裝OpenCV庫之前,一定要先安裝val/v4l2等必要的依賴庫,接著把對應庫文件統一拷貝到/usr/local/下,并把庫文件中lib目錄下的所有文件拷貝到文件系統中的/lib目錄下。然后在/etc/init.d/rcS文件中設置好是OpenSSL和libcurl的環境變量,方便系統調用。最后使用mkimage工具將文件系統打包生成可下載的system.img文件(具體命令為make_ext4fs -s -l 2092957696 -a root -L linux system.img root),并使用引導程序(uboot)燒寫到板上。

2.3? QT界面設計

QtCreator是一款功能豐富的圖形界面開發軟件,具有強大的跨平臺移植功能,支持在多種平臺上工作,為了保證系統最終能在基于Exynos4412的嵌入式開發板上正常運行,首先需要給QtCreator添加ARM的編譯套件,主要包括交叉編譯器、調試器和工程管理文件(Makefile)生成器(qmake),具體如圖3所示。然后創建工程,就可以在工程文件中進行UI界面設計。

本系統的QT界面設計如圖4所示,主要由三個label、兩個按鈕和一個消息框組成。其中的三個label,最上面的為標題框,用來設計系統標題,本系統設置為:文字識別—嘉庚學院;底下的兩個label,左邊為攝像頭顯示框,用于實時更新攝像頭的畫面;右邊為圖片顯示框,用于顯示拍攝的一張車牌和手寫字體圖片;兩個按鈕分別為車牌識別和手寫文字識別,用來控制攝像頭拍照、圖片處理、傳送圖片到百度AI進行識別及識別結果處理等操作;消息框則用于顯示識別結果,如成功識別的話則顯示車牌號碼或手寫文字。此外,這里還需要注意的是窗口(qwidge)的大小要設置成與屏幕分辨率的大小一樣,本系統設置成480×272。

2.4? 文字識別

文字識別是系統的核心部分,整體流程如圖5所示,主要包括client創建、圖片處理、車牌識別、手寫文字識別、語音合成和語音播放幾個部分。

client創建包括創建文字識別和語音合成兩個client,主要用來綁定百度AI平臺創建的應用,實現與AI平臺的交互,具體代碼為:

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平臺上相應的數據來替代。

圖片處理包括攝像頭初始化、圖片獲取和圖片顯示等,主要通過調用OpenCV的庫函數來實現。系統首先需要添加OpenCV相關頭文件highgui.h和cv.h,并在widget.h中聲明一個屬于OpenCV的CvCapture類型的指針,并取名為camera,用來保存攝像頭數據;接著在主窗體上調用InitCamara()實現攝像頭相關初始化,具體包括調用cvCreateCameraCapture(204)打開攝像頭,其中參數204為本文使用的攝像頭索引(即USB接口的索引),并將獲取到的視頻流賦值給頭文件聲明的camera變量,這樣后續其他函數就可以直接從這個變量中獲取圖片了;調用timer.start(50)開啟定時器,定時器的溢出時間設置為50 ms,即每隔50 ms刷新一次;調用connect(&timer,SIGNAL(timeout()),this,SLOT(ReadFarme()))關聯槽函數ReadFarme,當定時器達到設定的時間時就觸發槽函數ReadFarme執行;然后槽函數ReadFarme通過調用cvQueryFrame從攝像頭中獲取一幀圖片,同時將圖片格式轉換為支持QT界面顯示的QImage格式,并在界面左邊lable上每隔50 ms更新一幀圖片;最后車牌識別和手寫文字識別按鈕的槽函數中也同樣調用cvQueryFrame從攝像頭獲取一張圖片,圖片格式轉換后送右邊label顯示。

圖片識別包括車牌識別和手寫文字識別,主要是通過調用百度AI接口函數來實現,工程文件中要包含文字識別相關頭文件ocr.h。

車牌識別首先調用GetPlateNumber,將車牌圖片傳遞給百度AI進行識別,其中,GetPlateNumber函數實現直接使用百度AI提供的車牌識別客戶端接口函數,核心代碼為:

// 調用車牌識別

result = client.license_plate(image, aip::null);

// 如果有可選參數

std::map options;

options["multi_detect"] = "true";

// 帶參數調用車牌識別

result = client.license_plate(image, options);

// 帶參數調用車牌識別

識別完則調用result["words_result"][0]["number"].asString(),將接口返回來的數據顯示到文本顯示框中。這里需要注意的是,所顯示的數據中含有中文字體,因此要在工程中添加相應的字體文件,并在主函數中實現中文字體顯示。

手寫文字識別的整體實現流程和車牌識別類似,主要區別在于百度AI的接口函數和text文本顯示上有所不同。其中,百度AI接口采用GetHandwriting函數實現,其核心代碼為:

// 手寫文字識別

result = client.handwriting(image,aip::null);

// 如果有可選參數

std::map options;

// 帶參數調用手寫文字識別

result = client.handwriting(image, options);

text文本顯示上則通過result_sum = result_sum + result["words_result"][i]["wor

ds"].asString() + " \n"實現多行顯示,其中i為識別到的文字行數。

語音合成部分首先需要在頭文件中添加speech.h,在設置好語速和發聲人后,調用Json::Value result = client.text2audio(text, options, file_ret),將text中的識別結果送往百度AI進行語音合成,并保存在文件file_ret中;合成成功后,通過ofile << file_ret寫入ofile;最后調用system("mplayer ofile &"),使用mplayer進行語音播放。

2.5? 背景設計

為了使系統顯示界面更加美觀,在界面設計上添加背景圖片。具體流程如下:首先選擇合適圖片保存為background.jpg;其次把該背景圖片文件添加到工程資源目錄下;最后在主窗體中調用setPalette函數,顯示背景圖片。

3? 系統測試

工程編譯成功后,開發板接上攝像頭、網線、電源線等,上電,設置網絡地址,測試網絡連通后,就可以運行可執行文件進行系統測試。其中,車牌識別測試結果如圖6所示,LCD顯示屏上首先出現車牌識別界面,同時攝像頭會自動開啟并在左邊的label中實時更新攝像頭畫面;接著攝像頭對準待識別車牌圖片按下車牌識別按鈕后,攝像頭會拍攝一張車牌圖片同時在右邊label上予以顯示,并將處理后的圖片送往百度AI進行識別;最后識別結果顯示在左下方的文本框中,同時耳機外放接口也能清晰聽到對應的語音播報。手寫文字測試過程雷同,測試結果如圖7所示。

4? 結? 論

本文所設計的文字識別系統,經過多次車牌圖片和手寫文字測試,均能正常完成車牌識別、手寫文字識別和語音合成。系統整體運行穩定,同時系統借助百度AI平臺進行設計,具有識別速度快,準確度高等優點。此外,借鑒該系統的實現流程,結合實際的應用需求,用戶可以快速地開發其他基于百度AI平臺的項目,本文設計的系統具有很好的指導意義。

參考文獻:

[1] 顏子鳳.基于改進Faster R-CNN 及 YOLO的大角度車牌識別算法 [J].工業控制計算機,2022,35(2):79-81+83.

[2] 辛莉,趙欽炎,許茜,等.基于計算機視覺的復雜場景車牌識別算法 [J].制造業自動化,2021,43(12):135-139.

[3] 許嘉諭,林楚燁,陳志濤,等.基于深度學習的手寫書法字體識別算法 [J].計算機系統應用,2021,30(2):213-218.

[4] 孫鵬,李賽,寇鵬,等.基于手持設備圖像的車牌定位與車牌識別系統設計 [J].軟件工程,2022,25(1):29-32.

[5] 胡景秀,楊陽,熊璐,等.國密算法分析與軟件性能研究 [J].信息網絡安全,2021,21(10):8-16.

[6] 唐云琪,溫國劍,鄧志,等.智能公交車載終端數據的傳輸研究 [J].網路信息工程,2020(15):75-78.

[7] 陳二陽,袁姜紅,黎忠文,等.基于JSON的土壤環境監測物聯網感知源信任評價模型研究 [J].西安理工大學學報,2020,36(4):557-561.

作者簡介:連麗紅(1984—),女,漢族,福建泉州人,副教授,碩士,主要研究方向:嵌入式系統及應用。

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合