基于OpenCV的人脸识别模型训练

qq

发布日期: 2019-04-25 09:55:54 浏览量: 411
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

一、csv文件的生成

当我们写人脸模型的训练程序的时候,我们需要读取人脸和人脸对应的标签。所以我们用csv文件读取。这个at.txt就是我们需要的csv文件。生成之后它里面是这个样子的:

opencv教程里面为我们提供了自动生成csv文件的脚本(记得改路径):

  1. #!/usr/bin/env python
  1. import sys
  2. import os.path
  3. # This is a tiny script to help you creating a CSV file from a face
  4. # database with a similar hierarchie:
  5. #
  6. # philipp@mango:~/facerec/data/at$ tree
  7. # .
  8. # |-- README
  9. # |-- s1
  10. # | |-- 1.pgm
  11. # | |-- ...
  12. # | |-- 10.pgm
  13. # |-- s2
  14. # | |-- 1.pgm
  15. # | |-- ...
  16. # | |-- 10.pgm
  17. # ...
  18. # |-- s40
  19. # | |-- 1.pgm
  20. # | |-- ...
  21. # | |-- 10.pgm
  22. #
  23. if __name__ == "__main__":
  24. #if len(sys.argv) != 2:
  25. # print "usage: create_csv <base_path>"
  26. # sys.exit(1)
  27. #BASE_PATH=sys.argv[1]
  28. BASE_PATH="C:/Users/bingbuyu/Downloads/att_faces"
  29. SEPARATOR=";"
  30. fh = open("../at.txt",'w')#改路径
  31. label = 0
  32. for dirname, dirnames, filenames in os.walk(BASE_PATH):
  33. for subdirname in dirnames:
  34. subject_path = os.path.join(dirname, subdirname)
  35. for filename in os.listdir(subject_path):
  36. abs_path = "%s/%s" % (subject_path, filename)
  37. print "%s%s%d" % (abs_path, SEPARATOR, label)
  38. fh.write(abs_path)
  39. fh.write(SEPARATOR)
  40. fh.write(str(label))
  41. fh.write("\n")
  42. label = label + 1
  43. fh.close()

然后运行这个脚本就可以生成一个既有路径又有标签的at.txt了。

2、训练模型

这里我们用到了opencv的Facerecognizer类。opencv中所有的人脸识别模型都是来源于这个类:

  1. def trainPhoto():
  2. images = []
  3. labels = []
  4. fh = open("E:\\OwnerWord\\owner\\data\\att_faces\\at.txt")#如果报错就使用绝对路径,Windows下记得使用\\
  5. cv2.namedWindow("show_img")
  6. for line in fh:
  7. arr = line.split(";")
  8. img = cv2.imread(arr[0], 0)
  9. images.append(img)
  10. labels.append(int(arr[1][:-1]))
  11. cv2.imshow("show_img",img)
  12. cv2.waitKey(20)
  13. model = cv2.face_EigenFaceRecognizer.create()
  14. model.train(np.asarray(images),np.asarray(labels))
  15. model.save("E:\\OwnerWord\\owner\\data\\att_faces\\predict_face_att.xml")
  16. print("trained")

到这里就训练好了,可以看到会生成一个predict_face_att.xml文件。

下面的附件给了此次的人脸识别数据,包含41人,每人10张照片,为.pgm文件,如果打不开,可以使用cv2.imshow(“1.pgm”)查看。

上传的附件 cloud_download faces.rar ( 3.07mb, 2次下载 )
error_outline 下载需要10点积分

qq

发送私信

11
文章数
0
评论数
最近文章
eject