【笔记】OpenCV3 人脸识别

人脸识别就是一个程序能识别给定图像或视频中的人脸,OpenCV是用一系列分类好的图像来训练程序,并基于这些图像来进行识别。

它的每个识别,都有置信评分,在实际应用中通过对其设置阈值来进行筛选。


为了简单实现人脸识别的功能,写了几个函数从文件夹的图片、从视频中获取头像数据集合

  • 从视频中获取头像

  1. 创建存储头像的文件夹,用名称做文件夹的名字
  2. 用上一节的检查头像的方法,检测到头像后,调整大小到200*200,方便后面头像识别时对比
def genarate(user_name):
    userdir = './data/at/%s' % user_name
    if not os.path.exists(userdir):
        print('make dir ', userdir)
        os.mkdir(userdir)

    face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_alt.xml')

    camera = cv2.VideoCapture(0)
    isopen = camera.isOpened()
    if not isopen:
        print('打开摄像头失败...')

    camera.set(3, 1280)
    camera.set(4, 720)

    cv2.namedWindow('face')
    while isopen:
        ret, frame = camera.read()
        if ret:
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            faces = face_cascade.detectMultiScale(gray, 1.2, 5,minSize=(50,50))

            for (x,y,w,h) in faces:
                cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)

                f = cv2.resize(gray[y:y+h,x:x+w],(200,200))
                filename = './data/at/%s/%s.pgm' % (user_name, str(count))
                cv2.imwrite(filename, f)

            cv2.imshow('face', frame)
            pressKey = cv2.waitKey(1)
            if cv2.getWindowProperty('face', cv2.WND_PROP_AUTOSIZE) < 1:
                break
            if pressKey == 27:  # ESC
                print('退出。。。。。')
                break
        else:
            break

    camera.release()
    cv2.destroyAllWindows()
  • 从文件夹中获取头像图片

  1. 传入待查找的文件夹
  2. 读取目录里面的.jpg的图片,进行头像检测
  3. 将检测到头像存到文件夹中。(此处生成的图片用了.jpg的后缀,没有用之前的.pgm,用JPG方便后面手工分类,可以看到预览图)
  4. 这个函数主要是把目录里面的所有的头像生成到一个位置,再手工拷贝到对应的训练库的文件夹中去
def getpic_fromdir(dirname):

    face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_alt.xml')

    cv2.namedWindow('face',0)
    cv2.resizeWindow('face',1280,720)
    count = 0
    for filename in os.listdir(dirname):
        filedir = os.path.join(dirname,filename)
        if os.path.isdir(filedir):
            continue
        extname = os.path.splitext(filename)[1]
        if extname.upper() != '.
  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值