观看记录
  • 我的观影记录
登录
测试首页Python用局部二值模式直方图创建一个人脸识别器

Python用局部二值模式直方图创建一个人脸识别器

局部二值模式直方图(LBPH)建立人脸识别系统。在数据集中,可以看到分歧的人。构建一个能将每个人从其他人中区分出来的系统。

工具/原料

  • python 3.6
  • 局部二值模式直方图(LBP)

方式/步骤

  1. 1

    1、首先建立一个Python文件,并导入库文件:

         import os

                                                                                                                                             import cv2                                                                                                                   import numpy as np                                                                                                    from sklearn import preprocessing

  2. 2

    2、界说一个类来处置与类标签编码相关的所有使命:

         # 将单词转换当作数字的编码方式

         def encode_labels(self, label_words):                                                                                self.le = preprocessing.LabelEncoder()                                                                       self.le.fit(label_words)

         

         # 将单词转换当作数字的方式:

         def word_to_num(self, label_word):                                                                                  return int(self.le.transform([label_word])[0])

                                                                                                                                            # 将数字转换当作单词

         def num_to_word(self, label_num):                                                                                    return self.le.inverse_transform([label_num])[0]

  3. 3

    3、界说一个方式,用于输入文件夹中提取图像和标签:

         def get_images_and_labels(input_path):                                                                            label_words = []                                                                                                           # 对输入文件夹做递归迭代并追加文件                                                                           for root, dirs, files in os.walk(input_path):                                                                         for filename in (x for x in files if x.endswith('.jpg')):                                                         filepath = os.path.join(root, filename)                                                                       label_words.append(filepath.split('\\')[-2])                                                     # 初始化变量                                                                                                                 images = []                                                                                                                 le = LabelEncoder()                                                                                                     le.encode_labels(label_words)                                                                                     labels = []                                                                                                                                                                                                                                                         # 解析输入目次                                                                                                             for root, dirs, files in os.walk(input_path):                                                                         for filename in (x for x in files if x.endswith('.jpg')):                                                         filepath = os.path.join(root, filename)                                                                                                                                                                                               # 将当前图像读取当作灰度格局                                                                                         image = cv2.imread(filepath, 0)                                                                                 # 从文件夹路径中提取标签                                                                                           name = filepath.split('\\')[-2]                                                                                       # 做人脸检测                                                                                                                 faces = faceCascade.detectMultiScale(image, 1.1, 2, minSize=(100, 100))                 # 轮回处置每一张脸                                                                                  

                # 提取ROI属性值,并将这些值和标签编码器返回:                                                       for (x, y, w, h) in faces:                                                                                                       images.append(image[y:y + h, x:x + w])                                                                     labels.append(le.word_to_num(name))                                                           return images, labels, le

  4. 4

    4、界说main函数,并界说人脸级联文件的路径:

         if __name__ == '__main__':                                                                                                  cascade_path ="cascade_files/haarcascade_frontalface_alt.xml"                              path_train = 'faces_dataset/train'                                                                                path_test = 'faces_dataset/test'

                # 加载人脸级联文件

                faceCascade = cv2.CascadeClassifier(cascade_path)

                # 生当作局部二值模式直方图人脸识别器对象:

                recognizer = cv2.face.createLBPHFaceRecognizer()

  5. 5

    5、为输入路径提取图像、标签和标签编码器,并续联人脸识别器:

                # 从练习数据集中提取图像、标签和标签编码器                                                              images, labels, le = get_images_and_labels(path_train)                                            # 练习人脸识别器                                                                                                          print("\nTraining...")                                                                                                    recognizer.train(images, np.array(labels))

  6. 6

    6、用未知数据测试人脸识别器:

                print('\nPerforming prediction on test images...') 

                stop_flag = False

                for root, dirs, files in os.walk(path_test):

                      for filename in (x for x in files if x.endswith('.jpg')):

                            filepath = os.path.join(root, filename)

                            

                            # 读取图像

                            predict_image = cv2.imread(filepath, 0)

                            # 检测人脸

                            faces = faceCascade.detectMultiScale(predict_image, 1.1,                                                                                   2, minSize=(100, 100))

                         

  7. 7

    7、提取ROI属性值,并将这些值和标签编码器返回:

                            # 轮回处置每一张脸

                            for (x, y, w, h) in faces:

                                  # 展望输出

                                  predicted_index, conf = recognizer.predict(                                                                                      predict_image[y:y + h, x:x + w])

                                  # 将标签转换为单词

                                  predicted_person = le.num_to_word(predicted_index)

                                  # 输出图像中叠加文字 并显示图像

                                  cv2.putText(predict_image, 'Prediction:' +\

                                                      predicted_person, (10,60),cv2.FONT_HER                                                   SHEY_SIMPLEX, 2, (255, 255, 255), 6)

                                  cv2.imshow("Recognizing face", predict_image)

                           c=cv2.waitKey(0)

                           if c==27:                                                                                                                         stop_flag=True                                                                                                             break

                      if stop_flag:

                           break

