fix: Windows start.bat 中文编码 + MediaPipe 兼容性修复

This commit is contained in:
2026-04-16 21:48:59 +08:00
parent b3d5c80abf
commit d6693f9fd0
2 changed files with 38 additions and 24 deletions

View File

@@ -42,6 +42,12 @@ class PersonManager:
# 加载人员库 # 加载人员库
self.persons = self._load_persons_db() 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() self._init_detectors()
@@ -75,22 +81,30 @@ class PersonManager:
def _init_detectors(self): def _init_detectors(self):
"""初始化检测器""" """初始化检测器"""
# MediaPipe 人脸检测 # MediaPipe 人脸检测
if HAS_MEDIAPIPE: if self.has_mediapipe:
self.mp_face_detection = mp.solutions.face_detection try:
self.face_detector = self.mp_face_detection.FaceDetection( # 使用更安全的导入方式
mp_face_detection = mp.solutions.face_detection
self.face_detector = mp_face_detection.FaceDetection(
model_selection=0, # 0: 短距离1: 远距离 model_selection=0, # 0: 短距离1: 远距离
min_detection_confidence=0.5 min_detection_confidence=0.5
) )
self.mp_face_detection = mp_face_detection
print("[PersonManager] MediaPipe face detector initialized") print("[PersonManager] MediaPipe face detector initialized")
else: except Exception as e:
# OpenCV DNN 人脸检测 print(f"[PersonManager] MediaPipe init failed: {e}")
self.face_detector = None
self.has_mediapipe = False
# OpenCV 人脸检测(备用)
try: try:
model_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml' model_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
if Path(model_path).exists():
self.cv_face_detector = cv2.CascadeClassifier(model_path) self.cv_face_detector = cv2.CascadeClassifier(model_path)
print("[PersonManager] OpenCV face detector initialized") print("[PersonManager] OpenCV face detector initialized (backup)")
except: except Exception as e:
self.cv_face_detector = None self.cv_face_detector = None
print("[PersonManager] No face detector available") print(f"[PersonManager] OpenCV face detector init failed: {e}")
def detect_faces(self, image): def detect_faces(self, image):
"""检测人脸 """检测人脸
@@ -110,7 +124,7 @@ class PersonManager:
faces = [] faces = []
# MediaPipe 检测 # 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) rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = self.face_detector.process(rgb_image) results = self.face_detector.process(rgb_image)
@@ -190,7 +204,7 @@ class PersonManager:
pass pass
# 方法2使用 MediaPipe 人脸关键点(推荐) # 方法2使用 MediaPipe 人脸关键点(推荐)
if HAS_MEDIAPIPE: if self.has_mediapipe:
try: try:
mp_face_mesh = mp.solutions.face_mesh mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=True, max_num_faces=1) face_mesh = mp_face_mesh.FaceMesh(static_image_mode=True, max_num_faces=1)

View File

@@ -2,29 +2,29 @@
chcp 65001 >nul chcp 65001 >nul
echo ================================ echo ================================
echo 视觉记录系统启动 (Windows) echo Vision Record System (Windows)
echo ================================ echo ================================
cd /d %~dp0 cd /d %~dp0
echo 检查 Python 环境... echo Checking Python...
python --version python --version
if errorlevel 1 ( if errorlevel 1 (
echo 错误: 未找到 Python请先安装 Python 3.10+ echo ERROR: Python not found
pause pause
exit /b 1 exit /b 1
) )
echo 检查依赖... echo Checking dependencies...
pip show opencv-python >nul 2>&1 pip show opencv-python >nul 2>&1
if errorlevel 1 ( if errorlevel 1 (
echo 安装依赖... echo Installing dependencies...
pip install -r requirements.txt pip install -r requirements.txt
) )
echo 启动服务... echo Starting service...
echo 注意:此窗口请勿点击或拖动,否则会暂停 echo WARNING: Do NOT click or drag this window
echo 如需交互请另开命令行窗口 echo Open another terminal if you need to interact
echo ================================ echo ================================
python main.py python main.py