采用手写辨识芯片的汉字手写输入技术
主要介绍在小型嵌入式应用系统中,如何借助于手写体辨识芯片ePH1200实现汉字以及其他字符的手写输入。根据芯片ePH1200的辨识功能和特点,介绍了手写体汉字的辨识过程;结合实例,介绍采用ePH1200、电阻式触摸屏和微控制器(MSP430)实现汉字手写输入的硬件接口电路与软件编程方法。
关键词 手写体辨识 触摸屏 ePH1200 辨识芯片
许多的掌上装置与移动设备采用小型嵌入式系统,而这些装置很多都需要具有输入汉字的功能。计算机系统中实现汉字输入的方法有多种,但根据实现的技术路线区分,不外乎是编码输入(如拼音、五笔字型输入等)、语音输入(如语音识别)、字型辨识输入(如扫描输入、手写体输入)等几种。由于语音输入技术尚未成熟,手写汉字输入方法颇受人们青睐。然而由于受微控制器本身处理能力及系统内存空间的限制,要在其中嵌入手写体汉字识别软内核难度非常大,且软内核必须针对不同的嵌入式应用系统进行移植才能使用。这无疑增加了这类产品开发的成本与风险。ePH1200是义隆电子公司将手写体辨识软内核硬化的一款专用芯片,它通过与电阻式触摸屏、微控制器相连,有效地实现汉字的手写输入。这为掌上装置以及各种移动设备等嵌入应用系统实现汉字的手写输入功能提供了一个很好的解决方案。
1 ePH1200的特点与手写体辨识过程
ePH1200手写体辨识芯片内嵌蒙恬手写识别软内核,能对国标汉字(共6 763个)、ASCII码字符以及其他一些特殊字符的手写体进行辨识,支持笔划连写,识别正确率高达99.9%;提供备选字输出,输出结果为Unicode编码或者GB2312国标码,单字辨识时间约为0.34 s。ePH1200具有CSP24和LQFP44两种封装型式;功耗低,工作电压为2.8~3.6 V,工作电流约为2 mA,待机模式时的静态耗电小于20 μA;工作温度范围为-20~+80 ℃。ePH1200具有UART接口,方便与各种微控制器配合使用;UART接口的数据传输速率固定为9 600 bps,一帧数据为10位(1个起始位、8个数据位、1个停止位),数据位由低位到高位依次传送。ePH1200内嵌电阻式触摸屏控制接口电路,可直接与四线电阻式触摸屏相连。电阻式触摸屏控制接口电路包括电子开关切换电路和A/D转换器(转换精度8位/10位可选)[1]。图1为ePH1200的原理框图。
图1 ePH1200原理框图
ePH1200通过内部的触摸屏控制接口和A/D转换器,获取在电阻式触摸屏上笔划轨迹的坐标信息。当停笔时间(也就是书写笔不接触摸屏的时间)大于设定值时,表示一个字符已书写完成。这时内嵌的辨识内核开始处理,通过采用字符识别算法对输入的字型点阵信息进行计算,便可以辨识出刚才所书写的字符,获得其Unicode/GB2312编码。字符的编码和笔划字型点阵信息均可通过UART端口输出,送给系统的微控制器;系统的微控制器便将手写字符的笔划字型点阵和根据编码获取的标准字型点阵输出到显示屏。这样在显示屏上就可以映射显示出手写字型和被识别字符的标准字型。
2 ePH1200硬件接口电路的设计
图2为实现手写输入的硬件接口电路。ePH1200通过XP、XN、YP、YN四个引脚端与四线电阻式触摸屏直接相连,通过串口与系统微控制器MSP430交换信息。当ePH1200处在待机模式时,可通过WKI端输入外部中断唤醒信号(如微控制器通过检测触摸屏工作状态所产生的输出信号),使其恢复到正常工作模式。
图2 ePH1200硬件接口电路图
触摸屏上的笔划或点击信息,经过ePH1200的采集与处理,由串行接口送给微控制器MSP430;微控制器MSP430在收到这些数据后进行分析处理,将笔划点阵信息映射显示在LCD屏上,并将点触软键盘功能键的信息交由键盘处理程序处理。
3 应用程序设计
3.1 ePH1200的编程方法
由于ePH1200只能通过串行接口与系统的微控制器通信,因此各种数据信息的传送都是通过串行协议来实现的。系统的微控制器由串口发送命令包,可以将ePH1200设置为不同的工作状态。当ePH1200工作在辨识状态时,可以对触摸屏上设定范围内手写的一级、二级汉字以及一些ASCII码字符进行辨识,并输出其代码(如GB2312码)和手写笔迹的坐标值;当工作在图形状态时,不对手写的字符进行辨识,而只是将触摸屏上设定范围内手写笔迹的坐标值输出。ePH1200上电工作后处在默认工作模式,系统的微控制器必须根据应用要求通过串口对其进行初始化设置。串行通信的命令包格式如下:
例如,要设置ePH1200工作在图形工作状态,系统的微控制器应通过串行接口向ePH1200发送以下8字节的命令包:
0x50 0x14 0x04 0x01 0xFF 0xFF 0xFF 0x3A
ePH1200工作状态被正确设置后便会作出应答,应答包的数据如下:
0x50 0x14 0x04 0xFD 0xFF 0xFF 0xFF 0xFD
ePH1200应答输出包的格式有多种,包括命令确认应答包、命令错误应答包、单字辨识结果数据包和笔迹坐标数据包等。限于篇幅不在此介绍。
3.2 手写笔迹坐标数据包的接收
在手写输入过程中,ePH1200几乎同步地输出手写笔迹坐标数据包。系统的微控制器须不停地接收这些数据包,通过提取坐标值,将其在屏幕上显示出来。但由于系统的微控制器具有多个任务,处理速度不一定足够快,因此为了防止手写笔迹坐标数据包发生丢失,需要建立坐标数据包接收缓冲区。根据实际应用情况,缓冲区定义为环形,可存放10个数据包。缓冲区的管理采用双指针: 数据包接收存放位置指针与数据包提取位置指针。数据包被提取后,相应的存储单元即被清除,以免被重复提取使用;数据包提取位置指针也调整为指向下一个数据包的存放位置,若没有新的数据包可提取则等待。数据包的接收存放管理相对简单,每接收存放一个数据包后,将数据包接收存放位置指针调整指向下一个存放位置即可,无须考虑缓冲区的溢出问题。
3.3 手写笔迹的显示
在触摸屏上进行书写,虽然手写的笔划是连续的,但ePH1200输出的笔迹坐标数据包只是笔迹曲线上采样点的坐标值,因而是不连续的。如果要将手写的笔迹在显示屏上映射显示[2]出来,则必须利用软件进行处理。采用Bresenham画线算法[3]和利用ePH1200输出的坐标值,可在显示屏上绘出与手写笔迹基本一致的连续曲线。下面是绘线示例程序:
//绘线函数,起点坐标为(x_start,y_start),终点坐标为(x_end,y_end),scnum为显示缓冲区号
void lcd_line(unsigned char y_start,unsigned int x_start,unsigned char y_end,unsigned int x_end,unsigned char scnum) {
unsigned int add_x,add_y,dx,dy;
unsigned int l_long;//线段包含的点数
int sign_x,sign_y;//线段的走向
int x,y;
int nx,ny;
nx=x_start;ny=y_start;
if(x_end>=x_start){ dx=x_end-x_start;sign_x=1;}
else {dx=x_start-x_end;sign_x=-1;}
if(y_end>=y_start) {dy=y_end-y_start;sign_y=1;}
else {dy=y_start-y_end;sign_y=-1;}
l_long=dx+dy;
if(l_long==0) return;
add_x=l_long/2;
add_y=add_x;
while(x !=x_end||y !=y_end) {add_x+=dx;
add_y+=dy;
if(x !=x_end)
x=x_start+(add_x/l_long)*sign_x;
if(y !=y_end)
y=y_start+(add_y/l_long)*sign_y;
if(nx !=x||ny !=y) {
nx=x;ny=y;
lcd_pt(y,x,1,scnum);//在显示屏上显示一个点
}
}
}
3.4 字符辨识结果的处理
在触摸屏上书写完一个字符后,ePH1200会将辨识结果以数据包的形式输出,数据包的内容为若干个备选字符的Unicode/GB2312编码。根据这些编码,通过索引显示字模库,可将各备选字符在显示屏上依次显示出来;随后就可以根据需要,利用触摸屏或按键选取相应的字符。这样就完成了汉字的手写输入。
结语
汉字的手写输入解决方案多种多样,ePH1200作为一款手写体的辨识芯片,为小型嵌入式系统应用增加手写汉字输入功能带来了方便。本文介绍的只是针对特定微控制器MSP430的一种典型硬件接口和软件设计方法,但由于ePH1200接口简单,因此采用其他微控制器的应用,设计方法大同小异。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)