日日行,不怕千万里;常常做,不怕千万事|

__username

园龄:2年4个月粉丝:12关注:2

📂python
🔖Linux
2023-11-12 13:31阅读: 233评论: 0推荐: 0

人脸识别facenet-pytorch/Yolov5

facenet-pytorch篇

import cv2
from PIL import Image
import os
from facenet_pytorch import MTCNN
from torchvision.transforms import ToPILImage
folder_path = r'E:\Code\Python\QQh5\sourceLib'
output_folder = r'testPersonFace'
# 如果输出文件夹不存在,则创建
os.makedirs(output_folder, exist_ok=True)
# 加载MTCNN模型用于人脸检测
mtcnn = MTCNN(keep_all=True)
# 转换Tensor到PIL Image
to_pil = ToPILImage()
# 人脸文件集合
persons_name = []
# 遍历文件夹中的图像
for file in os.listdir(folder_path):
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
img_path = os.path.join(folder_path, file)
# 打开图像
img_obj = Image.open(img_path)
# 使用MTCNN检测人脸
boxes, _ = mtcnn.detect(img_obj)
# 检查是否检测到人脸
if boxes is not None:
persons_name.append(img_path)
print(f'{img_path} 人脸√')
# # 保存带有检测到人脸的图像(选择第一个人脸)
# img_with_faces = mtcnn(img_obj)[0]
#
# # 转换为PIL Image对象
# img_with_faces_pil = to_pil(img_with_faces)
#
# # 保存图像
# img_with_faces_pil.save(os.path.join(output_folder, f'output_{file}'))
else:
print(f'{img_path} 人脸×')

yolov5 篇

YOLO地址:https://github.com/ultralytics/yolov5/blob/master/README.zh-CN.md

import torch
import cv2
from PIL import Image
import os
pt_path = r'E:\Code\Python\YoLov5\yolov5\yolov5s.pt'
# 模型
model = torch.hub.load(r"E:\Code\Python\QQh5\yolov5", 'custom', path=pt_path,
source='local') # 或 yolov5n - yolov5x6, custom
# 图像
# img_path = r"E:\Code\Python\QQh5\sourceLib\test1.jpg" # 或文件、路径、PIL、OpenCV、numpy、列表
folder_path = r'E:\Code\Python\QQh5\sourceLib'
# 使用列表推导式获取文件夹中的所有图片路径
image_paths = [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]
# 打印所有图片路径
for img_path in image_paths:
# print(img_path)
img_obj = Image.open(img_path)
# 推理
results = model(img_obj)
# 检查图像中是否存在人物
for item in results.xyxy[0]:
# 类别 0 对应 COCO 数据集中的人物类别,根据你的数据集可能需要调整这个
if int(item[5]) == 0:
# 检测到人物,保存图像
print(f'{img_path} 人脸√')
im = results.crop(save=False)[0]['im']
a = cv2.imencode(".jpg", im)
success, enc_img = cv2.imencode(".jpg", im)
img_data = enc_img.tobytes()
# 从原始路径获取文件名
img_filename = img_path.split("\\")[-1]
with open(f'testPersonFace/output_{img_filename}', 'wb') as f:
f.write(img_data)
# print(img_data)
# # 显示图像
# cv2.imshow('win', im)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
else:
print(f'{img_path} 人脸×')
posted @   __username  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起