平均特征值计算
This commit is contained in:
@ -6,12 +6,16 @@ from schema.face_schema import FaceCreateRequest, FaceUpdateRequest, FaceRespons
|
||||
from schema.response_schema import APIResponse
|
||||
from middle.auth_middleware import get_current_user
|
||||
from schema.user_schema import UserResponse
|
||||
from ocr.feature_extraction import BinaryFaceFeatureHandler
|
||||
|
||||
router = APIRouter(
|
||||
prefix="/faces",
|
||||
tags=["人脸管理"]
|
||||
)
|
||||
|
||||
# 创建 BinaryFaceFeatureHandler 的实例
|
||||
binary_face_feature_handler = BinaryFaceFeatureHandler()
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# 1. 创建人脸记录(核心修正:ID 数据库自增,前端无需传)
|
||||
@ -43,7 +47,6 @@ async def create_face(
|
||||
|
||||
# 调用人脸识别得到特征值
|
||||
|
||||
|
||||
# 2. 插入数据库:无需传 ID(自增),只传 name 和 eigenvalue(None)
|
||||
insert_query = """
|
||||
INSERT INTO face (name, eigenvalue)
|
||||
@ -240,7 +243,7 @@ def get_all_face_name_with_eigenvalue() -> dict:
|
||||
"""
|
||||
获取所有人脸的名称及其对应的特征值,组成字典返回
|
||||
key: 人脸名称(name)
|
||||
value: 人脸特征值(eigenvalue)
|
||||
value: 人脸特征值(eigenvalue),若名称重复则返回平均特征值
|
||||
注:过滤掉name为None的记录,避免字典key为None的情况
|
||||
"""
|
||||
conn = None
|
||||
@ -254,11 +257,25 @@ def get_all_face_name_with_eigenvalue() -> dict:
|
||||
cursor.execute(query)
|
||||
faces = cursor.fetchall()
|
||||
|
||||
# 构建name到eigenvalue的映射字典
|
||||
face_dict = {
|
||||
face["name"]: face["eigenvalue"]
|
||||
for face in faces
|
||||
}
|
||||
# 先收集所有名称对应的特征值列表(处理重复名称)
|
||||
name_to_eigenvalues = {}
|
||||
for face in faces:
|
||||
name = face["name"]
|
||||
eigenvalue = face["eigenvalue"]
|
||||
if name in name_to_eigenvalues:
|
||||
name_to_eigenvalues[name].append(eigenvalue)
|
||||
else:
|
||||
name_to_eigenvalues[name] = [eigenvalue]
|
||||
|
||||
# 构建最终字典:重复名称取平均特征值,唯一名称直接取特征值
|
||||
face_dict = {}
|
||||
for name, eigenvalues in name_to_eigenvalues.items():
|
||||
print("调用的特征值是:" + eigenvalues)
|
||||
if len(eigenvalues) > 1:
|
||||
# 调用平均特征值计算方法
|
||||
face_dict[name] = binary_face_feature_handler.get_average_feature(eigenvalues)
|
||||
else:
|
||||
face_dict[name] = eigenvalues[0]
|
||||
|
||||
return face_dict
|
||||
|
||||
@ -266,4 +283,4 @@ def get_all_face_name_with_eigenvalue() -> dict:
|
||||
raise Exception(f"获取人脸名称与特征值失败:{str(e)}") from e
|
||||
finally:
|
||||
# 确保资源释放
|
||||
db.close_connection(conn, cursor)
|
||||
db.close_connection(conn, cursor)
|
||||
|
Reference in New Issue
Block a user