# -*- coding: UTF-8 -*-
import cv2 as cv
import os
import numpy as np
import re
from face_alignment import warpAffineImg, warpAffilneByAngle
from matplotlib import pyplot as plt
import dlib
from fileConfig import *
# 输入文件夹,输出里面处理好的图片(所有图片都在一个文件中,图片名为唯一标识)
def pick_withoutDir(fileName, targetName, *suffix):
# 文件名存在
if os.path.exists(fileName):
images = os.listdir(fileName) # 读取一级目录
for image in images: # 遍历二级目录
# 文件名为所需要的后缀名
if endwith(image, suffix):
print(fileName + os.sep + image)
# 进行图片预处理
img, flag = pretreat_img_internet(fileName + os.sep + image)
if flag == 1: # 人脸识别处理成功
# 提取文件的唯一标识
p = r"\d+"
pattern = re.compile(p)
result = re.search(pattern, image)[0]
# 创建目录
if not os.path.exists(targetName + os.sep + result):
os.makedirs(targetName + os.sep + result)
count = len(os.listdir(targetName + os.sep + result))
# 保存图片
cv.imwrite(targetName + os.sep + result + os.sep + str(count) + '.jpg', img)
print(targetName + os.sep + result + os.sep + str(count) + '.jpg', ' successful') # 打印成功信息
else:
print(fileName + os.sep + image, ' fail') # 打印失败信息
else:
print('connot find the path')
# 读取多个文件夹的图片(文件夹名为唯一标识)
def pick_dir(fileName, targetName, *suffix):
# 判断文件存在
if os.path.exists(fileName):
f = os.listdir(fileName)
# 遍历所有的文件夹
for name in f:
images = os.listdir(fileName + os.sep + name)
count = 0
# 遍历文件夹内的所有文件
for image in images:
if endwith(image, suffix):
img, ret = pretreat_img_internet(fileName + os.sep + name + os.sep + image)
if ret == 1:
# 创建targetName/image_face/图片名称的路径
if (not os.path.exists(targetName + os.sep + "image_face" + os.sep + name)):
os.makedirs(targetName + os.sep + "image_face" + os.sep + name)
# 存储图片
cv.imwrite(
targetName + os.sep + "image_face" + os.sep + name + os.sep + str(count) + '.jpg', img)
print(targetName + os.sep + "image_face" + os.sep + name + os.sep + str(count) + '.jpg',
' successful')
count += 1
else:
print(targetName + os.sep + "image_face" + os.sep + name, ' fail')
# 找不到输入的路径
else:
print("cannot find the path")
# 读取单个文件夹内的图片(文件夹名为唯一标识)
def pick_single(fileName, targetName, *suffix):
# 判断文件存在
if os.path.exists(fileName):
images = os.listdir(fileName) # 读取目录
count = 0
for image in images:
# 后缀名判断
if endwith(image, suffix):
img = pretreat_img(fileName + os.sep + image)
# 创建目录
if (not os.path.exists(targetName + os.sep + "image_face" + os.sep + os.path.basename(fileName))):
os.makedirs(targetName + os.sep + "image_face" + os.sep + os.path.basename(fileName))
# 保存图片
cv.imwrite(targetName + os.sep + "image_face" + os.sep + os.path.basename(fileName) + os.sep + str(
count) + '.jpg', img)
print(targetName + os.sep + "image_face" + os.sep + os.path.basename(fileName) + os.sep + str(
count) + '.jpg', ' successfule')
count += 1
else:
print("cannot find the path")
#读取带有中文路径的图片,进行预处理
def pretreat_img_chinese(fileName):
# 后缀名判断
if endwith(fileName, '.jpg', ',JPG', '.PNG', '.png'):
# 对路径包含中文字符的文件进行读取
img = cv.imdecode(np.fromfile(fileName, dtype=np.uint8), -1)
if img is None: # 图片为空
return 0, 0
else: # 图片不为空,进行预处理
# 图片文件过大,计算机内存不足,滤过过大文件
if img.shape[0] < 1500 and img.shape[1] < 1500:
img, flag = getFaceImage(img) # 人脸识别
if flag == 1:
img = warpAffineImg(img) # 人脸对齐
return img, flag # 成功获取目标图片
# 未能识别人脸
else:
return img, 0
# 文件名非指定图片格式
else:
return 0, 0
#从网络读取图片,进行预处理
def pretreat_img_internet(fileName):
# 后缀名判断
if endwith(fileName, '.jpg', ',JPG', '.PNG', '.png'):
# 从网络路径读取图片文件
cap = cv.VideoCapture(fileName)
ret, img = cap.read()
if img is None: # 图片为空
return 0, 0
else: # 图片不为空,进行预处理
# 图片文件过大,计算机内存不足,滤过过大文件
if img.shape[0] < 1500 and img.shape[1] < 1500:
img, flag = getFaceImage(img) # 人脸识别
if flag == 1:
img = warpAffineImg(img) # 人脸对齐
return img, flag # 成功获取目标图片
# 未能识别人脸
else:
return img, 0
# 文件名非指定图片格式
else:
return 0, 0
# 输入文件名,输出处理好的列表形式img
def pretreat_img(fileName):
if endwith(fileName, '.jpg', ',JPG', '.PNG', '.png'):
img = cv.imread(fileName)
if img is None: # 图片为空
return 0, 0
else: # 图片不为空,进行预处理
# 图片文件过大,计算机内存不足,滤过过大文件
if img.shape[0] < 1500 and img.shape[1] < 1500:
img, flag = getFaceImage(img) # 人脸识别
if flag == 1:
img = warpAffineImg(img) # 人脸对齐
return img, flag # 成功获取目标图片
# 未能识别人脸
else:
return img, 0
# 文件名非指定图片格式
else:
return 0, 0
#使用多个模型进行人脸识别
def getFaceImageMerge(img):
img_result, ret = getFaceImageDlib(img)
#Dlib读取失败, 进行别的模型识别
if ret == 0:
#进行opencv识别
img_result, ret = getFaceImageOpencv(img)
return img_result, ret
#cnn识别成功
else:
return img_result, ret
#进行人脸识别,无法识别时,进行旋转处理,识别侧倒的人脸
def getFaceImage(img):
img_result, ret = getFaceImageMerge(img)
# 识别失败,进行旋转处理
if ret == 0:
img_trans = warpAffilneByAngle(img, 90)
img_result, ret = getFaceImageMerge(img_trans)
if ret == 0:
# 识别失败,进行相反角度的旋转处理
img_trans = warpAffilneByAngle(img, -90)
img_result, ret = getFaceImageMerge(img_trans)
# 旋转无法识别人脸,采用cnn进行人脸识别
if ret == 0:
img_result = getF
没有合适的资源?快使用搜索试试~ 我知道了~
pytorch实现人脸识别包括人脸检测(opencv、dlib、CNN三种方法融合)人脸对齐和vgg-face人脸特征提取
共6个文件
py:6个
4星 · 超过85%的资源 需积分: 49 447 下载量 185 浏览量
2018-04-02
17:26:32
上传
评论 42
收藏 9KB ZIP 举报
温馨提示
博客地址:https://blog.csdn.net/wen_fei/article/details/80261047 人脸识别源代码,包括使用opencv、dlib和cnn实现的人脸检测、opencv实现的人脸对齐以及vgg-face的人脸特征提取等,最后余弦函数计算相似度,并提供flask部署代码,可以放在服务器上远程调用
资源推荐
资源详情
资源评论
收起资源包目录
code.zip (6个子文件)
code
face_recognition.py 9KB
face_alignment.py 2KB
socketHost.py 651B
fileConfig.py 2KB
face_Host.py 2KB
face_pretreate.py 12KB
共 6 条
- 1
资源评论
- 呆萌宝儿姐2024-03-07#标题与内容不符
- 轻尘一笑2018-12-26能提供下fileConfig.py中使用到的文件吗?
- IT_King12018-07-06代码写得很好
腾云丶
- 粉丝: 124
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功