“Python用局部二值模式直方图创建一个人脸识别器”关联的文章

  • 如何关闭皮皮搞笑精彩内容消息通知

    皮皮搞笑是一款手机搞笑社区App,让用户笑到没心没肺,又忍不住感动流泪的温暖家园,那么如何关闭皮皮搞笑精彩内容消息通知以满足不同用户的需求呢?

    1小时前0阅读

    如何关闭皮皮搞笑精彩内容消息通知
  • win7系统找不到宽带连接怎么办

    现如今很多用户都喜欢使用win7系统,而在使用win7系统的过程中做的最多的就是上网了。Win7系统上网离不开宽带连接,如果win7宽带连接找不到了,应该怎么办呢?下面就让小编为大家带来win7系统找不到宽带连接解决方法

    1小时前0阅读

    win7系统找不到宽带连接怎么办
  • 新版QQ音乐怎么关闭底部的直播导航

    新版QQ音乐怎么关闭底部的直播导航?下面请大家随小编一起来看看操作的方法吧。

    1小时前0阅读

    新版QQ音乐怎么关闭底部的直播导航
  • 怎样查询高速实时路况?

    要出行怎么查询高速实时路况?我们用地图就可以了,在地图上就可以看到实际的路况的,下面详细来看下。

    1小时前0阅读

  • 六芒星手势密码教程
  • 教师讲课过程评价标准

    教师是太阳底下最光辉的职业,但是成为教师之路也是要经历重重考验的,下面给大家说说教师讲课过程评价标准

    1小时前0阅读

  • 酚醛铝箔夹芯板

    酚醛铝箔夹芯板是由酚醛泡沫与两层亚光铝箔经过特殊工艺复合而成。外膜材料为经过高温固化的高分子膜,可有效的防止紫外线及气体腐蚀,并与铝箔结合牢固,又能与酚醛泡沫形成聚合物,从而保证象圆酚醛铝箔夹芯板的质量稳定。

    1小时前0阅读

  • Xperia XZ2 Premium配置如何

    Xperia XZ2 Premium是索尼在4月16日悄悄发布的新机,而且没进行预热,下面来简单了解一下配置。

    1小时前0阅读

  • PLSQL破解,无需注册码和破解工具

    PL/SQL Developer过期了,又没有注册码,又不想花钱买,而且事情又非常急,这时候怎么办?不要着急,请随小编一起解决这种情况吧。

    1小时前0阅读

  • Win11按capslock切换不了大小写怎么解决

    有朋友不知道在哪里设置,下面小编就给大家分享详细的设置方法,有需要帮助的朋友可以参考下这篇经验,希望能对大家有所帮助。

    2小时前0阅读

    Win11按capslock切换不了大小写怎么解决
切换深色外观
留言
视频编辑修改
回到顶部
首页
手机数码
医疗健康
金融管理
社交情感
无名