具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明进一步详细说明。
发明人在进行本发明的过程中发现,在进行数据采集的过程中,实际应用时,用户先打开摄像头,然后移至对准目标,摄像头进行数据采集,这是一个由运动到静止的过程。基于此,本发明对采集的视频帧的运动状态进行判断,当获知视频帧运动状态为运动到静止时,确定为清晰帧图像,将清晰帧图像上传到云端服务器;这样,只将清晰帧图像发送给云端服务器,节省了流量;且由于云端服务器基于清晰帧图像反馈识别结果,使识别结果更加有效。
参见图1,为本发明在移动终端进行实时图像识别的方法示意性流程图,其包括以下步骤:
步骤101,用移动终端摄像头实时进行数据采集,获取视频帧。
步骤102,对视频帧进行运动估计,确定出视频帧运动状态。
移动摄像头对画面进行逐帧采集,对实时获取的某一视频帧进行运动估计,以确定出该某一视频帧的运动状态。
运动估计的英文名称是(Motion Estimation),多运用在视频编码技术中。本发明将运动估计应用到对移动终端摄像头采集的视频帧进行处理,以确定出视频帧的运动状态。具体地,可采用运动矢量确定视频帧运动状态,包括:计算出视频帧与其上一视频帧之间的运动矢量,运动矢量包含运动幅度和运动方向;由运动矢量确定出视频帧运动状态。
采用运动估计计算出视频帧与其到上一视频帧之间的运动矢量,具体可采用如下方式:
获取上一视频帧的中心区域像素;
以视频帧的中心区域为起点,在其周围搜索出与上一视频帧中心区域像素相似的区域,确定出匹配块;
将视频帧的中心区域与匹配块之间的位置矢量作为运动矢量。
运动状态包括运动、静止、运动到静止、静止到运动,由运动矢量确定出视频帧运动状态的方式有多种,可根据实际需要设置,下面进行实例说明。由运动矢量确定出视频帧运动状态包括:
读取存储的背景运动状态;如果背景运动状态为静止,且从当前帧开始连续N帧运动幅度都大于第一运动阈值,N为自然数,当前帧为第1帧,则第1至N+1帧的运动状态为静止,背景运动状态仍为静止,将第N+1帧运动状态确定为静止到运动,并将背景运动状态修改为运动;如果背景运动状态为静止,且当前帧运动幅度小于第一运动阈值,则当前帧运动状态仍为静止,背景运动状态仍为静止;
如果背景运动状态为运动,且从当前帧开始连续N帧运动幅度都小于第二运动阈值,N为自然数,当前帧为第1帧,则第1至N+1帧的运动状态为运动,背景运动状态仍为运动,将第N+1
帧运动状态确定为运动到静止,并将背景运动状态修改为静止;如果背景运动状态为运动,且当前帧运动幅度大于第二运动阈值,则当前帧运动状态仍为运动,背景运动状态仍为运动。
进一步地,确定出背景运动状态为静止,且当前帧运动幅度小于第一运动阈值之后,该方法还包括:
判断运动幅度是否大于第三运动阈值,如果是,则当前帧运动为微运动,背景运动状态仍然为静止,如果从当前帧开始连续M帧的运动都是相同方向上的微运动,当前帧为第1帧,则将第M帧的运动状态确定为静止到运动,并将背景运动状态修改为运动,M为自然数。
背景运动状态为静止的情况下,如果由运动幅度获知上一视频帧之后有连续两帧的运动幅度都大于S1,且由运动方向获知所述连续两帧的方向相反,则判断为抖动情形,将所述连续两帧的运动状态仍确定为静止;
如果由运动幅度获知上一视频帧之后有连续两帧的运动幅度都大于S1,且由运动方向获知所述连续两帧的方向相同,则将连续两帧中最近一帧确定为静止到运动状态。
步骤103,判断视频帧运动状态是否为运动到静止,如果是,则确定为清晰帧图像,将清晰帧图像上传到云端服务器。
如果判断视频帧运动状态不为运动到静止,则不向云端服务器上传数据帧。
进一步地,为了提高判断清晰帧的准确性,在确定出视频帧运动状态为运动到静止之后,还可以进行角点检测:
计算出视频帧的角点特征数目;
判断角点特征数目是否大于角点数目阈值,如果是,则确定为清晰帧图像;否则,确定为模糊帧图像。
通常地,判断出视频帧运动状态为运动到静止时,确定为清晰帧图像,将清晰帧图像上传到云端服务器。在某些应用环境下,也可以基于多帧连续视频帧的运动状态都为静止,来自确定出上传清晰帧图像的时机;具体地,假设当前帧为第1帧,如果判断出第1帧至第N+1帧都为静止状态,则确定出第N+1帧为清晰帧,将清晰帧图像上传到云端服务器;N为自然数。步骤104,接收云端服务器反馈的识别结果,显示识别结果。
云端服务器接收视频帧后,将反馈相关描述信息,包括关于相关物品的购买情况、评论信息等。
本发明中,对采集到的视频帧进行运动估计,确定视频帧运动状态;在判断出视频帧运动状态为运动到静止时,确定为清晰帧图像,将清晰帧图像上传到云端服务器。本发明采用摄像头主动采集数据的方式,无需用户手动进行拍照,简便了操作;并且,只将清晰帧图像发送给云端服务器,而不是实时将采集的视频帧发送给云端服务器,节省了流量;由于云端服务器基于清晰帧图像反馈识别结果,使识别结果更加有效。
下面通过图2,对本发明在移动终端进行实时图像识别的方法进行实例说明,其包括以下步骤:
步骤201,用移动终端摄像头实时进行数据采集,获取视频帧。
步骤202,对视频帧进行运动估计,确定出视频帧运动状态。
为了方便说明,将进行运动估计的视频帧称为待处理视频帧。
本发明中,将现有用于视频编码的运动估计思想移植到移动终端摄像头对图像的处理,视频与移动终端摄像头的图像序列均有共同的连续图像相关性,因此运动估计算法是可以通用的。但是,二者又有不同点,比如移动终端摄像头获取的图像分辨率往往较低,并且在用户实际使用的时候移动终端不会有太大运动幅度的运动;更主要的是,视频编码中采用针对全局的运动估计算法,这种计算方式非常慢,即使在PC上也往往不能达到实时的效果。因此,针对两者的不同,本发明对应用于视频编码的运动估计算法进行改进,使其在各种移动终端上也能达到非常高效的性能,同时消耗较少的CPU资源,甚至使消耗的CPU资源基本可以忽略不计。参见图3,为本发明进行运动估计方法流程图实例,其包括以下步骤:
步骤301,获取待处理视频帧的中心区域像素,并存储。
步骤302,获取待处理视频帧的上一视频帧的中心区域像素。
移动终端每次采集视频帧后,都将存储该视频帧的中心区域像素;具体地,存储中心区域的像素灰度值。本步骤中,提取存储的与待处理视频帧紧邻的上一视频帧的中心区域像素灰度值。
步骤303,以待处理视频帧的中心区域为起点,在其周围搜索出与上一视频帧中心区域像素相似的区域,确定出匹配块。
下面结合图4对确定匹配块的方法进行详细说明。图中,上一视频帧中标有网格的方形区域为上一视频帧中心区域,待处理视频帧中的虚线区域为待处理视频帧中心区域,对虚线框周围的一个有限邻域内采用由里到外的方式进行搜索,找到与上一视频帧中心区域像素灰度值相似的区域,该区域称为匹配块,待处理视频帧中标有网格的方形区域便为搜素出的匹配块。
本实例中,将上一视频帧的中心区域(x,y)像素灰度表示为I(x,y),将待处理视频帧中用于与上一视频帧中心区域进行匹配的搜索块表示为I'(x,y),将两者之间差的平方和作为块相似度的指标,假设块大小为N乘以N个像素,则误差平方和S为:
按照该公式计算出S最小的块,作为匹配块;根据匹配块到上一视频帧中心区域的位置确定出两帧之间的运动矢量,图4中箭头标出了运动方向。上述搜索过程采用逼近算法,具体地,首先进行大步长的移动,找到相似度相对较小的区域;然后在区域内减小步长,逐步逼近得到最终的搜索结果。为了保证算法的速度,如果视频帧像素太大,超过了一定阈值,可以先进行降采样处理,例如预先将2000乘以2000的数据帧降采样为400乘以400。图4中,用矩形区域表示匹配块;在实际应用中,还可以采用菱形匹配,圆形匹配等其形状块进行匹配。
在运动估计中,除了采用上述误差平方和的相似度判定方法外,还可采用均方误差、绝对误差和、平均误差和等其他相似度判定方法。并且,除了采用逼近搜索算法外,在实际应用中,还可采用三步法、钻石搜索法等其他搜索算法。
步骤304,计算出待处理视频帧的中心区域与匹配块之间的位置矢量,作为运动矢量。
计算出的移动矢量包含运动方向和运动幅度。
步骤305,由运动矢量确定出视频帧运动状态。
本发明中,视频帧运动状态主要有以下4种状态:运动、静止、运动到静止、静止到运动;其中,运动到静止被确定为上传图像的时机。
在实际应用中,对于运动到静止和静止到运动状态需要采取不同的幅度阈值,在图像识别的应用中,通常运动到静止的幅度阈值较高,该幅度阈值用第二运动阈值表示;静止到运动的幅度阈值较低,此时的幅度阈值用第一运动阈值表示。第一运动阈值小于第二运动阈值。
移动终端存储了背景运动状态,背景运动状态可以从存储的状态中提取。然后结合背景运动状态、第一运动阈值、第二运动阈值,便可确定出待处理视频帧的运动状态。具体地:
读取存储的背景运动状态;
如果背景运动状态为静止,且从当前帧开始连续N帧运动幅度都大于第一运动阈值,N为自然数,当前帧为第1帧,则第1至N+1帧的运动状态为静止,背景运动状态仍为静止,将第N+1帧运动状态确定为静止到运动,并将背景运动状态修改为运动;如果背景运动状态为静止,且当前帧运动幅度小于第一运动阈值,则当前帧运动状态仍为静止,背景运动状态仍为静止;
如果背景运动状态为运动,且从当前帧开始连续N帧运动幅度都小于第二运动阈值,N为自然数,当前帧为第1帧,则第1至N+1帧的运动状态为运动,背景运动状态仍为运动,将第N+1帧运动状态确定为运动到静止,并将背景运动状态修改为静止;如果背景运动状态为运动,且当前帧运动幅度大于第二运动阈值,则当前帧运动状态仍为运动,背景运动状态仍为运动。
上述确定出背景运动状态为静止,且当前帧运动幅度小于第一运动阈值之后,该方法还包括:
判断运动幅度是否大于第三运动阈值,如果是,则当前帧运动为微运动,背景运动状态仍然为静止,如果从当前帧开始连续M帧的运动都是相同方向上的微运动,当前帧为第1帧,则将第M帧的运动状态确定为静止到运动,并将背景运动状态修改为运动,M为自然数。
本实例中,采用“状态保持”的策略,对于偶发性的单次静止或者运动状态不进行状态切换,只有累积两次以上的状态变化时,才进行状态切换,通过这种策略达到了状态的稳定性。用S1表示第一运动阈值,用S2表示第二运动阈值,用S3表示第三运动阈值,用S表示待处理视频帧的运动幅度,假设通常需要累积两次状态变化才进行状态切换,而对于微运动需要累积五次状态变化才进行状态切换;相应的“状态保持”策略具体包括:
一)背景运动状态为静止的情况:
1)当S>S1时,确定待处理视频帧(用第Y帧表示)为静止状态,背景运动状态仍为静止,然后再判断第Y+1帧的运动幅度是否仍然大于S1,如果是,则确定第Y+1帧为静止到运动状态,并将背景运动状态修改为运动;
2)当S<S1时,确定待处理视频帧为静止状态,背景运动状态仍为静止;
3)当S3<S<S1时,确定待处理视频帧(用第Z帧表示)为微运动,且第Z至Z+3帧判断为相同方向上的微运动,但第Z至Z+3帧仍然确定为静止状态,如果第Z+4帧也为相同方向上的微运动,则将第Z+4帧确定为静止到运动状态,并将背景运动状态修改为运动。累积次数可根据需要设置。
二)背景运动状态为运动的情况:
1)当S<S2时,确定待处理视频帧(用第Y帧表示)为运动状态,背景运动状态仍为运动,然后再判断第Y+1帧的运动幅度是否仍然小于S2,如果是,则确定第Y+1帧为运动到静止状态,并将背景运动状态修改为静止;
2)当S>S2时,确定待处理视频帧为运动状态,背景运动状态仍为运动。
进一步地,还可以对手抖情况进行判定:如果出现“忽左忽右”,也就是出现运动矢量方向出现相反的情况,则判定为是“手抖”情形,此情形下如果背景为静止状态,则暂不修改运动状态,直到产生连续相同方向的运动为止。
步骤306,判断是否继续进行运动估计,如果是,则返回执行步骤301,否则结束流程。
如果步骤201中持续获取到视频帧,则本步骤将继续对获取的视频帧进行运动估计。
步骤203,判断视频帧运动状态是否为运动到静止,如果是,则执行步骤204;否则,结束流程。
刚打开摄像头的时候,可以将状态默认为静止;之后,用户将摄像头移至目标,这个过程将经历静止到运动、运动、运动到静止。
判断出视频帧的运动状态为运动到静止,则将相应视频帧作为待检测视频帧。
步骤204,计算出待检测视频帧的角点特征数目。
角点检测算法有多种,具体如FAST角点检测算法、Harris角点检测算法、CHOG角点检测算法、FREAK角点检测算法等,可任选其一;这些算法都有较好的角点检测能力。根据有效图片的定义,第一要求清晰,第二要求具有较为丰富的纹理;基于这两点,可以采用FAST角点检测算法。在图片不清晰的时候,往往FAST角点较少,比如在大片空白或者单一颜色的图片中,FAST角点很少,因此只需要对于图片的FAST角点数目进行判断,即可确定是否为有效图片。
并且,除了采用角点检测算法进行图片有效性判别外,在实际应用中,还可采用基于梯度特征、边缘特征等的判别图像有效性的算法。
步骤205,判断角点特征数目是否大于角点数目阈值,如果是,则确定为清晰帧图像,将清晰帧图像上传到云端服务器;否则,确定为模糊帧图像。
步骤206,接收云端服务器反馈的识别结果,显示识别结果。
参见图5,为本发明进行实时图像识别的移动终端结构示意图,该移动终端包括数据采集单元、运动估计单元、清晰帧判断单元和识别结果显示单元;
所述数据采集单元,用移动终端摄像头实时进行数据采集,获取视频帧,发送给所述运动估计单元;
所述运动估计单元,对视频帧进行运动估计,确定出视频帧运动状态,发送给所述清晰帧判断单元;
所述清晰帧判断单元,判断视频帧运动状态是否为运动到静止,如果是,则确定为清晰帧图像,将清晰帧图像上传到云端服务器;
所述识别结果显示单元,接收云端服务器反馈的识别结果,显示识别结果。
较佳地,所述运动估计单元包括运动矢量计算子单元和状态确定子单元;
所述运动矢量计算子单元,计算出视频帧与其上一视频帧之间的运动矢量,发送给所述状态确定子单元;运动矢量包含运动幅度和运动方向;
所述状态确定子单元,由运动矢量确定出视频帧运动状态。
较佳地,所述状态确定子单元包括状态确定模块,读取存储的背景运动状态;如果背景运动状态为静止,且从当前帧开始连续N帧运动幅度都大于第一运动阈值,N为自然数,当前帧为第1帧,则第1至N+1帧的运动状态为静止,背景运动状态仍为静止,将第N+1帧运动状态确定为静止到运动,并将背景运动状态修改为运动;如果背景运动状态为静止,且当前帧运动幅度小于第一运动阈值,则当前帧运动状态仍为静止,背景运动状态仍为静止;
如果背景运动状态为运动,且从当前帧开始连续N帧运动幅度都小于第二运动阈值,N为自然数,当前帧为第1帧,则第1至N+1帧的运动状态为运动,背景运动状态仍为运动,将第N+1帧运动状态确定为运动到静止,并将背景运动状态修改为静止;如果背景运动状态为运动,且当前帧运动幅度大于第二运动阈值,则当前帧运动状态仍为运动,背景运动状态仍为运动。
较佳地,所述状态确定模块,确定出背景运动状态为静止,且当前帧运动幅度小于第一运动阈值之后,还判断运动幅度是否大于第三运动阈值,如果是,则当前帧运动为微运动,背景运动状态仍然为静止,如果从当前帧开始连续M帧的运动都是相同方向上的微运动,当前帧为第1帧,则将第M帧的运动状态确定为静止到运动,并将背景运动状态修改为运动,M为自然数。
较佳地,所述运动矢量计算单元包括运动矢量确定模块,获取上一视频帧的中心区域像素;以视频帧的中心区域为起点,在其周围搜索出与上一视频帧中心区域像素相似的区域,确定出匹配块;将视频帧的中心区域与匹配块之间的位置矢量作为运动矢量。
较佳地,所述清晰帧判断单元包括运动到静止确定模块和角点检测模块;
所述运动到静止确定模块,判断视频帧运动状态是否为运动到静止,如果是,则向所述角点检测模块发送启动指令;
所述角点检测模块,接收来自所述运动到静止确定模块的启动指令,计算出视频帧的角点特征数目;判断角点特征数目是否大于角点数目阈值,如果是,则确定为清晰帧图像,将清晰帧图像上传到云端服务器;否则,确定为模糊帧图像。
本发明实施例所描述的移动终端可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与计算机可读的媒介上,或以一个或多个指令或代码形式传输于计算机可读的媒介上。计算机可读媒介包括电脑存储媒介和便于使得让计算机程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的计算机可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊计算机、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何链接都可以被适当地定义为计算机可读媒介,所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在计算机可读媒介中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。