当前位置:   article > 正文

基于opencv[python]的人脸检测

基于opencv[python]的人脸检测

1 图片爬虫

这里的代码转载自:http://t.csdnimg.cn/T4R4F

  1. # 获取图片数据
  2. import os.path
  3. import fake_useragent
  4. import requests
  5. from lxml import etree
  6. # UA伪装
  7. head = {"User-Agent": fake_useragent.UserAgent().random}
  8. pic_name = 0
  9. def request_pic(url):
  10. # 发送请求
  11. response = requests.get(url, headers=head)
  12. # 获取想要的数据
  13. res_text = response.text
  14. # 数据解析
  15. tree = etree.HTML(res_text)
  16. li_list = tree.xpath("//div[@class='slist']/ul/li")
  17. for li in li_list:
  18. # 图片的url
  19. img_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))
  20. # 发送请求
  21. img_response = requests.get(img_url, headers=head)
  22. # 获取想要的数据
  23. img_content = img_response.content
  24. global pic_name
  25. with open(f"./picLib/{pic_name}.jpg", "wb") as fp:
  26. fp.write(img_content)
  27. pic_name += 1
  28. if __name__ == '__main__':
  29. # 创建存放照片的文件夹
  30. if not os.path.exists("./picLib"):
  31. os.mkdir("./picLib")
  32. # 网站的url
  33. url = "https://pic.netbian.com/4kdongman/"
  34. request_pic(url)
  35. for i in range(1,10):
  36. next_url = f"https://pic.netbian.com/4kmeinv/index_{i}.html"
  37. request_pic(next_url)

         结果如图1-1所示:

图 1-1  

2 基于opencv自带分类器的人脸检测 

  1. import cv2
  2. import os
  3. import matplotlib.pyplot as plt
  4. # 定义人脸检测器的路径
  5. face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
  6. # 设置图片文件夹路径
  7. folder_path = 'picLib'
  8. # 设置要显示的图像数量
  9. num_to_display = 5 # 例如,只显示前4张图像
  10. # 创建一个图形和子图
  11. fig, axs = plt.subplots(1, num_to_display, figsize=(15, 5))
  12. # 遍历文件夹中的前几张图片
  13. for i in range(num_to_display):
  14. file_name = f'{i}.jpg'
  15. image_path = os.path.join(folder_path, file_name)
  16. # 读取图片
  17. img = cv2.imread(image_path)
  18. if img is None:
  19. print(f"Error loading image {file_name}")
  20. continue
  21. # 转换为灰度图
  22. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  23. # 检测人脸
  24. faces = face_cascade.detectMultiScale(gray, 1.3, 5)
  25. # 在原图上绘制矩形框
  26. for (x, y, w, h) in faces:
  27. cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
  28. # 注意:OpenCV 图像是BGR,而Matplotlib 期望的是RGB,因此我们需要转换颜色通道
  29. img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  30. # 显示图像
  31. axs[i].imshow(img_rgb)
  32. axs[i].axis('off') # 关闭坐标轴
  33. # 显示图形
  34. plt.show()

        运行结果如图2-1所示:

图 2-1 

        从这里可以清晰看到有1/3的图像没有成功检测到,后面我试试用Faster R-CNN模型,不过需要标注,数据量也大,这里先试着玩玩呗。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/911563
推荐阅读
相关标签
  

闽ICP备14008679号