导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. xndo
    X
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    xndo

    @xndo

    0
    声望
    9
    楼层
    629
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 最后登录

    xndo 关注

    xndo 发布的帖子

    • TypeError: 'int' object isn't callable 出现莫名奇妙的问题

      我是前几天帖子的帖主,这次是进行人脸识别,为了提高人脸抓取的准确性,在人脸识别的基础上进行eyes的判断,每次进行人脸计算的时候就会在min函数的调用时出现TypeError: 'int' object isn't callable的报错,属实是有些莫名其妙。希望得到官方的解答,另:论坛无法上传20张人脸库,如若测试代码,在base文件中创建s1、s2两个文件夹存储20张图片即可。

      import sensor, image, time, pyb
      from pyb import Pin
      
      red   = pyb.LED(1)                        #初始化led
      green = pyb.LED(2)
      blue  = pyb.LED(3)
      yellow= pyb.LED(4)
      
      sensor.reset()                            #传感器重置
      sensor.set_contrast(3)                    #感光元件设置
      sensor.set_gainceiling(16)
      sensor.set_pixformat(sensor.GRAYSCALE)    #图像格式为灰度值
      sensor.set_framesize(sensor.QQVGA)        #图像大小为HQVGA,用于人脸识别
      sensor.set_vflip(True)
      sensor.skip_frames(time = 3000)           #等待sensor稳定
      
      face_cascade = image.HaarCascade("frontalface", stages=25) #载入人脸识别模型
      eyes_cascade = image.HaarCascade("eye", stages=24)         #载入人眼识别模型
      
      clock = time.clock()                      #初始化系统时钟
      
      p = pyb.Pin("P8", pyb.Pin.OUT_PP)
      
      
      def tick(timer):
          p.high()
          pyb.delay(1)
          p.low()
      
      
      tim=pyb.Timer(4)
      tim.init(freq=1)
      tim.callback(tick)
      
      count=0                                   #每个人拍50张照片
      person=1                                  #不同编号的人
      person_base=1                             #数据库人数
      person_base_total=2                      #数据库总人数
      person_base_total_count=0                 #数据库总人数(变量)
      dist_once=0                               #lbp差异值
      num_final=0                               #最终匹配编号
      num_once=0                                #单次匹配编号
      pmin = 999999                             #最小值初始化
      
      detect_1=0
      detect_2=0
      
      def min(pmin, a, s):
          global num_once
          if a<pmin:
              pmin=a
              num_once=s
          return pmin
      
      
      
      
      while(True):                              #系统主循环
          clock.tick()
          img = sensor.snapshot()
          objects = img.find_features(face_cascade, threshold=0.75, scale=1.35)
          if objects:
              face_find=objects[0]
              if face_find[2]>=81 and face_find[3]>=81:
                  red.on()
                  pmin=999999
                  sensor.set_windowing(objects[0])
                  eyes = img.find_features(eyes_cascade, threshold=0.5, scale_factor=1.2, roi=objects[0])
                  if eyes:
                      for snapshot_save in range(1,31):
                          sensor.snapshot().save("now/s%s/%s.pgm" % (1,snapshot_save ) )
                          print(snapshot_save,':',face_find[2],face_find[3])
                      num_final=0
                      detect_1=0
                      detect_2=0
                      for s_now in range(1,31):
                          pmin=99999
                          num_once=0
                          img_now=image.Image("now/s%d/%d.pgm"%(1, s_now))
                          d_now=img_now.find_lbp((0, 0, 81, 81))
                          for person_base_total_count in range(1,person_base_total+1):
                              dist_once=0
                              for s_base in range(1,21):
                                  img_base=image.Image("base/s%d/%d.pgm"%(person_base_total_count, s_base))
                                  d_base=img_base.find_lbp((0, 0, 81, 81))
                                  dist_once += image.match_descriptor(d_now, d_base)
                              dist_ave=dist_once/20
                              print(s_now,':',person_base_total_count,':',dist_ave)
                              pmin=min(pmin,dist_ave,person_base_total_count)
                          if num_once==1:
                              detect_1+=1
                          if num_once==2:
                              detect_2+=1
                          print('the number of photo is:',s_now,':',num_once)
                      print('the number of person 1:',detect_1,'the number of person 2:',detect_2)
                      if detect_1>=detect_2:
                          num_final=1
                      if detect_1<detect_2:
                          num_final=2
                      print('this person is number:',num_final)
                      if num_final==1:
                          green.on()
                      elif num_final!=1:
                          blue.on()
                  else:
                      red.off()
                      sensor.set_windowing((0,0,160,120))
          else:
              red.off()
              sensor.set_windowing((0,0,160,120))
          green.toggle()
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      发布在 OpenMV Cam
      X
      xndo
    • RE: 程序运行过程中 中间变量突然报错称未定义

      脱机运行的时候有时候会突然闪两下红灯造成死机

      发布在 OpenMV Cam
      X
      xndo
    • RE: 程序运行过程中 中间变量突然报错称未定义

      希望在论坛里得到官方的解答,程序没有问题,正常运行的时候可以一直运行10分钟不出问题,又会有10%左右的概率在一开始进行人脸计算的时候死机

      发布在 OpenMV Cam
      X
      xndo
    • RE: 程序运行过程中 中间变量突然报错称未定义

      程序脱机运行的时候时而正常,又会有10%的概率在人脸计算的时候死机,导致程序不再运行

      发布在 OpenMV Cam
      X
      xndo
    • RE: 程序运行过程中 中间变量突然报错称未定义

      有时还会出现openmv运行程序时突然断连的情况,感觉不是很稳定,是什么原因啊?

      发布在 OpenMV Cam
      X
      xndo
    • 程序运行过程中 中间变量突然报错称未定义

      代码如下,将sd卡中某个文件的20张人脸与人脸库中20张人脸进行lbp特征值匹配,在对应list中填写识别人脸的编号,最终统计list中最多元素个数即认为是对应的人脸,在运行第6次时突然报错:NameError: name 'd_now' isn't defined
      不会是变量未定义的问题,不然的话第一次循环就会报错,现在问题在于循环至第六次时出现错误,openmv为openmvH7,固件为3.6.7,希望得到官方的解答,谢谢

      import sensor, image, time, pyb
      from pyb import Pin
      
      red   = pyb.LED(1)                        #初始化led
      green = pyb.LED(2)
      blue  = pyb.LED(3)
      
      sensor.reset()                            #传感器重置
      sensor.set_contrast(3)                    #感光元件设置
      sensor.set_gainceiling(16)
      sensor.set_pixformat(sensor.GRAYSCALE)    #图像格式为灰度值
      sensor.set_framesize(sensor.QQVGA)        #图像大小为HQVGA,用于人脸识别
      sensor.set_hmirror(True)                  #水平翻转
      sensor.skip_frames(time = 2000)           #等待sensor稳定
      
      face_cascade = image.HaarCascade("frontalface", stages=25) #载入人脸识别模型
      
      clock = time.clock()                      #初始化系统时钟
      
      count=0                                   #每个人拍50张照片
      person=1                                  #不同编号的人
      person_base=1                             #数据库人数
      person_base_total=2                       #数据库总人数
      person_base_total_count=0                 #数据库总人数(变量)
      dist_once=0                               #lbp差异值
      num_final=0                               #最终匹配编号
      num_once=0                                #单次匹配编号
      pmin = 999999                             #最小值初始化
      
      def min(pmin, a, s):
          global num_once
          if a<pmin:
              pmin=a
              num_once=s
          return pmin
      
      
      def showmax(lt):
          index1 = 0                       #记录出现次数最多的元素下标
          max = 0                          #记录最大的元素出现次数
          for i in range(len(lt)):
              flag = 0                    #记录每一个元素出现的次数
              for j in range(i+1,len(lt)): #遍历i之后的元素下标
                  if lt[j] == lt[i]:
                      flag += 1           #每当发现与自己相同的元素,flag+1
              if flag > max:              #如果此时元素出现的次数大于最大值,记录此时元素的下标
                  max = flag
                  index1 = i
          return lt[index1]               #返回出现最多的元素
      
      while(True):                              #系统主循环
          clock.tick()
          list_now=[0]*20
          num_final=0
          for s_now in range(1,21):
              pmin=99999
              num_once=0
              img_now=image.Image("now/s%d/%d.pgm"%(1, s_now))
              d_now=img_now.find_lbp((0, 0, 81, 81))
              for person_base_total_count in range(1,person_base_total+1):
                  dist_once=0
                  for s_base in range(1,21):
                      img_base=image.Image("base/s%d/%d.pgm"%(person_base_total_count, s_base))
                      d_base=img_base.find_lbp((0, 0, 81, 81))
                      dist_once += image.match_descriptor(d_now, d_base)
                  dist_ave=dist_once/20
                  pmin=min(pmin,dist_ave,person_base_total_count)
              list_now[s_now-1]=num_once
              print('the number of photo is:',s_now,':',list_now[s_now-1])
          print(list_now)
          num_final=showmax(list_now)
          print('this person is number:',num_final)
      
      
      发布在 OpenMV Cam
      X
      xndo
    • 检测是否存在人脸例程 if语法错误
      import sensor, time, image,pyb
      sensor.reset()
      sensor.set_contrast(3)
      sensor.set_gainceiling(16)
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.HQVGA)
      green = pyb.LED(2)
      face_cascade = image.HaarCascade("frontalface", stages=25)
      print(face_cascade)
      clock = time.clock()
      while (True):
          clock.tick()
      
      
          img = sensor.snapshot()
      
          objects = img.find_features(face_cascade, threshold=0.75, scale_factor=1.25)
          
          if objects:
              green.on()
               
      
          for r in objects:
              img.draw_rectangle(r)
      
       
          print(clock.fps())
      

      就是官方检测是否存在人脸的例程,只加了下面两行:

      if objects:
              green.on()
      

      编译运行时总是在green.on()处报错,更改为print("检测人脸")依旧不行
      if下面缩进也是四个字符,现在没太搞懂为什么会报错,请明白的同学指点,感谢

      发布在 OpenMV Cam
      X
      xndo
    • RE: 人脸lbp特征值比对的时候可不可以以第三个人为参照辨别两个人脸?

      希望了解的朋友可以给出建议,这个方式是否可行

      发布在 OpenMV Cam
      X
      xndo
    • 人脸lbp特征值比对的时候可不可以以第三个人为参照辨别两个人脸?

      首先分别获取A,B,C三个人20张人脸作为人脸库
      将A的20张人脸分别与C的20张人脸进行lbp特征值比对,计算出差异的平均值DA
      再将B的20张人脸分别与C的20张人脸进行lbp特征值比对,计算出差异的平均值DB
      之后进行人脸判别
      将摄像头对准A 计算该人脸与C的20张人脸的lbp特征值比对差异的平均值DA'
      那么可不可以根据DA'与DA,DB差异的大小判断现在摄像头识别的人脸是A还是B?
      想明确一下这个方案是否是可行的,以第三个人为参照来分别A和B两个人的人脸

      发布在 OpenMV Cam
      X
      xndo