| | |
| | | import numpy |
| | | from insightface.app import FaceAnalysis |
| | | from insightface.app.common import Face |
| | | |
| | | from gfpgan.utils import GFPGANer |
| | | from .typing import Frame # 你已有定义 |
| | | import numpy as np |
| | | |
| | | SIMILAR_FACE_DISTANCE: float = 0.45 # < 0.4 同一人 0.4 -0.6 大概是同一人 >0.6 不是同一个 |
| | | |
| | |
| | | else: |
| | | return 'cpu' |
| | | |
| | | def get_many_faces(self,frame: Frame) -> Optional[List[Face]]: |
| | | def get_many_faces(self,frame: np.ndarray) -> Optional[List[Face]]: |
| | | try: |
| | | return self._analyser.get(frame) |
| | | except Exception as e: |
| | | print(f"{e}") |
| | | return None |
| | | |
| | | def get_one_face(self,frame: Frame, position: int = 0) -> Optional[Face]: |
| | | def get_one_face(self,frame: np.ndarray, position: int = 0) -> Optional[Face]: |
| | | many_faces = self.get_many_faces(frame) |
| | | if many_faces: |
| | | try: |
| | |
| | | return None |
| | | |
| | | |
| | | def find_similar_face(self,frame: Frame, reference_face: Face) -> Optional[Face]: |
| | | def find_similar_face(self,frame: np.ndarray, reference_face: Face) -> Optional[Face]: |
| | | many_faces = self.get_many_faces(frame) |
| | | if many_faces: |
| | | for face in many_faces: |