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

目录
相关文章
爬取图片,以及对图片筛选,以及切换系统背景图片
爬取图片,以及对图片筛选,以及切换系统背景图片
|
6月前
|
人工智能 Serverless API
想要一个龙年头像,在线等挺急的
想要一个龙年头像,在线等挺急的
887 52
|
12月前
|
JavaScript UED
解决cropperjs文件重复上传同一张照片没反应问题
解决cropperjs文件重复上传同一张照片没反应问题
58 0
|
Android开发
图标提取,一键完成,再也不用截屏抠图了!
图标提取,一键完成,再也不用截屏抠图了!
|
移动开发 前端开发 JavaScript
网页长按保存及识别二维码
网页长按保存及识别二维码
297 0
网页长按保存及识别二维码
|
移动开发 JavaScript
h5 实现调用系统拍照或者选择照片并预览
调用手机相机拍照或者是调用手机相册选择照片,这个功能在 手机端页面 或者 webApp 应该是常用到的,就拿个人或会员资料录入那块来说就已经是经常会碰到的, 每当看到这块功能的时候,前端的小伙伴就得去找各种各样的插件。
2989 0
|
JavaScript API Windows
记录一次识别图片中二维码的过程
最近有接触到针对二维码进行识别的功能,然后对图片进行位置纠正、二维码扫描,并将数据进行整理。以下是通过nodejs做的,相对简单一些,没有太过严格,识别率也不是很高大约80%左右
记录一次识别图片中二维码的过程
|
安全 Java 数据安全/隐私保护
图片内容管家 (把文字隐藏到图片里)
最近学习 javafx 自己编写了一款软件 (网上虽然也有类似功能的软件,但是界面不够美观,功能比较单一,或者操作比较复杂)
170 0
图片内容管家 (把文字隐藏到图片里)
|
Web App开发 tengine 前端开发
今日头条上传图片时设置封面图报像素低的原因是什么
今日头条上传图片时设置封面图报像素低的原因是什么
281 0