栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【毕设】基于openmv和arduino的人脸感应显示器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【毕设】基于openmv和arduino的人脸感应显示器

这里写目录标题
  • 作品要求:
  • 一、作品设计与模块选择
    • 1.可以感应人脸
    • 2.感应到人脸时开启显示屏显示
    • 3.显示温度、速度等

作品要求:

一、作品设计与模块选择 1.可以感应人脸

人脸识别模块选用openmv模块,因为opencv用起来相对复杂。
用官方人脸识别示例代码进行修改,得出以下代码:
获取照片:

像素点是92,112的,并且是灰度图,pgm格式,存在singtown中,然后在singtown文件夹中再新建n个名为s1,s2,s3…sn的子文件夹,其中n为整个图像库中的人数。

#快照示例
#
#注意:你需要一个SD卡来运行这个例子。
#
#你可以使用你的OpenMV摄像机来保存图像文件。

import sensor, image, pyb

RED_LED_PIN = 1
BLUE_LED_PIN = 3

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)

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

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

#连续拍摄n张照片,每间隔3s拍摄一次。
while(n):
    #红灯亮
    pyb.LED(RED_LED_PIN).on()
    sensor.skip_frames(time = 3000) # 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("singtown/s%s/%s.pgm" % (num, n) ) # or "example.bmp" (or others)

    n -= 1

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

LBP人脸识别代码:

#使用LBP描述符进行人脸识别。
#查看Timo Ahonen的“基于局部二进制模式的人脸识别”。
#在运行示例之前:
# 1)下载AT&T面对数据库http://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.zip
# 2)提取并复制orl_faces目录到SD卡根目录。


import sensor, time, image, pyb  
from pyb import UART		#添加串口

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

uart = UART(3, 115200)

#SUB = "s1"
NUM_SUBJECTS = 6 #图像库中不同人数,一共6人
NUM_SUBJECTS_IMGS = 20 #每人有20张样本图片

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

def min(pmin, a, s):
    global num
    if a 
2.感应到人脸时开启显示屏显示 
#include 
#include 
#include 
#include 

#define SCREEN_WIDTH 128 // OLED显示宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED显示高度,以像素为单位

//连接到I2C的SSD1306显示器声明(SDA, SCL引脚)
#define OLED_RESET     4 // 复位引脚#(如果共享Arduino复位引脚,则为-1)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


volatile int flag;
String shuju;

void serialEvent() {
  while (Serial.available() > 0) {
    shuju = shuju + char(Serial.read());
    delay(2);
    flag = 1;
  }
  if (flag == 1) {
    Serial.println(shuju);

    
    shuju = "";
    flag = 0;

  }
}

void uart_dispose() {
  if(shuju=="2")
  {
    display.print("A");
      display.display();
    }
}

void setup(){
  flag = 0;
  shuju = "0";
  Serial.begin(9600);

  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.display(); // actually display all of the above
  
}

void loop(){

}
3.显示温度、速度等
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号