大数跨境
0
0

【中小学人工智能教育】案例4 基于传统方法的数字识别:用Kittenblock实现汉明距离计算

【中小学人工智能教育】案例4 基于传统方法的数字识别:用Kittenblock实现汉明距离计算 KittenBot小喵
2025-07-22
0
导读:汉明距离计算作为一种基础且直观的相似度度量方法,其核心思想简洁明了:通过“数不同”来判断相似性。


基于传统方法的手写体数字识别

在人工智能领域,卷积神经网络(CNN)等机器学习方法能以接近人类的准确率识别复杂的手写数字(如MNIST数据集99%+准确率),其强大之处在于自动学习特征、适应书写变体,甚至处理模糊扭曲的笔迹。

然而,正是机器学习的“黑箱”特性凸显了传统方法的价值——汉明距离计算作为经典的模板匹配算法,为初学者搭建了理解AI本质的透明桥梁。

传统方法将图像简化为二进制网格(如8x8像素),通过人工定义“0”和“1”的标准模板,逐位对比待识别图像与模板的差异数量(汉明距离),最终依据“距离最小原则”分类。

这种方法虽在复杂场景中表现局限(如无法处理倾斜或变形数字),却以“可拆解、可手算”的优势成为教学的优质案例:学生能亲手绘制网格、设计模板、统计差异,直观体验“特征提取-模式匹配-决策输出”的完整逻辑链。

反观深度学习,其自动提取数万维特征的过程难以被人类直观追踪,学生易陷入“输入即得结果”的认知迷雾。因此,学习汉明距离不仅是掌握一种算法,更是培养“解构智能”的思维范式——理解高级AI如何从基础规则演化而来,在敬畏技术力量的同时保有批判性思考:当模型误判时,我们能否像检查网格差异一样追溯根源?当数据匮乏时,能否如设计模板般人工注入先验知识?这种能力恰是未来人机协作的核心素养。

项目背景

汉明距离计算作为一种基础且直观的相似度度量方法,其核心思想简洁明了:通过“数不同”来判断相似性。

具体应用于识别手写数字时,首先需将手写图像进行数字化简化,通常将其划分为小型黑白网格,笔画覆盖区域标记为“1”,背景区域标记为“0”,从而将图像转化为一个由0和1组成的二进制序列。


数字化简化的前期步骤通常是灰度化、二值化、归一化为固定尺寸、骨架提取,最后将笔画宽度统一为单像素。

接着,需要预先定义“标准0”和“标准1”的数字模板(例如,一个近似圆环的“0”模板可能中间为空,而“1”则是一条竖线)。识别过程的关键在于计算:将待识别的未知数字二进制序列分别与“标准0”模板序列和“标准1”模板序列进行逐位对比,统计相同位置上数值不同的总个数,这个数值即为汉明距离。

最终的决策规则朴素而有效:比较未知数字到两个标准模板的汉明距离,选择距离更小的那个模板所对应的数字作为识别结果(即离哪个模板“更近”就判为哪个数字)。

这一过程在教学上具有显著优势:它操作门槛极低,学生仅需网格纸和笔即可亲手绘制数字、完成二值化标记并人工计算差异数,将抽象的“模式识别”和“距离分类”概念转化为可见的格子对比游戏,极具具象化效果。

学生在此过程中能深刻理解特征提取(网格简化)、模板匹配原理以及基于距离的决策逻辑,这正是更复杂算法(如K近邻)的思想雏形。通过“手绘-计算-判断”的完整体验,学生在趣味实践中自然掌握分类算法的本质,有效激发对AI技术的兴趣并奠定必要的认知基础。

项目制作

01

画板制作

在浏览器中打开Kittenblock在线版:kblock.kittenbot.cn。上传“画板小方块”的角色,或者直接绘制。

完成后对小方块角色编程,将角色设置为不可拖动,避免后续运行时,产生误拖拽。随后,隐藏该角色,并移动到初始位置。

画板一共是10*10像素,也就是需要10行,每一行分别有10个小方块。先形成第一行的10个小方块,然后同样的方法形成剩余9行。

在程序中,内层循环控制横向像素的形成,重复10次,每次都先形成一个克隆体,然后移动特定的步数(根据实际展示效果,这里设定为22).

外层循环负责控制行数的增加,开始前将小方块移动到最左边,并且按特定步数下移行的位置,完成10次内循环。

将积木按顺序组合后运行,即可得到如下效果:

02

数字书写

当每个克隆体启动后,同样设置为不可拖动,并且显示出来。不断进行判断,如果碰到“鼠标按下”且“接触到了该克隆体”,那么将该克隆体的亮度设置为-100,相当于使该克隆体变黑,实现类似“落笔”的效果。

完成编写后,我们先点击舞台右上方的放大运行,注意一定是要在舞台占据整个界面的情况下运行程序,否则舞台仍处于调试模式,所有角色都可以拖动,随后点击绿旗运行。

试着在画板上绘制0-9,绘制方法很简单,控制鼠标移动到画板上,随后按住鼠标左键并拖动鼠标。这样一来,我们就拥有了一个二值化的手写体图像。

