[AI人工智能教程]LattePanda&AI-手写数字识别 精华

619浏览
查看: 619|回复: 0

[AI人工智能教程] LattePanda&AI-手写数字识别

[复制链接]

LattePanda&AI-手写数字识别

概述

数字识别(Digit Recognition),是计算机从纸质文档,照片,或其他来源接收和理解并识别可读的数字的能力,具有很大的实际应用价值,例如手写数字识别可以应用在银行汇款单号识别中,以极大的减少人工成本。
截屏2020-08-18 14.58.23.png
本项目中我们将在LattePanda上,使用JupyterLab编写手写数字识别程序,实现在触摸屏上手写数字0~9,就能被程序准确识别出来的效果。



项目基础

识别手写字

硬件准备:

AI主控:LattePanda
输入输出设备:5英寸显示屏、键盘、鼠标

程序编写:

1、双击桌面上的“startpage.sh”,打开JupyterLab,切换到“home/lattepanda/桌面/LattePanda&AI项目实战/”目录下,如下图,检查一下项目必需的3个文件;
截屏2020-08-18 14.59.22.png
2、双击“LattePanda&AI-手写数字识别”,进入该文件夹:
截屏2020-08-18 14.59.47.png

  • 可编辑执行程序——扩展名为“.ipynb”,JupyterNotebook下的python程序文件,运行该程序可实现项目效果
  • 模型文件——扩展名为“.h5”,由训练程序得来,提取不同手写数字图片的特征来建立对应的模型。当运行项目程序对未知手写数字进行识别时,程序会提取未知手写数字的特征,再与模型进行匹配,最终实现识别效果
  • 程序调用文件——python程序,可编辑执行程序的一些底层逻辑封装,项目程序需要调用它才能正常运行

3、双击打开“手写数字识别.ipynb”;
截屏2020-08-18 15.00.13.png

样例代码:

截屏2020-08-18 15.00.32.png
截屏2020-08-18 15.00.54.png
截屏2020-08-18 15.01.12.png


[mw_shl_code=python,false]#导入同目录下的手写数字识别文件
from handwriteDigitRecognition import *

#调用同目录下已经训练好的模型文件
model, _ = Model.load("手写数字识别")

#初始化识别状态为假
predictOnce = False

#窗口的标题栏名称
screen = Screen("手写数字识别")

#定义“清除”函数,该函数通过for循环遍历每一个黑色块
def buttonClearCallback():
    for canvas in canvases:
        canvas.clear()

#设置“清除”按键的位置和大小,背景色为白色,字体颜色为黑色,按下该按键能调用“清除”函数
buttonClear = screen.createButton(700, 0, 100, 50, "清除" , buttonClearCallback, bg = (255,255,255), color = (0,0,0))

#设置设别结果的位置和大小,背景色为白色,字体颜色为黑色
buttonResult = screen.createButton(0, 0, 300, 50, "手写数字:" , None, bg = (255,255,255), color = (0,0,0))

#6个用于手写数字的黑色块,设置位置和大小
canvases = [None]*6
canvases[0] = screen.createCanvas(60, 50, 200, 200)
canvases[1] = screen.createCanvas(280, 50, 200, 200)
canvases[2] = screen.createCanvas(500, 50, 200, 200)
canvases[3] = screen.createCanvas(60, 270, 200, 200)
canvases[4] = screen.createCanvas(280, 270, 200, 200)
canvases[5] = screen.createCanvas(500, 270, 200, 200)

#定义“识别”函数,该函数设置识别状态为真
def buttonRecogCallback():
    global predictOnce
    predictOnce = True

#设置“识别”按键的位置和大小,背景色为白色,字体颜色为黑色,按下该按键能调用“识别”函数
buttonClear = screen.createButton(600, 0, 100, 50, "识别" , buttonRecogCallback,
                                  bg = (255,255,255), color = (0,0,0))

