人脸识别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} 人脸×')
本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/17827088.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律