一种简谱图像的自动识别和演奏的方法转让专利

申请号 : CN201210086072.3

文献号 : CN102663423B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邹征夏史振威姚连生冯亚春孙诗炎

申请人 : 北京航空航天大学

摘要 :

一种简谱图像的自动识别和演奏的方法,该方法有三大步骤:步骤一、简谱图像预处理;步骤二、简谱基元识别;步骤三、数字音频的生成和播放。本发明在深入分析简谱特征基础上,克服了简谱识别的诸多难点,提出一整套简谱自动识别和智能播放方法。该方法可以自动识别印刷体简谱、带歌词简谱、简谱与五线谱混合谱、简谱与吉他谱混合谱等多种形式的印刷体简谱,正确率均在95%以上;此外,该方法可以模拟钢琴、小提琴、吉他等多种乐器对简谱的演奏效果,并且可以实现简谱的实时识别和播放。

权利要求 :

1.一种简谱图像的自动识别和演奏的方法,其特征在于:该方法具体步骤如下:步骤一:简谱图像预处理

此阶段的输入为一幅简谱图像,输出为一张剔除歌词、水印无关信息,并经过旋转校正的简谱图像;其作用是为简谱基元的识别窗口划定做好准备,其具体实现过程如下:

1.1、自动检测简谱倾斜角度并校正

为了纠正扫描输入时造成的简谱倾斜,此阶段采用Hough变换直线检测方法检测简谱下划线倾斜角度,并对倾斜的简谱图像进行旋转校正;

1.2、自动去除水印

简谱图片的彩色区域,一定是图片中水印的区域,剔除简谱图片中的彩色区域中的信息,避免水印对识别造成的干扰;

1.3、简谱图像二值化

将输入的简谱图像转换成黑白图像,目标区域像素值为1,背景区域像素值为0;此阶段二值化的方法采用全局最大类间方差阈值法即OTSU,即按照整幅简谱图像灰度特性确定二值化阈值,将简谱图像分成背景和目标两部分,使背景和目标之间的方差最大;

1.4、自动分离标题、歌词无关信息

从形态各异的歌词、标题及其他干扰信息中提取简谱行的位置是后续识别的基础;首先,将去除水印、旋转校正并二值化之后的简谱图片进行归一化横向投影,得到一个列向量ColumnSum,设图片大小为M×N,则其中,f(x,y)表示整张简谱第x行第y列的像素值,N为简谱图片列数;

但在某些简谱中,由于行与行之间的结构过于紧凑,会造成横向投影的粘连,剔除该列向量中元素值小于0.03的元素,剩下的元素所在位置就是数字音符主干、歌词以及标题主干所在行的位置;

将小节线作为含有简谱的行的特征进行提取,分离出简谱段;首先,用3×3的掩膜对分离出的每一行块灰度图像进行滤波,

其中,f(i,j)表示简谱块中第i行第j列的像素值; 表示滤波后简谱块中第i行第j列的像素值;

将滤波后的行块进行二值化处理,对二值化处理之后的简谱块进行纵向归一化投影,其中,fB(i,j)为滤波并进行二值化后简谱块中第i行第j列的像素值,I为该简谱块的总行数;

找出RowSum中大于0.6的元素对应的简谱块中的区域,对这些小区域依次进行Harris角点检测,如果某个小区域的角点数等于2,则认为该行块存在小节线,确认该行块是含有简谱部分的行;否则将该行块所有信息滤除;经过以上处理后,已去除任何无关信息行得到简谱的正文部分;

最后将每一块含有简谱的简谱行的起始行坐标存储在向量RowStart中,将终止行坐标存储在向量RowEnd中,则RowStart(m)、RowEnd(m)就表示简谱中第m行有用信息所在的起始行坐标和终止行坐标;

步骤二:简谱基元识别

其作用是对简谱基元位置进行自动定位、智能识别,识别简谱基元所使用的方法为支持向量机即Support Vectors Machine,SVM;其具体实现过程如下:

2.1、识别窗口定位

识别窗口的定位包含两方面内容:1)、对存在简谱的谱段中简谱符号基元的位置进行定位,以确定每一个有效基元的位置坐标;2)对简谱标题附近的调式符号基元位置进行定位,以确定简谱调式符号基元的位置坐标,为基元的识别做好准备;

2.1.1对存在简谱的谱段中简谱符号基元的位置进行定位首先将包含简谱的行的主干部分进行纵向投影,根据投影所获得的行向量来分离出每一个单独的符号基元的位置,并且将每一个符号基元的列起始坐标存储在向量ColumnStart中,将列终止坐标存储在向量ColumnEnd中;则ColumnStart(n)、ColumnEnd(n)就表示该简谱行中第n个基元所在的起始列坐标和终止列坐标;当前定位位置称之为当前符号基元的“识别窗口”;

