基于opencv[python]的人脸检测
创始人
2024-12-14 06:08:50

1 图片爬虫

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

# 获取图片数据 import os.path import fake_useragent import requests from lxml import etree  # UA伪装 head = {"User-Agent": fake_useragent.UserAgent().random}  pic_name = 0 def request_pic(url):     # 发送请求     response = requests.get(url, headers=head)     # 获取想要的数据     res_text = response.text     # 数据解析     tree = etree.HTML(res_text)     li_list = tree.xpath("//div[@class='slist']/ul/li")     for li in li_list:         # 图片的url         img_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))         # 发送请求         img_response = requests.get(img_url, headers=head)         # 获取想要的数据         img_content = img_response.content         global pic_name         with open(f"./picLib/{pic_name}.jpg", "wb") as fp:             fp.write(img_content)         pic_name += 1  if __name__ == '__main__':     # 创建存放照片的文件夹     if not os.path.exists("./picLib"):         os.mkdir("./picLib")     # 网站的url     url = "https://pic.netbian.com/4kdongman/"     request_pic(url)     for i in range(1,10):         next_url = f"https://pic.netbian.com/4kmeinv/index_{i}.html"         request_pic(next_url) 

         结果如图1-1所示:

图 1-1  

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

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

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

图 2-1 

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

上一篇:记录|Stock编程

下一篇:安卓5.0.1升级包

相关内容

热门资讯

长光卫星8颗卫星今日出征 将于... 5月17日,长光卫星技术股份有限公司在吉林省航天信息产业园举行“文物01星”、“彩云光学01星”、“...
管网式七氟丙烷气体灭火装置厂家... 导语:管网式七氟丙烷气体灭火装置作为高效环保的消防设备,广泛应用于工业厂房、电力设施、档案馆等场景。...
让好故事更好抵达观众(人文茶座... 牛梦笛 打开手机,嫦娥奔月的故事在AI(人工智能)影像里重现;节气传说、上古神话,在小小屏幕间次第展...
蜂巢能源申请电池模组和电池包专... 国家知识产权局信息显示,蜂巢能源科技股份有限公司申请一项名为“电池模组和电池包”的专利,公开号CN1...
乐道做对了,也稳住了 “两年前,乐道品牌第一次和大家见面。那时候有人问:中国市场还需要一个新品牌吗?纯电品牌真的能活下来吗...