fix: Windows start.bat 中文编码 + MediaPipe 兼容性修复
This commit is contained in:
+30
-16
@@ -42,6 +42,12 @@ class PersonManager:
|
||||
# 加载人员库
|
||||
self.persons = self._load_persons_db()
|
||||
|
||||
# 检测器状态
|
||||
self.face_detector = None
|
||||
self.mp_face_detection = None
|
||||
self.cv_face_detector = None
|
||||
self.has_mediapipe = HAS_MEDIAPIPE
|
||||
|
||||
# 初始化检测器
|
||||
self._init_detectors()
|
||||
|
||||
@@ -75,22 +81,30 @@ class PersonManager:
|
||||
def _init_detectors(self):
|
||||
"""初始化检测器"""
|
||||
# MediaPipe 人脸检测
|
||||
if HAS_MEDIAPIPE:
|
||||
self.mp_face_detection = mp.solutions.face_detection
|
||||
self.face_detector = self.mp_face_detection.FaceDetection(
|
||||
model_selection=0, # 0: 短距离,1: 远距离
|
||||
min_detection_confidence=0.5
|
||||
)
|
||||
print("[PersonManager] MediaPipe face detector initialized")
|
||||
else:
|
||||
# OpenCV DNN 人脸检测
|
||||
if self.has_mediapipe:
|
||||
try:
|
||||
model_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
|
||||
# 使用更安全的导入方式
|
||||
mp_face_detection = mp.solutions.face_detection
|
||||
self.face_detector = mp_face_detection.FaceDetection(
|
||||
model_selection=0, # 0: 短距离,1: 远距离
|
||||
min_detection_confidence=0.5
|
||||
)
|
||||
self.mp_face_detection = mp_face_detection
|
||||
print("[PersonManager] MediaPipe face detector initialized")
|
||||
except Exception as e:
|
||||
print(f"[PersonManager] MediaPipe init failed: {e}")
|
||||
self.face_detector = None
|
||||
self.has_mediapipe = False
|
||||
|
||||
# OpenCV 人脸检测(备用)
|
||||
try:
|
||||
model_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
|
||||
if Path(model_path).exists():
|
||||
self.cv_face_detector = cv2.CascadeClassifier(model_path)
|
||||
print("[PersonManager] OpenCV face detector initialized")
|
||||
except:
|
||||
self.cv_face_detector = None
|
||||
print("[PersonManager] No face detector available")
|
||||
print("[PersonManager] OpenCV face detector initialized (backup)")
|
||||
except Exception as e:
|
||||
self.cv_face_detector = None
|
||||
print(f"[PersonManager] OpenCV face detector init failed: {e}")
|
||||
|
||||
def detect_faces(self, image):
|
||||
"""检测人脸
|
||||
@@ -110,7 +124,7 @@ class PersonManager:
|
||||
faces = []
|
||||
|
||||
# MediaPipe 检测
|
||||
if HAS_MEDIAPIPE and hasattr(self, 'face_detector'):
|
||||
if self.has_mediapipe and self.face_detector is not None:
|
||||
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
|
||||
results = self.face_detector.process(rgb_image)
|
||||
|
||||
@@ -190,7 +204,7 @@ class PersonManager:
|
||||
pass
|
||||
|
||||
# 方法2:使用 MediaPipe 人脸关键点(推荐)
|
||||
if HAS_MEDIAPIPE:
|
||||
if self.has_mediapipe:
|
||||
try:
|
||||
mp_face_mesh = mp.solutions.face_mesh
|
||||
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=True, max_num_faces=1)
|
||||
|
||||
Reference in New Issue
Block a user