为了获得更好的简谱图像二值化效果,尽可能多的保留每一块识别窗口所包含的有用信息,此阶段对每一个含有基元的“识别窗口”进行第二次二值化处理,方法是抽取各个识别窗口对应的灰度图像的区域,利用局部最大类间方差法对每个简谱基元区域进行二值化处理;

二值化之后将每个含有简谱基元的区域降采样整合为20×20的标准样本,用于接下来分类器识别,绝大部分的简谱中只分离得到14类有用的基元,它们是:数字:“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”,符号:“浮点”、“无效字符”、“小节线”、“延音线”、“升记号”、“降记号”;

2.1.2对简谱标题部分的调式符号位置进行定位在每张简谱图片的标题附近都会注明简谱的调式,如“1=C”-C大调演奏方式、“1=bB”-降B大调演奏方式,首先对表示调式的英文大写字母C、D、E、F、G、A、B及升降记号进行定位,一些简谱在标题附近混杂有网址、作者姓名信息,这其中也会包含很多英文大写字母,会对自动检测调式符号的定位造成干扰,通过观察发现,每一张简谱在表示调式的字母前都有“=”这一明显特征,通过模板匹配和投影法的结合使用找到“=”所在的位置,继而确定表示调式的英文大写字母、升降记号的位置,接下来同样采取2.1.1中的方法,将含有英文字母、升降记号的识别窗口局部二值化,再整合为20×20的标准字母样本,用于接下来分类器的识别;

2.2、构建样本分类器

选用“支持向量机”即SVM作为样本分类的方法,SVM在解决小样本、非线性及高维模式识别中表现出特有的优势,并能够推广应用到函数拟合其他机器学习问题中;

采用一对一即one-against-one的多分类方法,在该方法中,在每两类样本间都需要训练一个SVM二值分类器,然后将所有的分类器的分类结果进行投票,来决定属于多类样本中的哪一类;对于N分类问题,一共需要训练 个SVM二值分类器;

2.3、多分类识别

此阶段需要对三方面内容进行识别:1)对音符基元的分类,2)对基元周围区域符号的识别,3)对简谱调式基元的分类;

2.3.1音符基元的分类

音符 基 元的 基本 类 型为:“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“浮 点”、“无效字符”、“小节线”、“延音线”、“升记号”、“降记号”,共14类,所以,一共需要训练个二值分类器;

这里没有对样本进行额外的特征提取,而是直接将二值化后20×20的样本拉伸为

400×1的特征向量用于分类器的训练;训练选取的核函数为线性核函数即linear,选取惩罚因子C=8000,每个二值分类器训练所输入的正负样本各250个;

2.3.2基元周围区域符号的识别

对基元分类完成之后,接下来要对基元周围区域可能出现的辅助符号进行识别,方法如下:

设当前识别窗口位于第m行简谱的第n个基元上,则行坐标RowStart(m)、RowEnd(m)和列坐标ColumnStart(n)、ColumnEnd(n)唯一确定了当前识别窗口的位置,接下来在识别窗口的上方和下方分别延拓DetaTop和DetaBase个像素宽度,设DetaTop=c1[RowStart(m)-RowEnd(m)]DetaEnd=c2[RowStart(m)-RowEnd(m)]经过统计得知,当曲谱行与行之间结构较为紧凑时,取c1=0.8,c2=0.5;当曲谱行与行之间结构较为松散时,取c1=2,c2=2;

接下来对识别窗口上方和下方延拓区进行分析,进行横向投影和纵向投影,根据两条投影向量确定上下方延拓区是否存在高音记号、低音记号和下划线;

2.3.3简谱调式基元的分类

简谱调式基元的识别实质上是对C、D、E、F、G、A、B七个大写英文字母以及“升记号”、“降记号”共九类样本的识别,识别方法同样选用SVM,选取一对一即one-against-one的方法构建多类分类器,共需要训练 个二值分类器;这里同样没有对调式基元样本进行额外的特征提取,而是直接将二值化后20×20的样本拉伸为400×1的特征向量用于分类器的训练;训练选取的核函数为线性核函数即linear,选取惩罚因子C=8000,每个二值分类器训练所输入的正负样本各15个;

步骤三:数字音频的生成及播放

其作用是对已经识别完毕的简谱进行后续处理,转化为数字音频文件,并增加伴奏、和声对其进行渲染,使之更加悦耳、动听;其具体实现过程如下:

3.1、音符编码

音符基元识别结束后,需要对其进行编码处理;每个音符的编码为一个8位二进制编码,占用内存空间1byte;

编码的高四位表示“节奏”、“高音低音记号”信息,是对识别窗口上下延拓区信息的记录;编码的低四位表示“数字音高”、“小节线”、“延音线”信息,是对识别窗口内信息的记录;

