平均特征值计算
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
	 ZZX9599
					ZZX9599