from tensorflow.keras.layers import Conv2D, Input, MaxPool2D, Flatten, Dense, Permute
from tensorflow.keras.layers import PReLU
from tensorflow.keras.models import Model
import numpy as np
import cv2
# -----------------------------#
# 计算原始输入图像
# 每一次缩放的比例
# -----------------------------#
def calculateScales(img):
copy_img = img.copy()
pr_scale = 1.0
# 获取原始图像宽高
h, w, _ = copy_img.shape
# 计算调整后的图像宽高
if min(w, h) > 500:
pr_scale = 500.0 / min(h, w)
w = int(w * pr_scale)
h = int(h * pr_scale)
elif max(w, h) < 500:
pr_scale = 500.0 / max(h, w)
w = int(w * pr_scale)
h = int(h * pr_scale)
scales = []
factor = 0.709
factor_count = 0
minl = min(h, w)
# 计算缩放比例
while minl >= 12:
scales.append(pr_scale * pow(factor, factor_count))
minl *= factor
factor_count += 1
return scales
# -------------------------------------#
# 对pnet处理后的结果进行处理
# -------------------------------------#
def detect_face_12net(cls_prob, roi, out_side, scale, width, height, threshold):
cls_prob = np.swapaxes(cls_prob, 0, 1) # 获取预测人脸置信度得分
roi = np.swapaxes(roi, 0, 2)
stride = 0
# stride略等于2
if out_side != 1:
stride = float(2 * out_side - 1) / (out_side - 1)
# 获取置信度得分大于阈值的人脸框位置
(x, y) = np.where(cls_prob >= threshold)
boundingbox = np.array([x, y]).T
# 找到对应原图的位置
bb1 = np.fix((stride * (boundingbox) + 0) * scale)
bb2 = np.fix((stride * (boundingbox) + 11) * scale)
boundingbox = np.concatenate((bb1, bb2), axis=1)
# 获取人脸框位置调整量
dx1 = roi[0][x, y]
dx2 = roi[1][x, y]
dx3 = roi[2][x, y]
dx4 = roi[3][x, y]
# 将置信度得分和人脸框位置调整量转成ndarray
score = np.array([cls_prob[x, y]]).T
offset = np.array([dx1, dx2, dx3, dx4]).T
# 获取人脸框在原始图像中位置
boundingbox = boundingbox + offset * 12.0 * scale
rectangles = np.concatenate((boundingbox, score), axis=1)
# 转化成正方形
rectangles = rect2square(rectangles)
pick = []
# 遍历人脸框,防止人脸框越界
for i in range(len(rectangles)):
x1 = int(max(0, rectangles[i][0]))
y1 = int(max(0, rectangles[i][1]))
x2 = int(min(width, rectangles[i][2]))
y2 = int(min(height, rectangles[i][3]))
sc = rectangles[i][4]
if x2 > x1 and y2 > y1:
pick.append([x1, y1, x2, y2, sc])
# 对人脸框做非极大值抑制处理
return NMS(pick, 0.3)
# -----------------------------#
# 将长方形调整为正方形
# -----------------------------#
def rect2square(rectangles):
# 计算人脸框宽和高
# print(rectangles.shape)
w = rectangles[:, 2] - rectangles[:, 0]
h = rectangles[:, 3] - rectangles[:, 1]
# 计算宽高中的最大值
l = np.maximum(w, h).T
# 调整人脸框为正方形
rectangles[:, 0] = rectangles[:, 0] + w * 0.5 - l * 0.5
rectangles[:, 1] = rectangles[:, 1] + h * 0.5 - l * 0.5
rectangles[:, 2:4] = rectangles[:, 0:2] + np.repeat([l], 2, axis=0).T
return rectangles
# -------------------------------------#
# 非极大抑制
# -------------------------------------#
def NMS(rectangles, threshold):
# 如果无框则返回
if len(rectangles) == 0:
return rectangles
# 将人脸框转ndarray
boxes = np.array(rectangles)
# 获取人脸框坐标
x1 = boxes[:, 0]
y1 = boxes[:, 1]
x2 = boxes[:, 2]
y2 = boxes[:, 3]
# 获取人脸框置信度
s = boxes[:, 4]
# 计算人脸框面积
area = np.multiply(x2 - x1 + 1, y2 - y1 + 1)
# 对人脸框置信度得分排序
I = np.array(s.argsort())
pick = []
while len(I) > 0:
# 计算置信度得分最高的人脸框x1坐标与其他框的x1坐标最大值
xx1 = np.maximum(x1[I[-1]], x1[I[0:-1]])
# 计算置信度得分最高的人脸框y1坐标与其他框的y1坐标最大值
yy1 = np.maximum(y1[I[-1]], y1[I[0:-1]])
# 计算置信度得分最高的人脸框x2坐标与其他框的x2坐标最小值
xx2 = np.minimum(x2[I[-1]], x2[I[0:-1]])
# 计算置信度得分最高的人脸框y2坐标与其他框的y2坐标最小值
yy2 = np.minimum(y2[I[-1]], y2[I[0:-1]])
# 计算重合区域宽高
w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
# 计算重合区域面积
inter = w * h
# 计算交并比IOU
o = inter / (area[I[-1]] + area[I[0:-1]] - inter)
pick.append(I[-1])
I = I[np.where(o <= threshold)[0]]
result_rectangle = boxes[pick].tolist()
return result_rectangle
# -------------------------------------#
# 对pnet处理后的结果进行处理
# -------------------------------------#
def filter_face_24net(cls_prob, roi, rectangles, width, height, threshold):
prob = cls_prob[:, 1] # 获取预测人脸置信度得分
pick = np.where(prob >= threshold) # 获取置信度得分大于阈值的索引
# 人脸框转ndarray
rectangles = np.array(rectangles)
# 获取置信度大于阈值的人脸框
x1 = rectangles[pick, 0]
y1 = rectangles[pick, 1]
x2 = rectangles[pick, 2]
y2 = rectangles[pick, 3]
# 获取置信度得分大于阈值的置信度得分
sc = np.array([prob[pick]]).T
# 获取人脸框偏移量
dx1 = roi[pick, 0]
dx2 = roi[pick, 1]
dx3 = roi[pick, 2]
dx4 = roi[pick, 3]
# 计算人脸框宽高
w = x2 - x1
h = y2 - y1
# 计算人脸框在原图上的位置
x1 = np.array([(x1 + dx1 * w)[0]]).T
y1 = np.array([(y1 + dx2 * h)[0]]).T
x2 = np.array([(x2 + dx3 * w)[0]]).T
y2 = np.array([(y2 + dx4 * h)[0]]).T
rectangles = np.concatenate((x1, y1, x2, y2, sc), axis=1)
# 人脸框转成正方形
rectangles = rect2square(rectangles)
pick = []
# 遍历人脸框,防止人脸框越界
for i in range(len(rectangles)):
x1 = int(max(0, rectangles[i][0]))
y1 = int(max(0, rectangles[i][1]))
x2 = int(min(width, rectangles[i][2]))
y2 = int(min(height, rectangles[i][3]))
sc = rectangles[i][4]
if x2 > x1 and y2 > y1:
pick.append([x1, y1, x2, y2, sc])
# 对人脸框做非极大值抑制处理
return NMS(pick, 0.3)
# -------------------------------------#
# 对onet处理后的结果进行处理
# -------------------------------------#
def filter_face_48net(cls_prob, roi, pts, rectangles, width, height, threshold):
prob = cls_prob[:, 1] # 获取预测人脸置信度得分
pick = np.where(prob >= threshold) # 获取置信度得分大于阈值的索引
rectangles = np.array(rectangles) # 人脸框转ndarray
# 获取置信度大于阈值的人脸框
x1 = rectangles[pick, 0]
y1 = rectangles[pick, 1]
x2 = rectangles[pick, 2]
y2 = rectangles[pick, 3]
# 获取置信度得分大于阈值的置信度得分
sc = np.array([prob[pick]]).T
# 获取人脸框偏移量
dx1 = roi[pick, 0]
dx2 = roi[pick, 1]
dx3 = roi[pick, 2]
dx4 = roi[pick, 3]
# 计算人脸框宽高
w = x2 - x1
h = y2 - y1
# 计算人脸关键点在原图中的位置
pts0 = np.array([(w * pts[pick, 0] + x1)[0]]).T
pts1 = np.array([(h * pts[pick, 5] + y1)[0]]).T
pts2 = np.array([(w * pts[pick, 1] + x1)[0]]).T
pts3 = np.array([(h * pts[pick, 6] + y1)[0]]).T
pts4 = np.array([(w * pts[pick, 2] + x1)[0]]).T
pt
没有合适的资源?快使用搜索试试~ 我知道了~
基于FaceNet和MTCNN可在win10上可视化界面的人脸识别3.1版app
共1177个文件
jpg:1150个
py:9个
pyc:6个
2 下载量 195 浏览量
2023-07-12
12:19:10
上传
评论
收藏 604.94MB ZIP 举报
温馨提示
软件容错性比3.0更好。软件用到了pyqt5,tensorflow,opencv-python,pandas和numpy,使用之前要安装好这些python相应的库。人脸特征提取模型是基于LWF数据集使用FaceNet构造的模型,判定测试图像是否包含人脸是使用MTCNN算法生成的模型
资源推荐
资源详情
资源评论
收起资源包目录
基于FaceNet和MTCNN可在win10上可视化界面的人脸识别3.1版app (1177个子文件)
.gitignore 50B
model.01-0.2455.h5 626.88MB
onet.h5 1.53MB
rnet.h5 428KB
pnet.h5 56KB
FaceRecognize3.iml 291B
Liutongmin.jpg 5.77MB
1688913637604.jpg 5.77MB
1688973386811.jpg 3.88MB
Tyler_Hamilton_0001.jpg 23KB
Yasser_Arafat_0005.jpg 23KB
Vecdi_Gonul_0001.jpg 22KB
Whoopi_Goldberg_0001.jpg 22KB
Tomoko_Hagiwara_0002.jpg 21KB
Wu_Yi_0002.jpg 21KB
Yekaterina_Guseva_0001.jpg 21KB
Yasser_Arafat_0008.jpg 21KB
Yoko_Ono_0004.jpg 21KB
Wu_Yi_0001.jpg 21KB
Yasser_Arafat_0003.jpg 21KB
Tony_Blair_0083.jpg 21KB
Vladimir_Putin_0035.jpg 20KB
Vincent_Gallo_0002.jpg 20KB
Yasser_Arafat_0007.jpg 20KB
Yasser_Arafat_0001.jpg 20KB
Woody_Allen_0001.jpg 20KB
Tim_Howard_0001.jpg 19KB
Yasser_Arafat_0002.jpg 19KB
Tom_Cruise_0007.jpg 19KB
Tony_Blair_0034.jpg 19KB
Yoriko_Kawaguchi_0014.jpg 19KB
Tony_Blair_0075.jpg 19KB
Tono_Suratman_0001.jpg 19KB
Tomas_Enge_0001.jpg 19KB
Vanessa_Incontrada_0001.jpg 19KB
William_Donaldson_0002.jpg 19KB
Win_Aung_0002.jpg 19KB
Tora_Takagi_0001.jpg 18KB
Zalmay_Khalilzad_0001.jpg 18KB
Thomas_Rupprath_0002.jpg 18KB
Todd_MacCulloch_0001.jpg 18KB
Vicente_Fox_0017.jpg 18KB
Veronica_Lake_0001.jpg 18KB
Zico_0003.jpg 18KB
Vicente_Fox_0016.jpg 18KB
Tony_Elias_0001.jpg 18KB
Tony_Blair_0127.jpg 18KB
Viola_Davis_0001.jpg 18KB
Wilton_Gregory_0001.jpg 18KB
Wang_Nan_0001.jpg 18KB
Tony_Blair_0044.jpg 18KB
Vinnie_Jones_0001.jpg 18KB
Tom_Brady_0001.jpg 18KB
Zafarullah_Khan_Jamali_0001.jpg 18KB
Tyler_Hamilton_0002.jpg 18KB
Wilma_McNabb_0001.jpg 18KB
Vicente_Fernandez_0003.jpg 18KB
Yoriko_Kawaguchi_0006.jpg 18KB
Tim_Henman_0003.jpg 18KB
Vanessa_Williams_0003.jpg 18KB
Vladimir_Putin_0027.jpg 18KB
Wang_Yi_0001.jpg 18KB
Tommy_Franks_0008.jpg 18KB
Tony_Blair_0111.jpg 18KB
Tony_Blair_0018.jpg 18KB
Woody_Allen_0004.jpg 18KB
Tim_Henman_0010.jpg 18KB
Tommy_Franks_0007.jpg 17KB
Tom_Foy_0001.jpg 17KB
Tony_Blair_0084.jpg 17KB
Zhang_Ziyi_0001.jpg 17KB
Valery_Giscard_dEstaing_0004.jpg 17KB
Vincent_Spadea_0001.jpg 17KB
Troy_Hudson_0001.jpg 17KB
Timothy_Goebel_0001.jpg 17KB
Winona_Ryder_0019.jpg 17KB
Victoria_Clarke_0003.jpg 17KB
William_Delahunt_0001.jpg 17KB
Tippi_Hedren_0002.jpg 17KB
Vladimir_Spidla_0003.jpg 17KB
Tommy_Franks_0006.jpg 17KB
Tom_Ridge_0022.jpg 17KB
Vicente_Fox_0005.jpg 17KB
Yasser_Arafat_0004.jpg 17KB
Valerie_Thwaites_0001.jpg 17KB
Tomoko_Hagiwara_0001.jpg 17KB
Tom_Cruise_0008.jpg 17KB
Vincent_Gallo_0003.jpg 17KB
Wolfgang_Schneiderhan_0001.jpg 17KB
Tony_Blair_0144.jpg 17KB
Xanana_Gusmao_0004.jpg 17KB
Tony_Blair_0137.jpg 17KB
Vanessa_Redgrave_0003.jpg 17KB
Tony_Stewart_0005.jpg 17KB
Walter_Annenberg_0001.jpg 17KB
Tina_Brown_0001.jpg 17KB
William_Hochul_0002.jpg 17KB
Vin_Diesel_0001.jpg 17KB
Valentina_Tereshkova_0001.jpg 17KB
Yusuf_Misbac_0001.jpg 17KB
共 1177 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
刘同敏
- 粉丝: 11
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功