3.2、构建音色库

为了模拟各种乐器的播放效果,采集了钢琴、吉他、小号、小提琴10类乐器的音色,音高范围从C大调低音do,138.541赫兹,到C大调高音xi,988.256赫兹;将其转化为WAV格式的标准音频存储在音色库中供系统调用;

3.3音符语义理解、音频播放

对一整张简谱完成识别、编码之后,需要结合每一个音符所处的上下文环境来对其实际含义进行理解,这里采用的是一种多级流水线式的理解型智能播放方法,即每次读取音符编码队列中的某个编码,同时对之前某一位编码对应的音频文件进行播放,同时根据编码队列自动计算出该音符的播放时长,并且智能添加变奏、调整音强;

3.4、伴奏的构建

提供一种简单有效的自动添加伴奏的方法,使播放效果更加饱满、富有感染力;

3.4.1自动调整强音

在每次将要播放当前音符时,查询前一个音符是否为“小节线”,如果是,则该音符作为每小节的第一拍,音强需要加重,否则不做处理;

3.4.2自动添加鼓点

添加鼓点的原理同上,但之前需要计算两个小节线之间的节拍数是2拍、3拍还是4拍;

如果每两个小节间的音符共有2拍,则歌曲是 拍节奏型,在播放第一拍的同时播放拍节奏鼓点;

如果每两个小节间的音符共有3拍,则歌曲是 拍节奏型,在播放第一拍的同时播放拍节奏鼓点;

如果每两个小节间的音符共有4拍,则歌曲是 拍节奏型,在播放第一拍的同时播放拍节奏鼓点。

说明书 :

一种简谱图像的自动识别和演奏的方法

(一)技术领域:

