zoukankan      html  css  js  c++  java
  • openmv4分辨人脸

    学习视频:https://singtown.com/learn/50033/

    在采集人脸信息的基础上,进行人脸匹配

    代码如下:

    import sensor, time, image, pyb
    
    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 = 5 #图像库中不同人数,一共5人
    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<pmin:                    #LBP特征匹配差异度的比较,并返回差异度最小的ID值
            pmin=a
            num=s
        return pmin
    
    for s in range(1, NUM_SUBJECTS+1):
        dist = 0
        for i in range(2, NUM_SUBJECTS_IMGS+1):
            img = image.Image("myselfpgm/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)#特征差异度越小,被检测人脸与此样本更相似更匹配。
        print(pmin)
    
    print(num) # num为当前最匹配的人的编号。

    运行结果:输出与当前对象最匹配的人(即LBP特征匹配差异度最小的)

    查看文件夹s3对比是否匹配一致:

    正是步行者,一步步登峰!

  • 相关阅读:
    第二章作业题
    数据类型及内置方法
    流程控制
    Python入门,基本数据类型
    练习题
    Java中的时间日期Date和Calendar
    String的static方法
    Java中基本类型的包装类
    Java中的API
    Java里的参数类型/返回值类型
  • 原文地址:https://www.cnblogs.com/ouyangmail/p/14281763.html
Copyright © 2011-2022 走看看