项目实训(五)--- 对上传图片进行人脸判断

该博客介绍了如何使用Python的OpenCV库进行人脸检测。通过加载预训练的级联分类器,对用户上传的图片进行判断,确保是人脸照片。如果检测到人脸,将进行后续处理,否则提示用户重新上传。测试结果显示,系统能够准确识别完整的人脸并拒绝不完整的人脸图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC

这部分是与前端同学商量,需要对用户上传的人脸图片进行一个预先判断,即判断用户上传的是否是人脸照片,如果不是则让用户重新上传,如果是人脸照片,则进行后续的算法操作。

这部分代码是使用python的opencv进行实现的,因为我们的后端是使用java语言编写的,因此这部分代码要在java中进行一个调用。我们先来看这部分python代码对于功能的实现。

目录

一.代码实现

 二.测试效果


一.代码实现

首先引入需要的库:

# 人脸检测
import cv2
import imageio
import numpy as np

opencv人脸识别分类器:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

上传人脸照片后端这里有一个逻辑判断就是先来检测一下上传的照片是否是人脸,以及人脸是否符合规范,例如五官都存在,如果不满足,则让客户端重传,满足的话才执行下面的算法。

人脸检测代码

这部分代码我使用的是Opencv中的一个级联分类器对人脸照片识别。

CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。

 

 

Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形像素和 减去 白色矩形像素和来表示这个模版的特征值。

例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。这样就可以进行区分人脸。

读入图片

def readImg(path):
 img = cv2.imread(path)
 if img is None:
  tmp = imageio.mimread(path)
  if tmp is not None:
   tmp = np.array(tmp)
   img = tmp[0][:, :, :3]
 return img

进行判断:

img=readImg(path)

face = face_cascade.detectMultiScale(img,1.1,4)

if face != () :

 for (x, y, w, h) in face:
   cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

 cv2.imwrite("%s_face_detected.jpg"%(path), img)

 print('成功检测到人脸!')

else:

 print('未检测到人脸!')

这部分的代码结构如下:

 二.测试效果

输入图片:

图片人脸不全,若用户输入类似图片,则直接拒绝,重新上传。

结果:

输入图片:

结果:

成功检测到人脸,保存框选出来的图片到当前目录。

 

(本次记录的图片均来自网络,侵删)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值