k210 hc-05 智慧课堂 人脸识别签到

基于k210开发板的智能课堂签到设计

李佳奇,李佳,李敏,武林,王俊海

                              (淮北师范大学,计算机科学与技术学院,淮北,团队ID:383717)

摘要:

基于k210开发板的智能课堂签到设计可以快速实现对课堂同学的考勤签到,并通过APP实时将数据信息传送给老师,系统基于yolo2神经网络的人脸识别、软件设计、硬件设计、数据库等技术,实现了动态无感课堂数据采集、考勤确认、考勤统计等功能,真正实现人工智能取代落后的人工点名。

关键字:

人脸识别、人工智能、数据库、k210硬件设计、智慧课堂、嵌入式开发。

引言

随着信息产业的高速发展,教学系统信息化已被广泛应用于各大院校的教学实践,比如我们日常接触到的:扫描二维码完成签到、线上完成老师布置的作业、网上选课等等。如何在人工智能应用及信息化的基础上,提高课堂的管理效率,减少学校设备投资成本,构建智能化课堂管理,一直是困扰各高校的首要难题。因此,开展人工智能时代下的智能课堂签到系统的研究与设计,具有重大价值和现实意义。

近年来,随着信息技术的不断发展,现代化科技手段已经融入各行各业,而人们对肖像权概念越来越淡化,随时随地拍照录像已经成为生活的一部分。教室摄像头的安装已经成为标配,同学们已经习以为常,然而在课堂上获取的视频化数据被利用的概率确很低,在同学们的不经意之间,若能能将这些视频数据利用在课堂的考勤上,具有重要意义,而近些年来新兴起的k210芯片,具有极强的算力,在人脸识别能力上独树一帜,另,由python语言作为编程语言的k210,不仅应用场景设计难度较小,且代码的开源性较强,要实现课堂的智能签到设计,k210开发板可以说是最佳的选择。

第一部分:产品介绍

硬件篇:

一、K210开发板介绍:

K210全称为堪智K210,是嘉楠科技自主研发的一款采用RISC-V处理器架构,具备视听一体、自主IP内核与可编程能力强三大特点,支持机器视觉与机器听觉多模态识别,可广泛应用于智能家居、智能园区、智能能耗和智能农场等场景。堪智K210使用台积电超低功耗的28纳米先进制程,具有双核64位处理器,总算力可达1TOPS,内置多种硬件加速单元(KPU、FPU、FFT等),并且拥有较好的功耗性能、稳定性与可靠性。

K210功耗仅为0.3w,典型设备工耗为1W,算力为1TOPS(比树莓派、Jetson Nano要高),但是1TOPS≠1TFlops。TOPS,(Tera Operations Per Second),1TOPS代表处理器每秒钟可进行一万亿次(10^12)操作。TFlops/s,(Tera Floating Point Operations Per Second),可以简单写为T/s, 是数据流量的计数单位,意思是”1万亿次浮点指令每秒”。

 

 

二、k210实现人脸识别:

1、数据的收集。

2、运行人脸检测模型,在图片中找到人脸位置并框出人脸。

3、将裁出的人脸图片转换成kpu接收的格式。

4、运行人脸5点关键点模型,获取到左眼、右眼、鼻子、左嘴角、右嘴角的位置。

5、对原始图片人脸图片进行仿射变换,变换为正脸图像,将正脸图像转为kpu格式。

6、使用人脸196维特征值模型计算正脸图片的196维特征值,计算得到最终的人脸特征feature。

再将得到的人脸特征与之前保存过的人脸特征进行对比得到一组分数,选择其中最大的一个分数,且该分数超过65分(可以自己设置)就认为识别出该人,并根据对应下标从names列表中得到该人的姓名。

具体操作如下:

1.训练模型并烧录到开发板中:

模型获取:首先通过手机拍摄一小段10s左右的视频,通过视频转图片平台(www.img2go.com)将视频转换为(224*224)的图片

紧接着,将图片文件移至Maixhub(官方模型训练平台),完成对数据的整理与标注,进行训练。

上图为数据的整理过程

上图为数据的标注过程

上图为数据的训练过程

训练平台选择nncase平台;模型网络选择transfer_learning;主干网络选择mobilenet_0.75;照片尺寸选择224*224,以上选择均为适应k210正常运行的选择。

将烧录得到的模型经过解压,得到运行在MaixPy IDE上的代码以及烧录进kflash_gui的模型,运行结果如下显示:

2.1编程环境的搭建:

                               

首先介绍集成开发环境(MaixPy Integrated Development Environment);

MaixPy IDE是搭配k210开发的应用程序,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务。

       用于连接开发板

如果需要将训练的模型在k210的flash中存储并运行,需要通过此软件将模型烧录进k210的flash中。

  • HC-05蓝牙模块介绍&&pyIOT-BLE TLS01

                 

图() hc-05外观图

图() hc-05 原理图    

相关参数介绍

1.引脚

6根引脚,名称与功能如下;

VCC 接电源的正极,电压的范围为3.3v到5.0v

vdd 为外接供电电源输入端

GND 地线

TXD:模块串口发送引脚(TTL电平,不能直接接RS232电平),可直接接单片机的RXD引脚

RXD:模块串口接收引脚(TTL电平,不能直接接RS232电平),可直接接单片机的TXD引脚

KEY:用于进入AT状态:

LED:这个引脚是用来检测蓝牙模块是否已经连接上了其他蓝牙设备

  1. 通讯方式(txrx)

HC-05通过TX和RX引脚,支持使用标准AT命令。为此,用户必须在设备启动时进入特殊命令模式。启动进入数据模式,这样它就可以与其他设备进行无线通信

