快捷搜索:

基于Aforge的手势识别之一~~~简单的手写识别

上一篇文章先容了若何用Aforge去捕捉运动物体,现在就先容一个更深入的操作----手势识别。

我实现手势识别的道理很简单:捕捉运动物体+手写识别,把运动的物体的轨迹记录下来,然后经由过程手写识别引擎去搜索数据中最匹配的数据,从而知道“写”的是什么。今朝常见的开源手写识别引擎有zinnia,wagomu 这些,不过小弟我对照业余,只把网上的对照常见的手写识别代码改进一下,只能识别字母和数字,真想经由过程摄像头隔空“手写”的同伙就要多花光阴玩玩上面提到的几个开源手写类库了。

本文先容的手写识别:先在一个固定大年夜小的画板上,用鼠标画下某图形,输入该图形对应的字母,法度榜样把画板上的字母特性点都保存下来特性数据库(相称于进修影象),然后再在画板上画出类似该字母的图形,法度榜样就经由过程新画的特性点搜索特性数据库从而找出最类似的字母。

接下来贴出核心代码,具体的代码请到这里下载

GetBMPContext()是把画板中的图形的特性阐发出来,Learn()是把特性与特定的字母/数字对应起来保存到数据库,Recognise()是把当前画板的图形特性从数据库中搜索,从而找出对应的字母/数字。

const int SCAN_GAP = 10;

private String GetBMPContext(Bitmap bmp){

Boolean bool1stScan = true;int ax = 0, ay = 0, bx = 0, by = 0;

String result = "";for (int i = 1; i

{for (int j = 1; j

{if (bmp.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())

{if (bool1stScan == false)

{if (i

if (i >= bx) bx = i;if (j

if (j >= by) by = j;}

else{

bool1stScan = false;ax = i;

bx = i;ay = j;

by = j;}

}}

}

Bitmap bmp2 = new Bitmap(20, 20);Graphics g2 = Graphics.FromImage((Image)bmp2);

g2.Clear(Color.White);g2.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height),

new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);g2.Dispose();

//pictureBox1.Image = bmp2;

int a = 0, b = 0;for (int i = 0; i

{for (int j = 0; j

{if (bmp2.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())

result = result + "0";else

result = result + "1";}

}return result;

}

public void Learn(String name){

StreamWriter sw = new StreamWriter(fileName, true);sw.WriteLine(name + " " + GetBMPContext(bmpDraw));

sw.Close();}

public String Recognise()

{String current = GetBMPContext(bmpDraw);

StreamReader sr = new StreamReader(fileName);int max = 0;

String result = "";while (sr.EndOfStream == false)

{String[] key = sr.ReadLine().Split(' ');

String name = key[0];String data = key[1];

int match = 0;

for (int i = 0; i{

if (current[i] == data[i])match++;

}if (match >= max)

{result = name;

max = match;}

//Trace.WriteLine(result + ":" + match + "," + max);}

sr.Close();

return result;}

您可能还会对下面的文章感兴趣: