当前位置:   article > 正文

STM32+OpenMV+AS608实现人脸识别_stm2人脸识别能连接数据库吗?

stm2人脸识别能连接数据库吗?

STM32+openmv(M7)+As608指纹模块----人脸指纹识别–串口显示

/
/
/
/

前述:本实验基于上一个实验STM32+AS608串口,本文加之前的基础上修改,思路如下:本实验全部操作通过串口以及按键实现(方便无LCD),接下来会移植到LCD屏上。将openmv+STM32+AS608,通过硬件连接图所接。

/
/
实现步骤:上电,首先实现的功能是人脸识别,同时也可以进入人脸录取后在进行识别,该部分代码基于Openmv(Python),
通过按键Key0 进入录取人脸,按键Key1进入人脸识别,如若识别成功,通过串口返回识别人的名称。接下来是指纹模块的功能,这里不做简述,有关过程,请看链接。(该功能目前比较单一,还有待改进)

第一部分:硬件连接

STM32+AS608的连接还是参考上面的连接,主要讲Openmv+Stm32
Openmv Rx — stm32 TX
Openmv TX — stm32 RX
Openmv GND — stm32 GND
Openmv VIN ---- stm32 5V (注意这里连接的是5V),因为Openmv的供电由该引脚提供。
在这里插入图片描述

第二部分:程序设计

STM32与Openmv连接 人脸识别代码