#打开手写数字交互窗口,按下“Q”键退出窗口
if_run = 1
while (if_run == 1):
   
    #如果“识别”按键被按下,通过for循环对每个黑色块内手写字进行识别处理,将识别结果依次显示出来
    if predictOnce:
        predictOnce = False
        buttonResult.txt = "识别结果:"
        for cavas in canvases:
            buttonResult.txt += str(Model.predict(model, cavas.get()))
   
    #打开与显示交互窗口,如果按下Q键,将无法进入下一次while循环
    if screen.show():
        if_run = 0
        screen.quit()[/mw_shl_code]

4、运行程序,当执行到最后一个单元格时,会弹出如下交互窗口;
截屏2020-08-18 15.01.27.png
5、在黑色块中触摸写入数字,
*手写时应保证鼠标不被移动。
截屏2020-08-18 15.01.34.png
写完后触摸“识别”,会在窗口左上角显示识别结果,
截屏2020-08-18 15.01.40.png
6、触摸“清除”会擦除黑色块中的手写数字;
截屏2020-08-18 15.01.47.png
7、按键盘上的“Q”键可退出交互窗口。

项目进阶



交互窗口

如图,我们通过代码中的参数控制交互窗口的显示界面,因此,你可以根据需要调整这些参数以更改或添加交互窗口的背景颜色、文字内容、文字位置大小、手写区域位置大小及数量......
截屏2020-08-18 15.02.00.png
样例代码:
截屏2020-08-18 15.03.24.png 截屏2020-08-18 15.03.42.png


[mw_shl_code=python,false]#导入同目录下的手写数字识别文件
from handwriteDigitRecognition import *

#调用同目录下已经训练好的模型文件
model, _ = Model.load("手写数字识别")

#初始化识别状态为假
predictOnce = False

#窗口的标题栏名称
screen = Screen("手写密码录入系统")

#定义“清除”函数,该函数通过for循环遍历每一个黑色块
def buttonClearCallback():
    for canvas in canvases:
        canvas.clear()

#设置“清除”按键的位置和大小,背景色为白色,字体颜色为黑色,按下该按键能调用“清除”函数
buttonClear = screen.createButton(700, 0, 100, 50, "清除" , buttonClearCallback, bg = (255,255,255), color = (0,0,0))

#设置设别结果的位置和大小,背景色为白色,字体颜色为黑色
buttonResult = screen.createButton(0, 0, 300, 50, "请写入密码:" , None, bg = (255,255,255), color = (0,0,0))

#6个用于手写数字的黑色块,设置位置和大小
canvases = [None]*8
canvases[0] = screen.createCanvas(40, 50, 150, 150)
canvases[1] = screen.createCanvas(230, 50, 150, 150)
canvases[2] = screen.createCanvas(420, 50, 150, 150)
canvases[3] = screen.createCanvas(610, 50, 150, 150)
canvases[4] = screen.createCanvas(40, 270, 150, 150)
canvases[5] = screen.createCanvas(230, 270, 150, 150)
canvases[6] = screen.createCanvas(420, 270, 150, 150)
canvases[7] = screen.createCanvas(610, 270, 150, 150)

#定义“识别”函数,该函数设置识别状态为真
def buttonRecogCallback():
    global predictOnce
    predictOnce = True

#设置“识别”按键的位置和大小,背景色为白色,字体颜色为黑色,按下该按键能调用“识别”函数
buttonClear = screen.createButton(600, 0, 100, 50, "完成" , buttonRecogCallback,
                                  bg = (255,255,255), color = (0,0,0))

#打开手写数字交互窗口,按下“Q”键退出窗口
if_run = 1
while (if_run == 1):
   
    #如果“识别”按键被按下,通过for循环对每个黑色块内手写字进行识别处理,将识别结果依次显示出来
    if predictOnce:
        predictOnce = False
        buttonResult.txt = "计算机密码录入:"
        for cavas in canvases:
            buttonResult.txt += str(Model.predict(model, cavas.get()))
   
    #打开与显示交互窗口,如果按下Q键,将无法进入下一次while循环
    if screen.show():
        if_run = 0
        screen.quit()[/mw_shl_code]

运行效果:
截屏2020-08-18 15.03.56.png






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail