04.过滤掉朋友圈头像中不含人脸的图片(选作)

简介: 04.过滤掉朋友圈头像中不含人脸的图片(选作)

目的


为第五步合成照片墙做准备,这步为选作,如果朋友比较多,可以过滤一下,如果比较少,就不用过滤了。


安装第三方库opencv

pip install opencv

项目准备

  • 新建一个目录(user_no_face),不含人脸的图片会被转移到该目录
  • 把人脸识别模型文件(haarcascade_frontalface_alt.xml),拷贝到项目目录下。该文件在安装完opencv库后可以在以下位置找到:


image.png

image.png

代码

# -*-coding:utf8-*-
import os
import cv2
import shutil
def getAllPath(dirpath):
    PathArray = []
    for filename in os.listdir(dirpath):
        if filename.endswith('jpg') or filename.endswith('png'):
            PathArray.append(os.path.join(dirpath, filename))
    return PathArray
# 从源路径中读取所有图片放入一个list,然后逐一进行检查,把其中的脸扣下来,存储到目标路径中
def readPicSaveFace(sourcePath,invalidPath):
    try:
        ImagePaths = getAllPath(sourcePath)
        # 对list中图片逐一进行检查,找出其中的人脸然后写到目标文件夹下
        # haarcascade_frontalface_alt.xml为库训练好的分类器文件,下载opencv,安装目录中可找到
        face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
        for imagePath in ImagePaths:
            img = cv2.imread(imagePath)
            if type(img) != str:
                faces = face_cascade.detectMultiScale(img, 1.1, 5)
                if len(faces):
                    print(imagePath + " have face")
                else:
                    shutil.move(imagePath, invalidPath)
    except IOError:
        print("Error")
if __name__ == '__main__':
    invalidPath = './user_no_face'
    sourcePath = 'user'
    readPicSaveFace(sourcePath,invalidPath)

备注:

  1. detecMultiScale()函数

参数介绍:

参数1:image--待检测图片,一般为灰度图像加快检测速度;

参数2:objects--被检测物体的矩形框向量组;

参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。

如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。

如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,

这种设定值一般用在用户自定义对检测结果的组合程序上;

参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为

CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,

因此这些区域通常不会是人脸所在区域;

参数6、7:minSize和maxSize用来限制得到的目标区域的范围。

2.人脸检测器

Opencv自带训练好的人脸检测模型,存储在sources/data/haarcascades文件夹和sources/data/lbpcascades文件夹下。其中几个.xml文件如下:

人脸检测器(默认):haarcascade_frontalface_default.xml

人脸检测器(快速Harr):haarcascade_frontalface_alt2.xml

人脸检测器(侧视):haarcascade_profileface.xml

眼部检测器(左眼):haarcascade_lefteye_2splits.xml

眼部检测器(右眼):haarcascade_righteye_2splits.xml

嘴部检测器:haarcascade_mcs_mouth.xml

鼻子检测器:haarcascade_mcs_nose.xml

身体检测器:haarcascade_fullbody.xml

人脸检测器(快速LBP):lbpcascade_frontalface.xml

目录
相关文章
|
网络协议 Linux 虚拟化
桥接方式: vmware虚拟机安装的centos7连接外网教程
桥接方式: vmware虚拟机安装的centos7连接外网教程
1771 0
桥接方式: vmware虚拟机安装的centos7连接外网教程
|
机器学习/深度学习 数据可视化 网络架构
增强深度学习模型的可解释性和泛化能力的方法研究
【8月更文第15天】在深度学习领域,模型的准确率和预测能力是衡量模型好坏的重要指标。然而,随着模型复杂度的增加,它们往往变得越来越难以理解,这限制了模型在某些关键领域的应用,例如医疗诊断、金融风险评估等。本文将探讨如何通过几种方法来增强深度学习模型的可解释性,同时保持或提高模型的泛化能力。
1400 2
|
关系型数据库 MySQL 数据安全/隐私保护
mysql8.0.26忘记密码后重置(centos8)
mysql8.0.26忘记密码后重置(centos8)
639 2
|
安全 jenkins 持续交付
Jenkins 忘记登录密码解决办法
Jenkins 忘记登录密码解决办法
599 2
|
4天前
|
云安全 监控 安全
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1123 6
|
11天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
723 42
|
15天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1166 41

热门文章

最新文章