【项目设计】基于STM32人脸识别系统 - 单片机 物联网 嵌入式

一.前言

项目设计主要是对于所学知识的整体回顾,需要结合各个学科,才能做出达到符合标准的设计。
文章的目的在分享优质的项目以及项目经验,提供设计思路,欢迎交流与指正不足之处。

二.简介

由于人脸识别技术具有无需接触、安全性高、可靠性高等优点,在身份认证领域具有广阔的应用前景。目前,市场中的门禁系统大多采取离线加传统人脸识别算法的方式,无法实时记录访客信息,并存在识别准确率低、容错率较低、只针对特定场景等缺点。该设计主要目的在于解决上述的问题,采用深度学习人脸识别算法与在线,计算的门禁系统解决方案。

三.主要器件

STM32F407ZGT6芯片主控芯片
OV2640摄像头模块
ESP8266无线通信模块
语音播报电路
自动开关门电路(舵机驱动)
IIC驱动型OLED屏幕
按键电路
电源电路

技术交流,调试帮助,技术V:anwarmaries Q:1083091092

四.系统整体方案

下位机采集人脸图像数据,经无线通信模块传输至上位机识别并返回识别结果的人脸识别门禁系统方案。下位机主要由微控制器模块、摄像头模块、无线传输模块组成,负责图像采集与传输,并根据上位机返回识别结果并做出相应的动作。
上位机则由安装Tensorflow深度学习运行环境的PC构成,负责图片接收、人脸识别和返回识别结果。
在这里插入图片描述

下位机软件的设计流程图如下图所示:
在这里插入图片描述

文章内容将在后续逐步完善,需要相关实物,亦或是任何技术问题。欢迎私信本人,CSDN@风雨同舟1

五. 部分核心代码

主函数部分:


```cpp

```c
int main(void)
{	
/*--------------变量声明--------------------*/
	u8 limt,left,right,chang=0,start,display,display1;
	float temp;

/*--------------配置初始化--------------------*/
	Stm32_Clock_Init(9);	//系统时钟设置
	delay_init(72);	  		//延时初始化
	USART1_Init(115200); 	//串口初始化为115200
	OLED_Init();
	SMBus_Init();
	KEY_Init();
	LED_Init();
	BEEP_Init();	
 
//  OLED_Refresh_Gram();		//更新显示到OLED 
	
	while(1)
	{
/*start=1(测温开始),start=2(人脸识别开始),start=3(口罩识别开始)*/
		switch (duli_key(1))
		{
			//case 0: start=0;break;
			case 1: {start=1;break;}
			case 2: {start=2;break;}
			case 3: {start=3;break;}
			case 4: {start=4;break;}
		}
		
//--------------测温部分------------------------------------		
		if(start==1)
		{
			if(start_stop(Key_Scan()))
			{		
				
				if(display==2)
				{
					OLED_Clear();
					OLED_ShowString(25,0,"temp test",16);
					OLED_ShowString(0,25,"temp:",16);
					OLED_ShowChar(60,25,'.',16,1);
					delay_ms(10);
					OLED_ShowString(0,40,"temp_limit:37",16);
					display=1;
				}
				
				if(temp_target(Key_Scan()))//测温:1--测量液体温度 0--测量人体温度
				{
					temp=SMBus_ReadTemp(0);
				}
				else
					temp=SMBus_ReadTemp(1);
				
		/*------------温度阈值设定------------------*/
				while(set_templimt(Key_Scan()))
				{
					LED0=1;	
					if(Key_Scan()==10)
					{
						while(Key_Scan()==10);
						chang=1;
					}
					else if(Key_Scan()==11)
					{
						while(Key_Scan()==11);
						chang=2;	
					}
					
					switch(chang)
					{
						case 0:	{left=3;right=7;break;}
						case 1:	if(Key_Scan()<5) left=Key_Scan();break;
						case 2:	if(Key_Scan()<10) right=Key_Scan();;break;
					}

					limt=left*10+right;
					OLED_ShowNum(90,40,limt,2,16);
					OLED_Refresh_Gram();		//更新显示到OLED 
				}/*结束while阈值设定*/
				
		/*---------温度范围报警--------------*/		
				warning(temp);//温度范围检测与报警
				prompt_warning(temp,limt);
				LED0=0;					//GPIOB.5
				temp_display(temp);//温度显示函数
				OLED_Refresh_Gram();		//更新显示到OLED 

			}
			else
			{
				if(display<2)
				{
					OLED_Clear();
					display=2;
				}
				LED0=1;	
				OLED_ShowString(0,0,"please key temp .....",16);
			}
		}
//----------------人脸识别-------------------//
		if(start==2)
		{
			static display1=2;
			if(display1==2)
			{
				OLED_Clear();
				display1=1;
			}
			OLED_ShowString(0,0,"Please click reset...",16);
			delay_ms(4000);
			OLED_ShowString(0,40,"Identify in the face....",16);
			delay_ms(10);
			
			if((boll_x==1)||(boll_y==2)||(boll_z==3)||(boll_b==4))
			{
				OLED_ShowString(10,0,"identification          ",16);
				delay_ms(2);
				if(boll_x==1)
				{
					OLED_ShowString(0,25,"name:xiaokangsong",16);
					OLED_Refresh_Gram();
				}
				else if(boll_y==2)
				{
					OLED_ShowString(0,25,"name:chengrujia  ",16);
					OLED_Refresh_Gram();
				}
				else if(boll_z==3)
				{
					OLED_ShowString(0,25,"name:mayumao    ",16);
					OLED_Refresh_Gram();
				}
			
				else if(boll_b==4)
				{
					
					OLED_ShowString(0,0,"error2",16);
					OLED_Refresh_Gram();
				}
			}
			else
			{
				OLED_ShowString(0,0,"Identification failure     ",16);
				display1=1;
			}
		}
		OLED_Refresh_Gram();		//更新显示到OLED
	} 
}

