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