Resumen del blog: Python | Sistema de reconocimiento facial — Índice del blog
Dirección de GitHub: Su-Reconocimiento facial
Nota: consulte antes de leer este blog
Instalación de herramientas, configuración del entorno: Python | Sistema de reconocimiento facial—Introducción
Diseño de interfaz de usuario: Python | Sistema de reconocimiento facial — Diseño de interfaz de usuario
Procesamiento de eventos de interfaz de usuario: Python | Sistema de reconocimiento facial: procesamiento de eventos de interfaz de usuario
Visualización de la pantalla de la cámara: Python | Sistema de reconocimiento facial - visualización de la pantalla de la cámara
1. Juicio
Primero juzgue si enciende la cámara y luego juzgue si self.isFineSegmentation_flag ha habilitado el desenfoque de fondo. Si no, llama al método fine_segmentation para desenfocar el fondo.
Parámetros de inicialización:
- Dirección de la cámara: self.cap = cv2.VideoCapture()
- Etiqueta de la cámara: self.source = CAPTURE_SOURCE
- Ancho del área de visualización de la cámara: self.WIN_WIDTH = 800
- La altura del área de visualización de la cámara: self.WIN_HEIGHT = 500
- Ya sea para habilitar el indicador de desenfoque de fondo: self.isFineSegmentation_flag = False
funciones relacionadas:
- Discriminador de desenfoque de fondo: fine_segmentation_judge()
- Muestra la imagen de la cámara: self.show_camera()
- Función principal de desenfoque de fondo: fine_segmentation()
import mediapipe as mp
# 主界面
class UserMainWindow(QMainWindow, UserMainUi):
def __init__(self, parent=None):
super(UserMainWindow, self).__init__(parent)
self.setupUi(self)
self.show_image = None
self.cap = cv2.VideoCapture() # 相机
self.source = CAPTURE_SOURCE # 相机标号
self.WIN_WIDTH = 800 # 相机展示画面宽度
self.WIN_HEIGHT = 500 # 相机展示画面高度
self.isFineSegmentation_flag = False # 是否打开背景模糊标志
... ...
# 背景模糊判别器
def fine_segmentation_judge(self):
if not self.cap.isOpened():
QMessageBox.information(self, "提示", self.tr("请先打开摄像头"))
else:
if not self.isFineSegmentation_flag:
self.isFineSegmentation_flag = True
self.fine_segmentation_button.setText("关闭背景模糊") # 开始时按钮设置文本
self.fine_segmentation() // 开始背景模糊
self.fine_segmentation_button.setText("背景模糊") # 结束时按钮设置文本
self.isFineSegmentation_flag = False
elif self.isFineSegmentation_flag:
self.isFineSegmentation_flag = False
self.fine_segmentation_button.setText("背景模糊")
self.show_camera() // 展示摄像机画面
2. Fondo borroso
import mediapipe as mp
... ...
# 背景模糊
def fine_segmentation(self):
mp_selfie_segmentation = mp.solutions.selfie_segmentation
BG_COLOR = (192, 192, 192)
with mp_selfie_segmentation.SelfieSegmentation(model_selection=1) as selfie_segmentation:
while self.cap.isOpened():
ret, frame = self.cap.read()
QApplication.processEvents()
# 将 BGR 图像转换为 RGB
in_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 若要提高性能,可以选择将图像标记为不可写以通过引用传递。
in_frame.flags.writeable = False
results = selfie_segmentation.process(in_frame)
in_frame.flags.writeable = True
in_frame = cv2.cvtColor(in_frame, cv2.COLOR_RGB2BGR)
# 在背景图像上绘制分割
condition = np.stack((results.segmentation_mask,) * 3, axis=-1) > 0.1
# 背景设置为高斯模糊
gauss_image = cv2.GaussianBlur(in_frame, (85, 85), 0)
if gauss_image is None:
gauss_image = np.zeros(in_frame.shape, dtype=np.uint8)
gauss_image[:] = BG_COLOR
out_frame = np.where(condition, in_frame, gauss_image)
show_video = cv2.cvtColor(cv2.resize(out_frame, (self.WIN_WIDTH, self.WIN_HEIGHT)), cv2.COLOR_BGR2RGB)
self.show_image = QImage(show_video.data, show_video.shape[1], show_video.shape[0],
QImage.Format_RGB888)
self.camera_label.setPixmap(QPixmap.fromImage(self.show_image))
Después de leer este blog puedes continuar leyendo:
Lógica del lado del cliente:
- Reconocimiento facial: Python | Sistema de reconocimiento facial: reconocimiento facial
- Detección de vida: Python | Sistema de reconocimiento facial - Detección de vida
- Detección de poses: Python | Sistema de reconocimiento facial - Detección de poses
- Comparación de rostros: Python | Sistema de reconocimiento facial - comparación de rostros
- Operaciones de usuario: Python | Sistema de reconocimiento facial—Operaciones de usuario
Lógica del lado del administrador:
- Operaciones del administrador: Python | Sistema de reconocimiento facial——Operaciones del administrador
Nota: El código anterior es solo de referencia. Para ejecutarlo, consulte el código fuente de GitHub: Su-Face-Recognition