按键部分代码:

void Key_assignment(unsigned char z) //按键赋值
{
	Key_Data=0x00;   //清零
	if(z==0) 
	{
		key1_0;  key2_0;  key3_0;  key4_0;
		key5_1;  key6_1;  key7_1;  key8_1;   //使用的方法是反转法
	}
	else 
	{
		key1_1;  key2_1;  key3_1;  key4_1;
		key5_0;  key6_0;  key7_0;  key8_0;   //使用的方法是反转法 
	}
	
	delay_us(222);  //短延时一下
	
		 if(key1==1) Key_Data=Key_Data|0x80;
		 else        Key_Data=Key_Data|0x00;
	
		 if(key2==1) Key_Data=Key_Data|0x40;
		 else        Key_Data=Key_Data|0x00;
		
		 if(key3==1) Key_Data=Key_Data|0x20;
		 else        Key_Data=Key_Data|0x00;
		
		 if(key4==1) Key_Data=Key_Data|0x10;
		 else        Key_Data=Key_Data|0x00;

		 if(key5==1) Key_Data=Key_Data|0x08;
		 else        Key_Data=Key_Data|0x00;	
		
		 if(key6==1) Key_Data=Key_Data|0x04;
		 else        Key_Data=Key_Data|0x00;		
		
		 if(key7==1) Key_Data=Key_Data|0x02;
		 else        Key_Data=Key_Data|0x00;	
		
		 if(key8==1) Key_Data=Key_Data|0x01;
		 else        Key_Data=Key_Data|0x00;  //把这八个IO拼成一个数,也就是当成51里面的一组IO
	
}

  • 16
    点赞
  • 223
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
人脸识别门禁系统是一种现代化的门禁管理方式,它可以通过摄像头对人脸进行识别,从而实现门禁的自动控制。基于STM32人脸识别门禁系统可以实现高效、精准的人脸识别,同时也具有较低的成本和资源消耗。 下面是一个基于STM32人脸识别门禁系统设计思路: 1. 系统硬件设计系统主要由STM32单片机、摄像头模块、LCD显示屏、继电器等组成。其中,STM32单片机作为系统的主控制器,摄像头模块用于采集人脸图像,LCD显示屏用于显示门禁状态,继电器用于控制门禁的开关。 2. 系统软件设计系统软件主要包括人脸识别算法和门禁控制程序。人脸识别算法采用深度学习技术,通过对人脸图像进行特征提取和比对,实现对人脸的准确识别。门禁控制程序通过与继电器的配合,实现对门禁的自动开关控制。 3. 系统测试和优化:在系统开发完成后,需要进行系统测试和优化,以确保系统的可靠性和稳定性。测试过程中需要模拟实际使用场景,对系统进行多方位测试,并对测试结果进行分析和优化。 基于STM32人脸识别门禁系统具有以下优点: 1. 高效、精准的人脸识别能力,提高门禁管理的便捷性和安全性。 2. 硬件成本低,资源消耗少,适合小型门禁系统的应用。 3. 可以根据实际需求进行灵活的扩展和优化,具有很好的可拓展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨同舟1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值