修改路径,从src放到根目录
This commit is contained in:
0
algorithm/__init__.py
Normal file
0
algorithm/__init__.py
Normal file
75
algorithm/face_recognition_algorithm.py
Normal file
75
algorithm/face_recognition_algorithm.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# face_recognition_algorithm.py
|
||||
from insightface.app import FaceAnalysis
|
||||
|
||||
|
||||
class FaceRecognitionAlgorithm:
|
||||
"""
|
||||
人脸识别核心算法类
|
||||
负责模型加载和设备配置,与业务逻辑分离
|
||||
"""
|
||||
|
||||
def __init__(self, model_name: str = 'buffalo_l', use_gpu: bool = True, use_npu: bool = False,
|
||||
npu_device_id: int = 0):
|
||||
# 设备配置映射(NPU采用华为指定的完整参数)
|
||||
self.DEVICE_CONFIG = {
|
||||
"cpu": (['CPUExecutionProvider'], -1),
|
||||
"gpu": (['CUDAExecutionProvider'], 0),
|
||||
"npu": (
|
||||
[
|
||||
(
|
||||
"CANNExecutionProvider",
|
||||
{
|
||||
"device_id": npu_device_id,
|
||||
"arena_extend_strategy": "kNextPowerOfTwo",
|
||||
"npu_mem_limit": 16 * 1024 * 1024 * 1024,
|
||||
"op_select_impl_mode": "high_precision",
|
||||
"precision_mode": "allow_fp32_to_fp16",
|
||||
"enable_cann_graph": True,
|
||||
},
|
||||
),
|
||||
"CPUExecutionProvider"
|
||||
],
|
||||
npu_device_id
|
||||
)
|
||||
}
|
||||
|
||||
# 算法参数设置
|
||||
self.det_size = 640 # 320快速 640中等 1280慢
|
||||
self.det_threshold = 0.5 # 人脸置信度
|
||||
|
||||
# 根据设备类型选择配置
|
||||
if use_npu:
|
||||
device_type = "npu"
|
||||
print(f"✅ 使用NPU设备,设备ID: {npu_device_id}")
|
||||
elif use_gpu:
|
||||
device_type = "gpu"
|
||||
print("✅ 使用GPU设备")
|
||||
else:
|
||||
device_type = "cpu"
|
||||
print("✅ 使用CPU设备")
|
||||
|
||||
providers, ctx_id = self.DEVICE_CONFIG[device_type]
|
||||
|
||||
# 初始化人脸识别模型
|
||||
self.app = FaceAnalysis(name=model_name, providers=providers)
|
||||
self.app.prepare(
|
||||
ctx_id=ctx_id,
|
||||
det_thresh=self.det_threshold,
|
||||
det_size=(self.det_size, self.det_size)
|
||||
)
|
||||
|
||||
print(f"✅ 人脸识别算法初始化完成 - 设备: {device_type.upper()}")
|
||||
|
||||
def set_det_threshold(self, threshold: float):
|
||||
"""设置检测阈值"""
|
||||
self.det_threshold = threshold
|
||||
print(f"✅ 检测阈值设置为: {threshold}")
|
||||
|
||||
def set_det_size(self, size: int):
|
||||
"""设置检测尺寸"""
|
||||
self.det_size = size
|
||||
print(f"✅ 检测尺寸设置为: {size}")
|
||||
|
||||
def get_app(self) -> FaceAnalysis:
|
||||
"""获取底层的FaceAnalysis实例"""
|
||||
return self.app
|
||||
Reference in New Issue
Block a user