fix: Windows start.bat 中文编码 + MediaPipe 兼容性修复
This commit is contained in:
@@ -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
|
|
||||||
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 人脸检测
|
|
||||||
try:
|
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)
|
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)
|
||||||
|
|||||||
16
start.bat
16
start.bat
@@ -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
|
||||||
Reference in New Issue
Block a user