基于百度AI的文字识别系统设计
2023-06-25连丽红
摘 要:文章主要介绍了基于百度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["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
// 带参数调用手写文字识别
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—),女,汉族,福建泉州人,副教授,硕士,主要研究方向:嵌入式系统及应用。