• 【毕业设计】基于单片机的人脸识别与追踪系统 -物联网 stm32



    1 简介

    Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目

    基于单片机的人脸识别追踪

    大家可用于 课程设计 或 毕业设计


    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052


    2 项目简介

    传统图像监控设备功能非常单一,仅有图像的采集与显示功能,已经不能满足现代技术要求。

    本项目尝试物联网概念结合,不仅实现了包含传统的录像功能,还实现了如今同样很火暴的技术——人脸识别

    本项目的优点:

    通过WIFI传输数据,只要哪里有电源插座,便可作为视频监控点。

    通过WIFI传输,可远程操作摄像头运行模式(运行、停止、低功耗),实时性增强。

    结合上位机人脸识别,自动记录、拍照人脸画面,不再需要像传统设备快进来查找出现人脸画面,追踪更加方便。

    2 主要器件

    • 开发板: NUCLEO-64 STM32F446

    • 主控MCU:STM32F446RET6

    功能特点:带有数字摄像头DCMI接口,不需要FIFO可直接连接并口摄像头。具有片内128KB的SRAM,存储空间大。

    • WIFI模块:3080B

    功能特点:具有STATION和AP功能,提供TCP SOCKET通信,能通过UART直接换TCP通信,非常方便。

    • 摄像头:OV2640 200万像素

    功能特点:提供多种分辨率选择,对于一帧QVGA图像(分辨率320*240)的RGB565所需的153600字节的空间,这对于该主控的SRAM来说,空间是不足够,而OV2640自带JPEG压缩技术,一帧QVGA图像经过JPEG压缩后不到10KB,极大节省SRAM存储空间。

    • 摄像头转接板:

    功能特点:连接开发板与摄像头,减少传输干扰导致的图像数据丢失。

    主控引脚连接图:

    在这里插入图片描述

    3 硬件效果

    在这里插入图片描述

    4 软件设计

    4.1 功能架构

    在这里插入图片描述
    开发平台采用:由于MBED平台暂时不支持摄像头接口,所以先暂时使用ST官方的HAL库,在完成所有功能实现后,将移植到MBED平台。

    开发工具:keil 5.17

    上位机开发: .C++ 与QT5.1,视觉库opencv

    开发工具:visual stdio 2017

    下位机软件驱动:

    串口UART驱动:与WIFI模块3080B采用UART通信。

    I2C驱动:对摄像头进行初始化设置。

    DCMI驱动:设置从摄像头采集图像接口。

    MCO1驱动:给摄像头模块提供时钟。

    4.2 软件程序流程图

    在这里插入图片描述

    5 部分实现代码

    下位机:

    系统上电后,串口和摄像头进行初始化,进入拍照等待。

    通过串口接收回调接收上位机发送过来的拍照指令,调用DCMI接口进行拍照。

    通过DCMI的帧完成回调函数可知道图像采集完成,发送图像回上位机。

    下位机核心逻辑代码:

    while (1)
      {
      /* USER CODE END WHILE */
    		if(takePhoto==1){
    		  takePhoto=0;
    			if(Rxbuffer[0]==0x12 &&Rxbuffer[1]==0x34){
    				Rxbuffer[0]=0; 
    				Rxbuffer[1]=0;
    				//__HAL_DCMI_ENABLE(&DCMI_hdcmi);
    				__HAL_DCMI_ENABLE_IT(&DCMI_hdcmi, DCMI_IT_FRAME);   //每次接收完一帧都需要重新使能捕捉FRAME中断
    				while(HAL_DCMI_Start_DMA(&DCMI_hdcmi, DCMI_MODE_SNAPSHOT,(uint32_t)JpegBuffer, pictureBufferLength)!=HAL_OK);//开启捕捉图像
    			}
    			HAL_UART_Receive_IT(&UartHandle, (uint8_t *)Rxbuffer, 2);
    		}
    		if(getPicture==1){
    			uint8_t dataHead[8]={'J','P','E','G'};
    			pictureLength=pictureBufferLength-DCMI_hdcmi.DMA_Handle->Instance->NDTR;//这个NDTR存放了JPEG的长度
    			pictureLength*=4;  //因为DCMI的FIFO是4字节,DMA也是满4字节传输一次,所以图像实际长度=传输次数*4;
    			getPicture=0;
    			(*(uint32_t*)(dataHead+4))=(uint32_t)pictureLength;   //data是8字节,前4字节用来放"JPEG",后4字节用来存放图像实际长度
    			while(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)dataHead, 8)!=HAL_OK);  //先发送数据长度给上位机
    			HAL_Delay(20);
    			while(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)JpegBuffer, pictureLength)!=HAL_OK);//再发送数据给上位机
    
    		}
      /* USER CODE BEGIN 3 */
    
      }
    
    • 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

    6 演示效果

    图片采集与人脸追踪效果:

    在这里插入图片描述

    图片采集与人脸追踪效果:

    在这里插入图片描述


    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052


    6 最后

  • 相关阅读:
    备战秋招--springboot篇
    CSM32RV003:国产高精度16位ADC低功耗RISC-V内核MCU
    有哪些适合程序员做的副业?
    【PAT(甲级)】1043 Is It a Binary Search Tree
    深度解读AIGC存储解决方案
    VMware17 不可恢复错误mks解决方案
    一款免费的中英文文本翻译的api接口
    java计算机毕业设计摄影网上预约管理系统源码+mysql数据库+系统+lw文档+部署
    避免项目资源管理陷阱,8Manage帮你支招!
    三层交换机
  • 原文地址:https://blog.csdn.net/m0_71572576/article/details/125641469