在运行中我们不难发现,每次绘制后都要重新运行,这样的效率实在太低。因此,再加入简单两个指令,制作出擦除画板的效果。

03

汉明距离计算

增加汉明距离的计算前,需要新建变量与列表。

变量如下:

列:记录被点击像素的横向位置;

行:记录被点击像素的纵向位置;

id:记录被点击像素属于第几个像素;

与0差异度:计算和标准0的差异;

与1差异度:计算和标准1的差异。

列表如下:

模板0:记录标准0的字符数据;

模板1:记录标准1的字符数据;

当前列表数据:记录手写体的字符数据。

由于在图形化的编程中,无法像代码编程一样,直接对数组进行运算,所以需要使用字符串和列表进行数据的存储与运算。

在程序开始前,手动将标准模板1和0的数据存储到列表中。录入的方法有很多,为了节省时间,这里直接提供对应的字符串。使用“,”对字符串进行分割,随后将01数据挨个挨项的存入列表中:

模板0:

0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0

模板1:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0

字符数据也很好理解,画板一共100个格子,灰色格子为0,黑色格子为1,从左至右从上至下进行排列即可得到。

完成模板的数据录入后,将上节的画板制作部分打包成子程序,放在主程序后面。需要注意的是,本次操作还需要在克隆中增加一个指令,即“将0加入当前列表”。这样一来,当画板完成绘制后,记录手写数据的列表所有的数据都为0,后面触发手写效果后,设置成1即可完成手写记录。

在克隆体的程序中,当被按下的鼠标碰到后,会由灰变黑。我们不仅要让这个像素变黑,同时还要精准地记录这个像素的编号,并且修改对应的列表数值。

当按下的鼠标触发方块时,通过映射的积木,将鼠标的y坐标映射为0-9,这样有助于我们直观地判断鼠标位于第几行。

当鼠标在画板上时,y坐标的范围是(147,-90),x坐标的范围是(-239,-3),该数据可通过测试或计算获取。

由于映射完的数据存在小数,例如0.7、1.5等,这不利于我们做出行列的位置判断。因此这里采用了向上取整的办法进行处理,只要该数据大其本身的整数部分,那么将该数据设为比他大一位的整数。例如:1.1大于1,因此设为2。

通过这样的方式,鼠标横纵坐标均转化为1-10的整数,这样就可以判断点亮的像素在第几行和第几列了。

接下来,就是将行列的数据转换为列表的项数,由1开始,从左至右从上至下地把像素进行编号。通过观察可以发现:列数和个位数是保持的一致的,而十位的数字,正好比行数少1。

例如,第二行的第一个像素,是第1行第1列,对应的编号是11。因此我们可以通过一个公式计算编号:

编号=((行-1)×10)+列。

计算完成后,将用于记录手写体数据的列表“当前列表数据”的对应项数替换成1。这样就完成了对手写体像素的记录。

完成后,如果我们想重新输入,可通过空格进行刷新。需要注意的是,除了画板要刷新,列表的数据同样要进行刷新,将“当前列表数据”的所有项都设置为0。

04

判断手写的0和1

上面就是小方块的所有程序,接下来开始对小喵角色进行编程,该部分程序是汉明距离计算的精髓。

当我们对手写体和模板挨个像素进行比对,一共需要比对100次。首先我们将与0差异度和、与1差异度设为0,代表没有差异。同时将x设为1,变量x主要用于控制比对次数。

随后重复100次,每次都和模板1和模板0的像素进行比对,如果对应像素不一样,则将对应的差异度增加1。完成后将该部分打包成一个子程序。

完成后回到小喵的主程序,运行后不断地进行差异计算,这里用最简单的方式进行判断。一旦输入数据,则开始判断并说出结果,与1的差异较大,则判断为数字0,反之同理。

完成上述的程序编写后,便可以开始运行程序,小喵会随时进行输入数值的判断。

在体验时,尝试变化不同的写法,对比其识别成功率。试着简单概括一些成功率高的书写技巧,思考并讨论为什么会有这样的现象?

了解更多

了解更多小喵科技中小学人工智能教育解决方案,请联系张老师咨询:13428651081(微信可扫描下方)

往期推荐 ●

● 中小学人工智能与教育数字化:小喵AI教育平台解决方案的教学实践

【中小学人工智能教育】案例3 AI分析配料表,一键掌握科学膳食 

● 【中小学人工智能教育】案例1 基于可视化模型训练的手写体数字识别

● 【中小学人工智能教育】案例2 基于音频分类的AI听声辨果

● Kittenblock接入DeepSeek!中小学人工智能教育的王炸用法!

● 【Kittenblock小喵AI插件上新 】 编程小白也能玩转的机器学习!


【声明】内容源于网络
0
0
KittenBot小喵
专注于从入门到精通的移动机器人开源学习平台
内容 560
粉丝 0
KittenBot小喵 专注于从入门到精通的移动机器人开源学习平台
总阅读199
粉丝0
内容560