1.优点:

麻雀虽小,五脏俱全,hc-05不仅价格实惠(在某鱼上八快就能拍到),而且数据传输速率并不影响,支持的波特率有9600,19200,38400,57600,115200,230400,460800体积小,重量轻,非常适合搭配同级别的便携式硬件k210。唯一的缺点是信号接收范围较小,仅有15米(假设无障碍)左右,为此,为了项目能搭配更多的应用场景,即满足距离上的要求,我们选择使用k210官方设计的pyIOT-BLE TLS01蓝牙模块,可接收60米左右范围内信号(假设无障碍)。

             

图() pyIOT-BLE TLS-01外观图

蜂汇物联科技推出的 TLS-01 蓝牙无线透传模块是基于 TELINK 公司的TLSR8266F512 芯片研发的低功耗 BLE 射频模块,模块能够以非常低的总材料成本实现与蓝牙设备的通信,具有功耗低、体积小、抗干扰能力强等特点。TLS-01 蓝牙模块可以实现模块与手机数据透传,通过简单的 IO 控制便可以快速使用 BLE 技术。模块作为从角色,可使用 AT 指令控制, 通过串口即可设置IO 引脚状态、串口波特率、修改模块的广播名称,修改广播间隔和连接间隔等参数。

图() pyIOT-BLE TLS-01原理图 图() pyIOT-BLE TLS-01 功能图

1.优点 k210官方推出的蓝牙模块,拥有和k210一样任意配置引脚的特点,通过串口即可设置IO 引脚状态、串口波特率、修改模块的广播名称,修改广播间隔和连接间隔等,这是优于hc-05的特点,在本项目中,使用该蓝牙模块仅是为了利用其信号接收和传播范围广的优点,其他优点,暂且不展开阐述。

1.摄像头介绍(OV2640摄像头)

OV2640是Omni Vision公司生产的一颗1/4寸的CMOS UXGA(1632*1232)图像传感器,如图1.1 OV2640摄像头所示。该传感器体积小、工作电压低,提供单片 UXGA 摄像头和影像处理器的所有功能。通过 SCCB 总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率 8/10 位影像数据。该产品 UXGA 图像最高达到 15 帧/秒(SVGA 可达 30 帧,CIF 可达 60 帧)。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、对比度、色度等都可以通过 SCCB 接口编程。Omni Vision图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、拖尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。

OV2640优点:

高灵敏度、工作电压低适合嵌入式应用;

通过 SCCB 总线控制,标准的 SCCB 接口,类似 IIC 接口,SDA数据线和SCL时钟线;

支持图像压缩,即可输出压缩后的JPEG图像数据,大大减少数据量;

支持 RawRGB、RGB(RGB565/RGB555)、GRB422、YUV(422/420)和 YCbCr (422)输出格式;

支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹等自动控制功能,对图像进行处理;

自带嵌入式微处理器;

支持图像缩放、平移和窗口设置。

UXGA最高15帧/秒,SVGA可达30帧,CIF可达60帧。UXGA,即分辨率位1600*1200的输出格式,类似还有SXGA(1280*1024)、XVGA(1280*960)、WXGA(1280*800)、XGA(1024*768)、SVGA(800*600)、VGA(640*480)、CIF(352*288)和QQVGA(160*120)等。

图() 图像滤波操作函数库

通过图像滤波处理,可以使得机器应对不同的环境。

图()2.8寸显示屏(320x240) 图()杜邦线若干 usb数据线1条

核心代码:

import sensor,image,lcd,time
import KPU as kpu
from machine import UART
from fpioa_manager import fm
import utime
lcd.init()
lcd.rotation(1)

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
#sensor.set_vflip(1) #flip camera; maix go use sensor.set_hmirror(0)

sensor.set_hmirror(1)
sensor.set_vflip(True)
sensor.run(1)

clock = time.clock()

li=[]
classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']
task = kpu.load(0x800000)
anchor = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)

fm.register(7, fm.fpioa.UART1_TX, force=True)
fm.register(6, fm.fpioa.UART1_RX, force=True)
uart = UART(UART.UART1, 9600, read_buf_len=4096)\

uart.write("欢迎使用丢了汤圆队设计的智能课堂系统"+'\r\n')

uart.write("输入以下数字:跳转到各班人脸数据库"+'\r\n')
uart.write("1-->智能科学班"+'\r\n')
uart.write("2-->大数据科学与技术班"+'\r\n')
uart.write("3-->网络工程班"+'\r\n')
uart.write("4-->信息安全班"+'\r\n')
uart.write("5-->计算机科学班"+'\r\n')
while True:
    text=uart.read()

    if text==b'1':
        uart.write("21级智能科学与技术班共计90人,正在加载数据库,请稍后....")
        lcd.draw_string(60, 120, "Loading.....",lcd.BLACK, lcd.WHITE)
        utime.sleep(2)
        lcd.display(image.Image("zhike.bmp"))
        utime.sleep(1)
        break;

while(True):
    lcd.rotation(3)
    clock.tick()
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    print(clock.fps())
    if code:
        for i in code:
            a=img.draw_rectangle(i.rect())
            a = lcd.display(img)
            for i in code:
                lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)
                lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)
                if classes[i.classid()] not in li:
                    li.append(classes[i.classid()])
                    uart.write(classes[i.classid()]+"已签到"+'\r\n')
    else:
        a = lcd.display(img)
a = kpu.deinit(task)

 没有班级人脸数据库,没有权限,所以用的是官网模型库里的20种物体识别模型。

效果展示:

猜你喜欢

转载自blog.csdn.net/qq_62262788/article/details/127697638