前言
人臉,指紋識(shí)別已經(jīng)走進(jìn)人們的生活,無疑這方便了人們的生活,也提高了安全和可靠性,所以作為未來的學(xué)習(xí)方向,我也來接觸接觸人臉識(shí)別(有不足之處請(qǐng)見諒??)
項(xiàng)目選型
為什么選擇 K210?
因?yàn)檫@款芯片有充足的開源資料足夠支撐我們學(xué)習(xí),并將文檔也很友好
相關(guān)資料連接
使用說明 (Github): github.com/sipeed/MF1-User-Manual
硬件原理圖/數(shù)據(jù)手冊(cè): https://dl.sipeed.com/shareURL/MAIX/HDK
固件/資源包資料下載: http://api.dl.sipeed.com/shareURL/MF_Module
Sipeed HardWare: github.com/sipeed/Sipeed_HardWare
?核心部分(K210)
主要根據(jù)?MF 人臉識(shí)別模塊通信串口協(xié)議(Hex版)進(jìn)行編寫程序,本次只是寫了添加,刪除和查詢?nèi)齻€(gè)基礎(chǔ)功能
使用到 串口2 進(jìn)行通信(代碼未貼,需要自行配置)
MF 人臉識(shí)別模塊通信串口協(xié)議(Hex版)https://github.com/sipeed/MF1-User-Manual/blob/master/zh_CN/p02_mf_protocol_manual_v2_hex_zh_CN.md
K210.h
/*********************************************************************************
* @Function : hr建立
@TEL : Q1727606470
@Others : 參考使用
**********************************************************************************/
#ifndef __H210_h
#define __H210_h
#include "stm32f10x.h"
#include <string.h>
#include <stdio.h>
typedef struct
{
uint8_t Add_User; //添加用戶指令
uint8_t Delete_User;//刪除用戶指令
uint8_t Check_User; //檢測(cè)用戶指令
uint8_t Set_LED; //設(shè)置LED亮度
}State_Flage_TypeDef;
//模組返回的消息類型說明
#define BINCMD_PING 0x00 // ping 指令
#define BINCMD_ABORT 0x01 // 中斷當(dāng)前執(zhí)行指令
#define BINCMD_INFO 0x02 // 查詢板卡信息
#define BINCMD_BAUD 0x03 // 設(shè)置波特率
#define BINCMD_RECORD 0x04 // 開始錄入人臉
#define BINCMD_CONFIRM 0x05 // 確認(rèn)錄入人臉
#define BINCMD_DEL 0x06 // 刪除指定 ID 人臉
#define BINCMD_FR_RUN 0x07 // 開始/停止運(yùn)行人臉識(shí)別
#define BINCMD_FR_RES 0x08 // 模塊返回的人臉識(shí)別結(jié)果
#define BINCMD_FR_GATE 0x09 // 設(shè)置人臉識(shí)別門限
#define BINCMD_LED 0x0A // 設(shè)置LED燈狀態(tài)
#define BINCMD_FR_RUN2 0x0B //
/*********************************************************************************
* @Function : 添加指定ID人臉
* @Input : User_ID 用戶id(0~254)
* @Output : None
* @Return : None
* @Others : 未使用CRC16驗(yàn)證
* @Date : 2022-09-14
**********************************************************************************/
void H210_InputFaceID(u8 User_ID);
/*********************************************************************************
* @Function : 刪除指定ID
* @Input : User_ID 用戶id(0~254)
* @Output : None
* @Return : None
* @Others : None
* @Date : 2022-09-14
**********************************************************************************/
void H210_ClearDate(u8 User_ID);
/*********************************************************************************
* @Function : 檢測(cè)人臉
* @Input : None
* @Output : None
* @Return : None
* @Others : 未使用CRC16驗(yàn)證
* @Date : 2022-09-14
**********************************************************************************/
void H210_CheckFacesID(void);
#endif
K210.c
#include "k210.h"
//k210使用的串口2
#include "usart.h"
#include "usart2.h"
#include "delay.h"
extern u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //獲取接收消息
extern vu16 USART2_RX_STA;
State_Flage_TypeDef *State_Flage; //枚舉一個(gè)狀態(tài)值
/*********************************************************************************
* @Function : 固定指令(程序中進(jìn)行修改)
**********************************************************************************/
unsigned char H210_FaceStorageCmd[11] ={0x24,0x24,0x0B,0x00,0xFF,0xFF,0x04,0x00,0x00,0x05,0x01};//錄入人臉,設(shè)置超時(shí)時(shí)間為 5 秒
unsigned char H210_FaceOKCmd[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x05,0x01}; //確認(rèn)錄入成功
unsigned char H210_CheckFaceID[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x07,0x01}; //開啟人臉識(shí)別,設(shè)置僅上報(bào)id,可以觀察到紅外燈亮起
unsigned char H210_CheckFaceIDMsg[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x07,0x02}; //開啟人臉識(shí)別,設(shè)置上報(bào)id及特征值,可以觀察到紅外燈亮起
unsigned char H210_CheckFaceNum[7] ={0x24,0x24,0x07,0x00,0xFF,0xFF,0x11}; //查詢錄入人數(shù)
unsigned char H210_CheckFaceAllmsg[7] ={0x24,0x24,0x07,0x00,0xFF,0xFF,0x12}; //查詢錄入的所有信息
unsigned char H210_DeleteFaceID[9] ={0x24,0x24,0x09,0x00,0xFF,0xFF,0x06,0x00,0xFF};//刪除指定用戶信息
unsigned char H210_SetLEDLight[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x0A,0x80}; //刪除指定用戶信息
/*********************************************************************************
* @Function : 設(shè)置LED亮度
* @Input : User_ID 用戶id(0~254)
* @Output : None
* @Return : None
* @Others : None
* @Date : 2022-09-14
**********************************************************************************/
static void Clear_flage(void)
{
//清空標(biāo)志位
State_Flage->Add_User =0; //添加人臉標(biāo)志位
State_Flage->Delete_User =0;//刪除人臉標(biāo)志位
State_Flage->Check_User =0; //檢測(cè)人臉標(biāo)志位
State_Flage->Set_LED =0; //設(shè)置LED亮度標(biāo)志位
H210_FaceStorageCmd[8]=0; //恢復(fù)人臉錄入數(shù)
}
/*********************************************************************************
* @Function : 設(shè)置LED亮度
* @Input : User_ID 用戶id(0~254)
* @Output : None
* @Return : None
* @Others : None
* @Date : 2022-09-14
**********************************************************************************/
static void Set_Light(u8 Light)
{
State_Flage->Set_LED =1;
H210_SetLEDLight[7] = Light;//修改LED亮度
Usart_SendArray(USART2,(char*)H210_SetLEDLight,sizeof(H210_SetLEDLight));//發(fā)送錄入指令
}
/*********************************************************************************
* @Function : 添加指定ID人臉
* @Input : User_ID 用戶id(0~254)
* @Output : None
* @Return : None
* @Others : 未使用CRC16驗(yàn)證
* @Date : 2022-09-14
**********************************************************************************/
void H210_InputFaceID(u8 User_ID)
{
State_Flage->Add_User =1;
H210_FaceStorageCmd[7] = User_ID;//修改用戶ID
Usart_SendArray(USART2,(char*)H210_FaceStorageCmd,sizeof(H210_FaceStorageCmd));//發(fā)送錄入指令
}
/*********************************************************************************
* @Function : 刪除指定ID
* @Input : User_ID 用戶id(0~254)
* @Output : None
* @Return : None
* @Others : 未使用CRC16驗(yàn)證
* @Date : 2022-09-14
**********************************************************************************/
void H210_ClearDate(u8 User_ID)
{
State_Flage->Delete_User =1;
H210_DeleteFaceID[7] = User_ID;//修改用戶ID
Usart_SendArray(USART2,(char*)H210_DeleteFaceID,sizeof(H210_DeleteFaceID));//發(fā)送刪除指令
}
/*********************************************************************************
* @Function : 檢測(cè)人臉
* @Input : None
* @Output : None
* @Return : None
* @Others : 未使用CRC16驗(yàn)證
* @Date : 2022-09-14
**********************************************************************************/
void H210_CheckFacesID(void)
{
State_Flage->Check_User =1;
Set_Light(90); //亮度設(shè)置(補(bǔ)光)
Usart_SendArray(USART2,(char*)H210_CheckFaceID,sizeof(H210_CheckFaceID));//發(fā)送刪除指令
}
/*********************************************************************************
* @Function : 循環(huán)檢測(cè)是否符合指令
* @Input : None
* @Output : None
* @Return : None
* @Others : None
* @Date : 2022-09-14
**********************************************************************************/
void H210_CheckHex(void){
if(USART2_RX_STA){
if(State_Flage->Check_User){//檢測(cè)用戶
if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0x83){//40 40 08 00 83 CE 87 00 檢測(cè)成功
printf("用戶ID: %d",USART2_RX_BUF[7]);//輸出檢測(cè)成功的用戶ID
Clear_flage(); //清除標(biāo)志位
Set_Light(0); //關(guān)閉補(bǔ)光
}
}
else if(State_Flage->Add_User){//添加用戶
if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0x2A){//錄入第一次人臉信息
switch(H210_FaceStorageCmd[8]){
case 0x00:H210_FaceStorageCmd[8]++;break;//開始錄入第二次錄入人臉信息
case 0x01:H210_FaceStorageCmd[8]++;break;//開始錄入第三次錄入人臉信息
case 0x02:H210_FaceStorageCmd[8]++;break;//超過我們限定(3)的錄入次數(shù)(發(fā)送確認(rèn)錄入信息)
}
if(H210_FaceStorageCmd[8]>0x02){
Usart_SendArray(USART2,(char*)H210_FaceOKCmd,sizeof(H210_FaceOKCmd));//確認(rèn)錄入指令
Clear_flage(); //清除標(biāo)志位
}else{
Usart_SendArray(USART2,(char*)H210_FaceStorageCmd,sizeof(H210_FaceStorageCmd));//發(fā)送錄入指令
}
}
}
else if(State_Flage->Delete_User){//刪除用戶
if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0x5B){//40 40 08 00 5B D7 86 00 刪除成功
Clear_flage(); //清除標(biāo)志位
}
}
else if(State_Flage->Set_LED){//設(shè)置LED亮度
if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0xFB){//40 40 08 00 5B D7 86 00 刪除成功
Clear_flage(); //清除標(biāo)志位
}
}
}
}
人臉設(shè)別的STM32主要的代碼塊已貼文章來源:http://www.zghlxwxcb.cn/news/detail-405317.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-405317.html
到了這里,關(guān)于STM32外設(shè)集 -- 人臉識(shí)別門禁系統(tǒng)(K210--HEX協(xié)議版本)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!