import os.path import cv2 from insightface.app import FaceAnalysis import shutil # 准备好模型 def prepare_model(): # 默认的模型目录是否存在 directory = 'C:/Users/Administrator/.insightface/models/buffalo_l' if not os.path.exists(directory): # 不存在就创建 os.makedirs(directory) # 模型文件是不是存在 files = ['1k3d68.onnx', '2d106det.onnx', 'det_10g.onnx', 'genderage.onnx', 'w600k_r50.onnx'] # 云存储的前缀 prefix = r'https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/insightface/' # windows版本的wget # https://eternallybored.org/misc/wget/ source_file = './Tools/wget.exe' target_file = "c:/Windows/System32/wget.exe" if not os.path.exists(target_file): if os.path.exists(source_file): shutil.copy(source_file, target_file) elif os.path.exists('.' + source_file): shutil.copy('.' + source_file, target_file) # 下载缺失的模型文件 for file in files: if not os.path.exists(directory + '/' + file): os.system('wget ' + prefix + file + ' -P ' + directory) # 获取图片中人脸有哪些,返回人脸个数 # ctx_id: 如果有多块GPU,那么ctx_id=0表示使用第一块显卡,如果是负数则是使用CPU执行预测 # det_size: 检测模型图片大小 # det_thresh = 0.50 配置的是人脸检测的阈值 def get_faces_count(v_image_path, v_ctx_id=0, v_det_thresh=0.5, v_det_size=(640, 640)): try: app.prepare(ctx_id=v_ctx_id, det_thresh=v_det_thresh, det_size=v_det_size) img = cv2.imread(v_image_path) # 检测图片中人脸的个数 v_faces = app.get(img) return len(v_faces) except Exception as err: print(err) return 0 if __name__ == '__main__': # 准备好模型 prepare_model() # 声明 FaceAnalysis app = FaceAnalysis(allowed_modules=['detection'], providers=['CUDAExecutionProvider', 'CPUExecutionProvider'], download=False) # 0 image_path = r'C:\Users\Administrator\Desktop\Upload\Cat.png' # 1 # image_path = r'C:\Users\Administrator\Desktop\Upload\d825cc1e-6518-afd5-1b02-ed88a7a72806.jpg' # 2 # image_path=r'C:\Users\Administrator\Desktop\Upload\ff781209-7368-bb99-4b0c-02c1406519d5.jpg' # 获取人脸个数信息 face_count = get_faces_count(v_image_path=image_path) print(face_count)