使用Python-opencv3制作简单的人脸识别系统

本文介绍了如何使用Python和OpenCV3构建一个简单的人脸识别系统,包括通过摄像头采集人脸、训练分类器、实现人脸识别及语音交互,并结合数据库进行信息保存和读取。系统具备签到功能,能根据姓名或日期查询签到记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下自己做这个小程序的笔记!

使用工具:PyCharm,python版本3.7,opencv3
使用的包:
import
原理和功能
使用opencv3调用摄像头,获取图像保存,对保存的图片进行OPENCVLBHP算法训练,利用训练集和分类器实现人脸识别。使用语音模块进行人机交互,使用数据库相关操作保存和读取数据库!

详细设计
由于保存人脸信息和训练集需要文件夹,这里先进行检测环境,如果没有就进行创建。

def makeDir(engine,x):
    if not os.path.exists("face_trainer"):
        print("创建预训练环境")
        engine.say('检测到第一次启动,正在创建预训练环境')
        os.mkdir("face_trainer")
        engine.say('创建成功')
        engine.runAndWait()
        x=2
    if not os.path.exists("Facedata"):
        print("创建训练环境")
        engine.say('正在创建训练环境')
        os.mkdir("Facedata")
        engine.say('创建成功')
        engine.runAndWait()
        x=2
    return x

通过摄像头采集人脸信息

def getFace(cap,face_id):
    face_detector = cv2.CascadeClassifier('./lib/haarcascade_frontalface_default.xml')
    print('\n Initializing face capture. Look at the camera and wait ...')
    count = 0
    while True:
        sucess, img = cap.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_detector.detectMultiScale(gray, 1.3, 5)
        for (x, y, w, h) in faces:
            cv2.rectangle(img, (x, y), (x+w, y+w), (255, 0, 0))
            count += 1
            cv2.imwrite("Facedata/User." + str(face_id) + '.' + str(count) + '.jpg', gray[y: y + h, x: x + w])
            cv2.imshow('image', img)
        # 保持画面的持续。
        k = cv2.waitKey(1)
        if k == 27:   # 通过esc键退出摄像
            break
        elif count >= 1000:  # 得到1000个样本后退出摄像
            break
    cv2.destroyAllWindows()

cv2.CascadeClassifier中加载分类器,使用官方给定的xml分类器进行识别。

接着后面会用到路径有关的读取函数实现如下:

def getImagesAndLabels(path,detector):
        imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
        faceSamples = []
        ids = []
        for imagePath in imagePaths:
            PIL_img = Image.open(imagePath).convert('L')
            img_numpy = np.array(PIL_img, 'uint8')
            id 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值