void Face_recognition(void)
{
	u8 key;
	u8 t3;
	u8 number=0;
	//printf("/*********************************************人脸识别*********************************************/\r\n");
	//printf("/**************************************************************************************************/\r\n");
	//printf("/**************************************************************************************************/\r\n");

	while(1)
	{
		key=KEY_Scan(0);
		if(key==KEY0_PRES)
		{
			printf("1");
		}
		if(key==KEY1_PRES)
		{	
			printf("2");
			break;
		}
		/*
		if(key==WKUP_PRES)
		{
			break;
		
		}
		*/
	}

		while(1)
	{
		
		if(USART_RX_STA&0x8000)
		{					   
			number=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			for(t3=0;t3<number;t3++)
			{
				USART1->DR=USART_RX_BUF[t3];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}
		if(number>0)
			{
				break;
			}
		

	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

Openmv代码-人脸识别及人脸录取代码

"""
作者: SYM
时间: 2019年10月19日22:00
代码功能:与STM32使用,进行stm32通过串口发送消息给openmv,openmv收到信息后
进行人脸识别操作,并将结果传送回STM32单片机进行应答!
个人博客:https://blog.csdn.net/sssyyymm
V1.0版本(有待改进)

"""
import sensor, time, image, pyb
from pyb import UART

RED_LED_PIN = 1
BLUE_LED_PIN = 3

uart = UART(1,115200,timeout_char=1000)
data=bytes([0x0d,0x0a])

#uart.write("Now begin Face_recognition!\r\n")
#uart.write(data)



def face_recognition():
    sensor.reset() # Initialize the camera sensor.
    sensor.set_pixformat(sensor.GRAYSCALE) # or sensor.GRAYSCALE
    sensor.set_framesize(sensor.B128X128) # or sensor.QQVGA (or others)
    sensor.set_windowing((92,112))
    sensor.skip_frames(10) # Let new settings take affect.
    sensor.skip_frames(time = 5000) #等待5s
    #SUB = "s1"
    NUM_SUBJECTS = 3 #图像库中不同人数,一共6人
    NUM_SUBJECTS_IMGS = 10 #每人有20张样本图片

    # 拍摄当前人脸。
    img = sensor.snapshot()
    #img = image.Image("face/%s/1.pgm"%(SUB))
    d0 = img.find_lbp((0, 0, img.width(), img.height()))
    #d0为当前人脸的lbp特征
    img = None
    pmin = 999999
    num=0


    for s in range(1, NUM_SUBJECTS+1):
        dist = 0
        for i in range(2, NUM_SUBJECTS_IMGS+1):
            img = image.Image("face/s%d/%d.pgm"%(s, i))
            d1 = img.find_lbp((0, 0, img.width(), img.height()))
            #d1为第s文件夹中的第i张图片的lbp特征
            dist += image.match_descriptor(d0, d1)#计算d0 d1即样本图像与被检测人脸的特征差异度。
        print("Average dist for subject %d: %d"%(s, dist/NUM_SUBJECTS_IMGS))
        #pmin = min(pmin, dist/NUM_SUBJECTS_IMGS, s)#特征差异度越小,被检测人脸与此样本更相似更匹配。
        if (dist/NUM_SUBJECTS_IMGS)<pmin:
            pmin=(dist/NUM_SUBJECTS_IMGS)
            num=s
        print(pmin)
    print(num) # num为当前最匹配的人的编号。
    #uart.write(str(num))
    if num==1:
        uart.write("You are SYM!")
        uart.write(data)
    elif num==2:
        uart.write("You are gt!")
        uart.write(data)
    elif num==3:
        uart.write("You are LWZ!")
        uart.write(data)
def take_photos():
    sensor.reset() # Initialize the camera sensor.
    sensor.set_pixformat(sensor.GRAYSCALE) # or sensor.GRAYSCALE
    sensor.set_framesize(sensor.B128X128) # or sensor.QQVGA (or others)
    sensor.set_windowing((92,112))
    sensor.skip_frames(10) # Let new settings take affect.
    sensor.skip_frames(time = 2000)

    num2 = 3 #设置被拍摄者序号,第一个人的图片保存到s1文件夹,第二个人的图片保存到s2文件夹,以此类推。每次更换拍摄者时,修改num值。

    n = 10 #设置每个人拍摄图片数量。

    #连续拍摄n张照片,每间隔3s拍摄一次。
    while(n):
        #红灯亮
        pyb.LED(RED_LED_PIN).on()
        sensor.skip_frames(time = 2000) # Give the user time to get ready.等待3s,准备一下表情。

        #红灯灭,蓝灯亮
        pyb.LED(RED_LED_PIN).off()
        pyb.LED(BLUE_LED_PIN).on()

        #保存截取到的图片到SD卡
        print(n)
        sensor.snapshot().save("face/s%s/%s.pgm" % (num2, n) ) # or "example.bmp" (or others)

        n -= 1

        pyb.LED(BLUE_LED_PIN).off()
        print("Done! Reset the camera to see the saved image.")


#uart.write(str(num))
if __name__=='__main__':
    while(1):
        if uart.any():
            num1 =uart.readline().decode()
            num1 = int(num1)
            if(num1==1):
                print(num1)
                take_photos()
            elif(num1==2):
                print(num1)
                face_recognition()
                break










  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123

主要代码,其他代码不再展示,整个工程上传到下载:

第三部分:实验现象

通过按键1录取人脸。按键2进行人脸对比,输出人脸信息,然后进入指纹部分
在这里插入图片描述
接下来是指纹模块的
在这里插入图片描述

第四部分:总结与改进

1,openmv与stm32直接通讯,通过stm32串口收发,接收openmv以及发送到openmv。
2.as608指纹模块的 驱动程序
3.待改进点:采用中断运行,不占用处理器资源,添加蜂鸣器响应,
4.增加WIFi模块,传送到移动端安卓,进行远程控制
5,上传指纹和人脸数据库信息。
等等。。

欢迎大家在下面评论谈论

为方便没有积分的用户下载,将资源放在百度网盘,有需要自己下载哈!!!感谢支持!
注:V1版本是只有STM32+As608,V2版本是STM32+As608+openmv.大家结合需求自己下载

链接:https://pan.baidu.com/s/16viOu4Uu4r0bOjRD1KTd4g
提取码:cbg1
复制这段内容后打开百度网盘手机App,操作更方便哦

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号