[0001] 简谱是大家非常熟悉和常用的乐谱之一,但目前在光学乐谱识别(Optical Music Recognition,OCR)领域,研究焦点都集中在五线谱识别上,而对简谱识别的研究几乎处于空白。本发明涉及一种简谱图像的自动识别和演奏的方法,属于光学乐谱识别领域。(二)背景技术:
[0002] 乐谱的发明是人类音乐史上的里程碑,它的出现使人们可以在一个相对标准的平台上进行音乐的交流和传承。古往今来的优秀音乐作品大都以纸质乐谱的形式保留下来,
直至今天,纸质乐谱仍是表达和描述音乐作品的主要载体。
[0003] 近年来,随着计算机技术的飞速发展,越来越多的纸式文档迫切需要通过识别技术,自动转换为数字形式保存下来,以便于检索、管理和利用。光学字符识别技术(Optical Character Recognition,OCR)近年来已经得到蓬勃发展。与此同时,为了解决纸质乐谱向数字音乐智能转化这一难题,光学乐谱识别(Optical Music Recognition,OMR)这一项新
技术应运而生。
[0004] OMR研究历史已久,许多学者在OMR领域开展了大量有价值的开创性工作,在他们的文献中提出了许多创造性的思想和完整方法。但是在OMR领域,研究焦点都集中在五线
谱识别上,对简谱识别的研究几乎处于空白阶段。而简谱却是我国最为常见、最为国人所熟知的乐谱形式,绝大多数业余音乐爱好者最常接触到的曲谱形式就是简谱,而且大部分的
民乐作品也都是以纸质简谱的形式保留记录下来。所以,实现纸质简谱向数字音乐或五线
谱智能转化显得尤为迫切。
[0005] 在五线谱中,所有的音符都叠加在五条谱线及上加一线、下加一线之间,音符高度和形状也有一定的标准,如高音谱号、升降记号都有规定的格式和书写规范。
[0006] 相对于五线谱自动识别,简谱自动识别具有更大的难度和挑战性。
[0007] 技术难点1:在简谱中,7个数字音符分散在各个谱段空间中,在每个数字音符周围还会有各种符号和标记来表示其音高、时长及节奏。符号之间没有规范的空间约束,书写极为随意、松散,无固定标准。
[0008] 技术难点2:数字音符的字体变化多样,甚至在同一张简谱中会出现多种字体。
[0009] 技术难点3:简谱中常常混杂着歌词、标题等等无关信息,一些从简谱网站上下载的简谱甚至会夹杂网站的广告、网址、水印等等。
[0010] 技术难点4:在扫描简谱输入阶段,常常会造成简谱图像的倾斜,实验表明,当简谱倾斜角度大于5度时,对识别正确率影响很大。
[0011] 基于以上诸多难点和不确定因素,目前来看,简谱向数字音乐的转化依然是靠人手工完成,还没有一套完整的简谱自动识别和智能播放方法问世。本发明在深入分析简谱
特征基础上,提出一整套简谱自动识别和播放方法,这项全新的方法必将带来广阔的市场
和应用前景。
(三)发明内容:
[0012] 1、目的:本发明在深入分析简谱特征基础上,提供一种简谱图像的自动识别和演奏的方法。该方法可以很好的识别印刷体简谱、带歌词简谱、简谱与五线谱混合谱、简谱与吉他谱混合谱等多种形式的印刷体简谱,正确率均在95%以上。并且对于带有大面积水印、网址等等干扰内容的简谱,仍具有90%以上的正确率。以一张648×932的jpeg格式的简谱图像为例,如图1所示,经过本发明提供的方法进行识别并转化为音符编码后,所占内存空间仅数百字节,是原图像数据量的1/1000。此外,除了准确识别各类型简谱,本发明还提出一整套简谱音乐播放方法,可以模拟钢琴、小提琴、吉他等多种乐器对简谱的演奏效果,并且可以实现曲谱的实时识别和播放。
[0013] 2、技术方案:本发明在MATLAB R2010b语言环境下实现,计算机配置:Pentium(R)Dual-core CPU T4200@2.00GHz。
[0014] 总体方法流程图如图2所示,本发明一种简谱图像的自动识别和演奏的方法,该方法由“简谱图像预处理”、“简谱基元识别”和“数字音频的生成和播放”三大步骤构成。
[0015] 步骤一、“简谱图像预处理”
[0016] 此阶段的输入为一幅简谱图像,输出为一张剔除歌词、水印等无关信息,并经过旋转校正的简谱图像。其作用是为简谱基元的识别窗口划定做好准备,其具体实现过程如下:
[0017] 11、“自动检测简谱倾斜角度并校正”
[0018] 为了纠正扫描输入时造成的简谱倾斜,此阶段采用Hough变换直线检测方法检测简谱下划线倾斜角度,并对倾斜的简谱图像进行旋转校正。
[0019] 1.2、“自动去除水印”
[0020] 简谱图片的彩色区域,一定是图片中水印的区域。剔除简谱图片中的彩色区域中的信息,可以避免水印对识别造成的干扰。
[0021] 1.3、“简谱图像二值化”
[0022] 将输入的简谱图像转换成黑白图像,目标区域像素值为1,背景区域像素值为0。此阶段二值化的方法采用全局最大类间方差阈值法(OTSU),即按照整幅简谱图像灰度特性
确定二值化阈值,将简谱图像分成背景和目标两部分,使背景和目标之间的方差最大。
[0023] 1.4、“自动分离标题、歌词等无关信息”
[0024] 从形态各异的歌词、标题及其他干扰信息中提取简谱行的位置是后续识别的基础。首先,将去除水印、旋转校正并二值化之后的简谱图片进行归一化横向投影,得到一个列向量ColumnSum,如图3所示。设图片大小为M×N,则
[0025]
[0026] 其中f(x,y)表示整张简谱第x行第y列的像素值,N为简谱图片列数。
[0027] 但是在某些简谱中,由于行与行之间的结构过于紧凑,会造成横向投影的粘连,如图4所示。剔除该列向量中元素值小于0.03的元素,剩下的元素所在位置就是数字音符主干、歌词以及标题主干所在行的位置。
[0028] 将小节线作为含有简谱的行的特征进行提取,分离出简谱段。首先,用如图5所示3×3的掩膜对分离出的每一行块(灰度图像)进行滤波。
[0029]
[0030]
[0031] 其中,f(i,j)表示简谱块中第i行第j列的像素值; 表示滤波后简谱块中第i行第j列的像素值。
[0032] 将滤波后的行块进行二值化处理,对二值化处理之后的简谱块进行纵向归一化投影,
[0033]
[0034] 其中fB(i,j)为滤波并进行二值化后简谱块中第i行第j列的像素值,I为该简谱块的总行数。
[0035] 找出RowSum中大于0.6的元素对应的简谱块中的区域。对这些小区域依次进行Harris角点检测,如果某个小区域的角点数等于2,则认为该行块存在小节线,可以确认该行块是含有简谱部分的行;否则将该行块所有信息滤除。经过以上处理后,已去除任何无关信息行(标题、歌词、动态标记等),得到简谱的正文部分。
[0036] 最后将每一块含有简谱的简谱行的起始行坐标存储在向量RowStart中,将终止行坐标存储在向量RowEnd中。则RowStart(m)、RowEnd(m)就表示简谱中第m行有用信息
所在的起始行坐标和终止行坐标。
[0037] 步骤二、“简谱基元识别”
[0038] 其作用是对简谱基元位置进行自动定位、智能识别,识别简谱基元所使用的方法为支持向量机(Support Vectors Machine,SVM)。其具体实现过程如下:
[0039] 2.1、“识别窗口定位”
[0040] 识别窗口的定位包含两方面内容。1)、对存在简谱的谱段中简谱符号基元的位置进行定位,以确定每一个有效基元的位置坐标,如图6a所示;2)对简谱标题附近的调式符
号基元位置进行定位,以确定简谱调式符号基元的位置坐标,如图6b所示。为基元的识别
做好准备。
[0041] 2.1.1“对存在简谱的谱段中简谱符号基元的位置进行定位”
[0042] 首先将包含简谱的行的主干部分(不包含数字音符下方的小节线和上方的浮点)进行纵向投影,根据投影所获得的行向量来分离出每一个单独的符号基元的位置,并
且将每一个符号基元的列起始坐标存储在向量ColumnStart中,将列终止坐标存储在向量
ColumnEnd中。则ColumnStart(n)、ColumnEnd(n)就表示该简谱行中第n个基元所在的起
始列坐标和终止列坐标。当前定位位置称之为当前符号基元的“识别窗口”。
[0043] 为了获得更好的简谱图像二值化效果,尽可能多的保留每一块识别窗口所包含的有用信息,此阶段对每一个含有基元的“识别窗口”进行第二次二值化处理。方法是抽取各个识别窗口对应的灰度图像的区域,利用局部最大类间方差法对每个简谱基元区域进行二
值化处理。
[0044] 二值化之后将每个含有简谱基元的区域降采样整合为20×20的标准样本,用于接下来分类器识别,绝大部分的简谱中只分离得到14类有用的基元,如图7所示,它们是:
[0045] 数字:“0(即空拍)”、“1”、“2”、“3”、“4”、“5”、“6”、“7”
[0046] 符号:“浮点”、“无效字符”、“小节线”、“延音线”、“升记号”、“降记号”[0047] 2.1.2“对简谱标题部分的调式符号位置进行定位”
[0048] 在每张简谱图片的标题附近都会注明简谱的调式,如“1=C”(C大调演奏方式)、“1=bB”(降B大调演奏方式)。首先对表示调式的英文大写字母C、D、E、F、G、A、B及升降记号进行定位。一些简谱在标题附近混杂有网址、作者姓名等信息,这其中也会包含很多英文大写字母,会对自动检测调式符号的定位造成极大的干扰。通过观察发现,每一张简谱在表示调式的字母前都有“=”这一明显特征,通过模板匹配和投影法的结合使用可以找到“=”所在的位置,继而确定表示调式的英文大写字母、升降记号的位置。接下来同样采取2.1.1中的方法,将含有英文字母、升降记号的识别窗口局部二值化,再整合为20×20的标
准字母样本,用于接下来分类器的识别。
[0049] 2.2、“构建样本分类器”
[0050] 本发明中选用“支持向量机”(SVM)作为样本分类的方法。SVM是一种新式机器学习方法,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
[0051] 本发明中采用一对一(one-against-one)的多分类方法。在该方法中,在每两类样本间都需要训练一个SVM二值分类器,然后将所有的分类器的分类结果进行投票,来决
定属于多类样本中的哪一类。对于N分类问题,一共需要训练 二值
分类器。
[0052] 2.3、“多分类识别”
[0053] 此阶段需要对三方面内容进行识别:1)对音符基元的分类,2)对基元周围区域符号的识别,3)对简谱调式基元的分类。
[0054] 2.3.1“音符基元的分类”
[0055] 音符基元的基本类型为:“0”(即空拍)、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“浮点”、“无效字符”、“小节线”、“延音线”、“升记号”、“降记号”,共14类,如图7所示。所以一共需要训练 个二值分类器。
[0056] 本发明没有对样本进行额外的特征提取,而是直接将二值化后20×20的样本拉伸为400×1的特征向量用于分类器的训练。训练选取的核函数为线性核函数(linear),选
取惩罚因子C=8000,每个二值分类器训练所输入的正负样本各250个。
[0057] 2.3.2“基元周围区域符号的识别”
[0058] 对基元分类完成之后,接下来要对基元周围区域可能出现的辅助符号进行识别。方法如下:
[0059] 设当前识别窗口位于第m行简谱的第n个基元上,则行坐标RowStart(M)、RowEnd(M)和列坐标ColumnStart(n)、ColumnEnd(n)唯一确定了当前识别窗口的位置。接
下来在识别窗口的上方和下方分别延拓DetaTop和DetaBase个像素宽度,如图8所示。设
[0060] DetaTop=c1[RowStart(m)-RowEnd(m)]
[0061] DetaEnd=c2[RowStart(m)-RowEnd(m)]
[0062] 经过统计得知,当曲谱行与行之间结构较为紧凑时,取c1=0.8,c2=0.5;当曲谱行与行之间结构较为松散时,取c1=2,c2=2。
[0063] 接下来对识别窗口上方和下方延拓区进行分析。进行横向投影和纵向投影,根据两条投影向量很容易确定上下方延拓区是否存在高音记号、低音记号和下划线。
[0064] 2.3.3“简谱调式基元的分类”
[0065] 简谱调式基元的识别实质上是对C、D、E、F、G、A、B七个大写英文字母以及“升记号”、“降记号”共九类样本的识别。识别方法同样选用SVM,选取一对一(one-against-one)的方法构建多类分类器,共需要训练 个二值分类器。本发明同样没有对调式基元样本进行额外的特征提取,而是直接将二值化后20×20的样本拉伸为400×1的
特征向量用于分类器的训练。训练选取的核函数为线性核函数(linear),选取惩罚因子C
=8000,每个二值分类器训练所输入的正负样本各15个。
[0066] 步骤三、“数字音频的生成及播放”
[0067] 主要作用是对已经识别完毕的简谱进行后续处理,转化为数字音频文件,并增加伴奏、和声对其进行渲染,使之更加悦耳、动听。其具体实现过程如下:
[0068] 3.1、“音符编码”
[0069] 音符基元识别结束后,需要对其进行编码处理。本发明中每个音符的编码为一个8位二进制编码,占用内存空间1byte。
[0070] 编码的高四位表示“节奏”、“高音低音记号”信息,是对识别窗口上下延拓区信息的记录;编码的低四位表示“数字音高”、“小节线”、“延音线”等信息,是对识别窗口内信息的记录。
[0071] 3.2、“构建音色库”
[0072] 为了模拟各种乐器的播放效果,本发明采集了钢琴、吉他、小号、小提琴等10类乐器的音色。音高范围从C2(138.541Hz,C大调低音do)到B4(988.256Hz,C大调高音xi)。将其转化为WAV格式的标准音频存储在音色库中供系统调用。
[0073] 3.3“音符语义理解、音频播放”
[0074] 对一整张简谱完成识别、编码之后,需要结合每一个音符所处的上下文环境来对其实际含义进行理解。本发明中采用的是一种多级流水线式的理解型智能播放方法。即每
次读取音符编码队列中的某个编码,同时对之前某一位编码对应的音频文件进行播放,流
程框图如图9所示,同时根据编码队列自动计算出该音符的播放时长,并且智能添加变奏、调整音强。
[0075] 3.4、“伴奏的构建”
[0076] 本发明提供一种简单有效的自动添加伴奏的方法,可以使播放效果更加饱满、富有感染力。
[0077] 3.4.1“自动调整强音”
[0078] 在每次将要播放当前音符时,查询前一个音符是否为“小节线”,如果是,则该音符作为每小节的第一拍,音强需要加重,否则不做处理。
[0079] 3.4.1“自动添加鼓点”
[0080] 添加鼓点的原理同上,但之前需要计算两个小节线之间的节拍数是2拍、3拍还是4拍。
[0081] 如果每两个小节间的音符共有2拍,则歌曲是 拍节奏型,在播放第一拍的同时播放 拍节奏鼓点;
[0082] 如果每两个小节间的音符共有3拍,则歌曲是 拍节奏型,在播放第一拍的同时播放 拍节奏鼓点;
[0083] 如果每两个小节间的音符共有4拍,则歌曲是 拍节奏型,在播放第一拍的同时播放 拍节奏鼓点。
[0084] 3、优点及功效:本发明一种简谱图像的自动识别和演奏的方法,其优点是:
[0085] 1)鲁棒性强,正确率高。利用本发明提供的方法可以自动识别印刷体简谱、带歌词简谱、简谱图像与五线谱混合谱、简谱与吉他谱混合谱等多种形式的印刷体简谱,正确率均在95%以上。并且对于带有大面积水印、网址等等干扰内容的简谱图像,仍能保持90%以上的正确率。
[0086] 2)数据压缩比例极高。一张648×932的jpeg格式的简谱图像,经过本发明提供的方法进行自动识别并转化为音符编码后,所占内存空间仅数百字节,是原图像数据量的
1/1000,且保留了原图中的大部分的有用信息。
[0087] 3)本发明提出的简谱音乐播放方法播放出的简谱音乐饱满富有感染力,且本播放方法简单可靠,可以实现曲谱的实时识别和播放。
(四)附图说明:
[0088] 图1用于检验本发明所提供的识别播放方法的一张简谱
[0089] 图2本发明所述方法的总体流程框图
[0090] 图3简谱图片及对其横向归一化投影后得到的列向量ColumnSum
[0091] 图4简谱图像横向投影的粘连现象
[0092] 图5对简谱行块进行滤波的3×3掩膜
[0093] 图6a对谱段中简谱符号基元位置的定位示意图
[0094] 图6b对简谱标题附近调式符号位置的定位示意图
[0095] 图7从简谱图像中分离得到的14类基元
[0096] 图8对识别窗口上下延拓示意图
[0097] 图9本发明中音符语义理解、音频播放方法流程图
[0098] 图中符号说明如下:
[0099] 在图9中,DetaTop和DetaBase分别表示为了识别基元上方和下方的节奏、音高等信息,将前识别窗口上下各延拓的宽度。
(五)具体实施方式:
[0100] 为了更好地理解本发明的技术方案,以下对本发明的实施方式作进一步描述:
[0101] 本发明在MATLAB R2010b语言环境下实现,计算机配置:Pentium(R)Dual-coreCPUT4200@2.00GHz。
[0102] 见图2,本发明一种简谱图像的自动识别和演奏的方法,该方法具体步骤如下:
[0103] 步骤一:“简谱图像预处理”
[0104] (1)在matlab2010b环境中读取一张简谱图像。
[0105] (2)检测出简谱图像中的彩色区域,删除彩色区域中的所有像素。
[0106] (3)将完成第(2)步之后的图像转化为灰度图像,对灰度图像进行Hough变换
[0107]
[0108] ρ=xcos(a)+ysin(a),a∈(0,2π)
[0109] 将简谱图像中的点f(x,y)变换到Hough平面的点H(a,ρ)。找出变换后Hough平面内峰值点坐标max(H(αm,ρm)),并利用原简谱图像的倾斜角度
[0110]
[0111] 对其进行旋转校正。
[0112] (4)采用全局最大类间方差阈值法,对完成第(3)步后的简谱图像进行二值化处理。
[0113] (5)对完成第(4)步之后的简谱图像进行归一化横向投影,得到一个列向量ColumnSum, 其中f(x,y)表示整张简谱第y行第x列的像素,
N为简谱图像的列数。
[0114] ColumnSum中元素值大于0.03的元素所在的行,构成了简谱图像中数字音符主干、歌词以及标题主干所在行的位置。对每一个行块用如图4所示3×3的掩膜对分离出的
每一行块(灰度图像)进行滤波。
[0115]
[0116]
[0117] 其中f(i,j)表示某一行简谱块中第i行第j列的像素值; 表示滤波后简谱块中第i行第j列的像素值。
[0118] 将滤波后的行块进行二值化处理,对二值化处理之后的简谱块进行纵向归一化投影,
[0119]
[0120] 其中fB(i,j)为滤波并进行二值化后简谱块中第i行第j列的像素值,I为该简谱块的总行数。
[0121] 找出RowSum中大于0.6的元素对应的简谱块中的区域,如图5所示。对这些小区域依次进行Harris角点检测,如果某个小区域的角点数等于2,则认为该行块存在小节线
将该行块中信息保留;否则将该行块中信息滤除。
[0122] (6)对完成第(4)步之后的每一块含有简谱的简谱行的起始行坐标存储在向量RowStart中,将终止行坐标存储在向量RowEnd中。
[0123] 步骤二:“简谱基元识别”
[0124] (1)将步骤一(6)中得到的每一个简谱块进行纵向投影,根据投影所获得的行向量的像素值来分离出每一个单独的符号基元的位置,并且将每一个符号基元的列起始坐
标存储在向量ColumnStart中,将列终止坐标存储在向量ColumnEnd中。简谱图像中第
RowStart(m)行、RowEnd(m)行、第ColumnStart(n)列、ColumnEnd(n)列所分割出的区域称
为第m行中第n个基元的“识别窗口”,如图6a所示。
[0125] (2)将每一个含有基元的“识别窗口”内的像素,利用局部最大类间方差法进行二值化处理。
[0126] (3)将识别窗口内二值化后的基元,降采样整合为20×20的标准样本。得到的音符基元的基本类型为:“0”(即空拍)、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“浮点”、“无效字符”、“小节线”、“延音线”、“升记号”、“降记号”,共14类,如图7所示。
[0127] (4)将整张简谱图片等分成4分,在左上方的一小份中,通过模板匹配和投影法的方法来查找“=”所在的位置。继而确定表示调式的英文大写字母、升降记号的位置,如图
6b所示。
[0128] (5)采取与过程(2)同样的方法,将含有英文字母、升降记号的识别窗口局部二值化,再整合为20×20的标准字母样本。
[0129] (6)利用支持向量机的方法对标准样本进行识别。采用一对一(one-against-one)的方法构建多类分类器。识别音符基元一共需要训练 个二值分类器。
无需对样本进行额外的特征提取,而是直接将二值化后20×20的样本拉伸为400×1的特
征向量用于分类器的训练。训练选取的核函数为线性核函数(linear),选取惩罚因子C=
8000,每个二值分类器训练所输入的正负样本各250个。对简谱基元进行多分类识别。
[0130] (7)使用过程(6)完成对识别窗口中基元的识别后,在识别窗口的上方和下方分别延拓DetaTop和DetaBase个像素宽度,如图8所示。
[0131] DetaTop=c1[RowStart(m)-RowEnd(m)]
[0132] DetaEnd=c2[RowStart(m)-RowEnd(m)]
[0133] 当曲谱行与行之间结构较为紧凑时,取c1=0.8,c2=0.5;当曲谱行与行之间结构较为松散时,取c1=2,c2=2。
[0134] 对上方延拓区进行横向投影和纵向投影,根据两条投影向量确定上方延拓区是否存在高音记号。
[0135] 对下方延拓区进行横向投影和纵向投影,根据两条投影向量确定下方延拓区的下划线条数、是否存在低音记号。
[0136] (8)对简谱调式基元进行提取,得到C、D、E、F、G、A、B七个大写英文字母以及“升记号”、“降记号”共九类样本。识别方法同样选用SVM,选取一对一(one-against-one)的方法构建多类分类器,共需要训练 个二值分类器。训练选取的核函数为线性核函数(linear),选取惩罚因子C=8000,每个二值分类器训练所输入的正负样本各
15个。对简谱调式基元进行多分类识别。
[0137] 步骤三:“数字音频的生成及播放”
[0138] (1)完成步骤二中(6)(7)(8)后,对识别后的音符进行编码处理。本发明中每个音符的编码为一个8位二进制编码,占用内存空间1byte。
[0139] 编码高四位
[0140] A7:高音记号,当音符上方有高音记号时A7=1;
[0141] A6A5:下划线,当音符下方有一条下划线时A6A5=01,当音符下方有两条下划线时A6A5=10,当音符下方有三条下划线A6A5=11;
[0142] A4:低音记号,当音符下方有低音记号时A4=1。
[0143] 编码低四位
[0144]A3 A2 A1 A0
0(空拍) 0 0 0 0
1(do) 0 0 0 1
2(re) 0 0 1 0
3(mi) 0 0 1 1
4(fa) 0 1 0 0
5(so) 0 1 0 1
6(la) 0 1 1 0
7(xi) 0 1 1 1
符点 1 0 0 0
无效字符 1 0 0 1
小节线 1 0 1 0
延音线 1 0 1 1
升记号 1 1 0 0
降记号 1 1 0 1
[0145] 对整张简谱的识别结果进行编码。
[0146] (2)对钢琴、吉他、小号、小提琴等乐器的音色进行采集。音高范围从C2(138.541Hz,C大调低音do)到B4(988.256Hz,C大调高音xi)。将其转化为WAV格式的
标准音频存储在音色库中供系统调用。当步骤二以及步骤三中的过程(1)、(2)完成后,进
行音频的播放。接下来的过程(3)——(8)描述简谱的播放方法,如图9所示。
[0147] (3)对当前音符进行判断,如果是数字音符,将当前编码地址存入变量IP中,查询下一位音符,执行(4);否则当前编码地址加1,继续执行(4)。
[0148] (4)如果下一位是数字音符,则将本音符的音色库文件传递给播放函数准备播放,执行步骤三;如果下一位音符不是数字,则判断是浮点还是延音线,若为浮点则延时分频变量(初始值为1)加0.5;若为延音线,则加1。判断之后,编码地址减1,继续向前查询,重复执行(4)。
[0149] (5)判断该音符的下划线数,结合延时分频变量计算播放时长,播放该音符。
[0150] (6)反复执行(3)——(5),每次循环将音符编码地址IP加1。判断IP是否大于音符总数,若不大于,则返回执行(3),否则退出播放程序。
[0151] (7)在每次执行(5)时,查询前一个音符是否为“小节线”,如果是,则播放时音强需要加重,否则不做处理。
[0152] (8)计算两个小节线之间的节拍数是2拍、3拍还是4拍。
[0153] 如果每两个小节间的音符共有2拍,在执行(7)的同时播放 拍节奏型鼓点;
[0154] 如果每两个小节间的音符共有3拍,在执行(7)的同时播放 拍节奏型鼓点;
[0155] 如果每两个小节间的音符共有4拍,在执行(7)的同时播放 拍节奏型鼓点。
[0156] 实验结果:
[0157] 本发明所提供的方法可以自动识别印刷体简谱、带歌词简谱、简谱图像与五线谱混合谱、简谱与吉他谱混合谱等多种形式的印刷体简谱,正确率均在95%以上。并且对
于带有大面积水印、网址等等干扰内容的简谱图像,仍能保持90%以上的正确率。一张
648×932的jpeg格式的简谱图像,经过本发明提供的方法进行自动识别并转化为音符编
码后,所占内存空间仅数百字节,是原图像数据量的1/1000。此外,除了能准确识别各类型简谱,本发明还提出一整套简谱音乐播放方法,可以实现曲谱的实时识别和播放。