当前位置:首页>python>使用Python、Keras、OpenCV和MobileNet实现人脸口罩检测:实时视频流中的口罩识别全流程

使用Python、Keras、OpenCV和MobileNet实现人脸口罩检测:实时视频流中的口罩识别全流程

  • 2026-06-29 13:48:01
使用Python、Keras、OpenCV和MobileNet实现人脸口罩检测:实时视频流中的口罩识别全流程

一、项目背景与意义

1.1 为什么需要口罩检测?

2020年以来,口罩佩戴检测成为了计算机视觉领域最受关注的应用场景之一。在公共场所(医院、商场、地铁站、机场等),自动检测人员是否佩戴口罩不仅能够提高防疫效率,还能减少人工检查的接触风险。

核心应用场景:

应用场景
具体描述
技术要求
公共交通入口
地铁站、公交站闸机自动检测
实时检测,低延迟
商场/写字楼
入口处自动识别未戴口罩人员
多人同时检测
医院防疫
候诊区口罩佩戴监控
高精度,减少误报
工厂车间
食品/医药车间合规检查
全天候稳定运行
学校门禁
师生入校口罩佩戴检查
低成本部署

1.2 技术挑战

口罩检测看似简单,但实际落地面临不少挑战:

  1. 光照变化
    :室内外光照差异大,逆光、暗光场景下检测困难
  2. 口罩多样性
    :不同颜色、材质、形状的口罩需要模型具备泛化能力
  3. 遮挡程度
    :口罩可能只遮住口鼻,也可能遮住大半张脸
  4. 多人场景
    :密集人群中需要同时检测多张人脸
  5. 实时性要求
    :视频流处理需要满足实时帧率(≥15 FPS)

1.3 本文目标

本文将基于 Python + Keras/TensorFlow + OpenCV + MobileNetV2 技术栈,从零构建一个完整的人脸口罩检测系统。你将学到:

  • 使用MobileNetV2进行迁移学习训练口罩分类器
  • 使用OpenCV的Caffe模型进行人脸检测
  • 将人脸检测与口罩分类组合成端到端流水线
  • 实时视频流处理与可视化

二、核心技术原理

2.1 系统架构

本项目采用两阶段流水线架构

视频帧输入 → SSD人脸检测 → 人脸ROI裁剪 → MobileNetV2口罩分类 → 结果标注输出

2.2 MobileNetV2 迁移学习

为什么选择MobileNetV2?

MobileNetV2是Google提出的轻量级卷积神经网络,专为移动端和嵌入式设备设计。相比VGG16、ResNet50等大模型,MobileNetV2在保持较高精度的同时,参数量大幅减少:

模型
参数量
Top-1准确率
推理速度(CPU)
VGG16
138M
71.3%
ResNet50
25.6M
74.9%
中等
MobileNetV2
3.5M
71.8%

迁移学习策略:

  1. 加载在ImageNet上预训练的MobileNetV2(不含顶层全连接层)
  2. 冻结基础网络的所有层(trainable = False
  3. 在基础网络之上添加自定义分类头: 
    • AveragePooling2D(7×7)
       → 降维
    • Flatten
       → 展平
    • Dense(128, relu)
       → 全连接层
    • Dropout(0.5)
       → 防止过拟合
    • Dense(2, softmax)
       → 二分类输出
# 加载预训练MobileNetV2(不含顶层)baseModel = MobileNetV2(weights="imagenet", include_top=False,    input_tensor=Input(shape=(2242243)))# 构建自定义分类头headModel = baseModel.outputheadModel = AveragePooling2D(pool_size=(77))(headModel)headModel = Flatten(name="flatten")(headModel)headModel = Dense(128, activation="relu")(headModel)headModel = Dropout(0.5)(headModel)headModel = Dense(2, activation="softmax")(headModel)# 组合完整模型model = Model(inputs=baseModel.input, outputs=headModel)# 冻结基础网络层for layer in baseModel.layers:    layer.trainable = False

2.3 SSD人脸检测器

人脸检测使用的是OpenCV自带的SSD (Single Shot MultiBox Detector) 模型,基于Caffe框架训练:

  • 模型文件
    res10_300x300_ssd_iter_140000.caffemodel
  • 配置文件
    deploy.prototxt
  • 输入尺寸
    :300×300(自动resize)
  • 置信度阈值
    :0.5(过滤低置信度检测结果)
# 加载SSD人脸检测器prototxtPath = "face_detector/deploy.prototxt"weightsPath = "face_detector/res10_300x300_ssd_iter_140000.caffemodel"faceNet = cv2.dnn.readNet(prototxtPath, weightsPath)# 检测人脸blob = cv2.dnn.blobFromImage(frame, 1.0, (300300), (104.0177.0123.0))faceNet.setInput(blob)detections = faceNet.forward()

三、环境搭建与数据准备

3.1 环境依赖

# requirements.txttensorflow>=1.15.2keras==2.3.1imutils==0.5.3numpy==1.18.2opencv-python==4.2.0.*matplotlib==3.2.1scipy==1.4.1

安装命令:

pip install -r requirements.txt

3.2 数据集结构

数据集包含两个类别,按目录组织:

dataset/├── with_mask/       # 戴口罩的人脸图片│   ├── 0_0_0 copy 10.jpg│   ├── 0_0_0 copy 11.jpg│   └── ...└── without_mask/    # 未戴口罩的人脸图片    ├── 0_0_caiguoqing_0130.jpg    ├── 0_0_caiyilin_0024.jpg    └── ...

3.3 数据增强

为提高模型泛化能力,训练时使用ImageDataGenerator进行在线数据增强:

aug = ImageDataGenerator(    rotation_range=20,        # 随机旋转±20度    zoom_range=0.15,          # 随机缩放±15%    width_shift_range=0.2,    # 水平平移±20%    height_shift_range=0.2,   # 垂直平移±20%    shear_range=0.15,         # 剪切变换±15%    horizontal_flip=True,     # 随机水平翻转    fill_mode="nearest"       # 填充模式)

四、模型训练

4.1 训练配置

参数
说明
初始学习率
1e-4
Adam优化器
训练轮数
20 epochs
仅训练分类头
批次大小
32
根据GPU内存调整
输入尺寸
224×224×3
MobileNetV2标准输入
训练/测试分割
80%/20%
分层采样

4.2 完整训练代码

# train_mask_detector.py 核心逻辑# 1. 加载数据data = []labels = []for category in ["with_mask""without_mask"]:    path = os.path.join(DIRECTORY, category)    for img in os.listdir(path):        img_path = os.path.join(path, img)        image = load_img(img_path, target_size=(224, 224))        image = img_to_array(image)        image = preprocess_input(image)        data.append(image)        labels.append(category)# 2. 标签编码lb = LabelBinarizer()labels = lb.fit_transform(labels)labels = to_categorical(labels)# 3. 划分训练/测试集(trainX, testX, trainY, testY) = train_test_split(    data, labels, test_size=0.20, stratify=labels, random_state=42)# 4. 编译模型opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)model.compile(loss="binary_crossentropy", optimizer=opt, metrics=["accuracy"])# 5. 训练H = model.fit(    aug.flow(trainX, trainY, batch_size=BS),    steps_per_epoch=len(trainX) // BS,    validation_data=(testX, testY),    validation_steps=len(testX) // BS,    epochs=EPOCHS)# 6. 保存模型model.save("mask_detector.model", save_format="h5")

4.3 训练结果评估

训练完成后,使用分类报告评估模型性能:

# 在测试集上评估predIdxs = model.predict(testX, batch_size=BS)predIdxs = np.argmax(predIdxs, axis=1)# 输出分类报告print(classification_report(testY.argmax(axis=1), predIdxs,    target_names=lb.classes_))

训练过程中会自动保存训练曲线图 plot.png,包含:

  • 训练损失 vs 验证损失
  • 训练准确率 vs 验证准确率

五、实时视频流检测

5.1 检测流水线

实时检测的核心函数 detect_and_predict_mask

def detect_and_predict_mask(frame, faceNet, maskNet):    # 1. 获取帧尺寸    (h, w) = frame.shape[:2]    # 2. 构建blob并进行人脸检测    blob = cv2.dnn.blobFromImage(frame, 1.0, (300300),         (104.0177.0123.0))    faceNet.setInput(blob)    detections = faceNet.forward()    faces = []    locs = []    preds = []    # 3. 遍历检测结果    for i in range(0, detections.shape[2]):        confidence = detections[00, i, 2]        if confidence > 0.5:  # 置信度阈值            # 计算边界框坐标            box = detections[00, i, 3:7] * np.array([w, h, w, h])            (startX, startY, endX, endY) = box.astype("int")            # 确保边界框在帧内            (startX, startY) = (max(0, startX), max(0, startY))            (endX, endY) = (min(w - 1, endX), min(h - 1, endY))            # 提取人脸ROI并预处理            face = frame[startY:endY, startX:endX]            face = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)            face = cv2.resize(face, (224224))            face = img_to_array(face)            face = preprocess_input(face)            faces.append(face)            locs.append((startX, startY, endX, endY))    # 4. 批量预测    if len(faces) > 0:        faces = np.array(faces, dtype="float32")        preds = maskNet.predict(faces, batch_size=32)    return (locs, preds)

5.2 可视化标注

检测结果使用不同颜色区分:

for (box, pred) in zip(locs, preds):    (startX, startY, endX, endY) = box    (mask, withoutMask) = pred    # 判断是否戴口罩    label = "Mask" if mask > withoutMask else "No Mask"    color = (02550if label == "Mask" else (00255)    # 显示概率    label = "{}: {:.2f}%".format(label, max(mask, withoutMask) * 100)    # 绘制边界框和标签    cv2.putText(frame, label, (startX, startY - 10),        cv2.FONT_HERSHEY_SIMPLEX, 0.45, color, 2)    cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)
检测结果
边界框颜色
标签
戴口罩
🟢 绿色
Mask: XX.XX%
未戴口罩
🔴 红色
No Mask: XX.XX%

5.3 主循环

# 初始化视频流vs = VideoStream(src=0).start()while True:    frame = vs.read()    frame = imutils.resize(frame, width=400)    # 检测口罩    (locs, preds) = detect_and_predict_mask(frame, faceNet, maskNet)    # 可视化结果    for (box, pred) in zip(locs, preds):        # ... 绘制标注 ...    cv2.imshow("Frame", frame)    # 按'q'退出    if cv2.waitKey(1) & 0xFF == ord("q"):        breakcv2.destroyAllWindows()vs.stop()

六、完整项目结构

Face-Mask-Detection-master/├── dataset/                          # 数据集│   ├── with_mask/                    # 戴口罩图片│   └── without_mask/                 # 未戴口罩图片├── face_detector/                    # 人脸检测模型│   ├── deploy.prototxt               # SSD网络配置│   └── res10_300x300_ssd_iter_140000.caffemodel  # 预训练权重├── train_mask_detector.py            # 训练脚本├── detect_mask_video.py              # 实时检测脚本├── mask_detector.model               # 训练好的口罩检测模型├── plot.png                          # 训练曲线图└── requirements.txt                  # 依赖列表

七、常见错误与解决方案

错误1:TensorFlow版本兼容性问题

现象

AttributeErrormodule 'tensorflow' has no attribute 'keras'

原因:TensorFlow 2.x中Keras已集成,导入方式不同。

解决方案

# 错误写法(TF 1.x风格)import keras# 正确写法(TF 2.x)from tensorflow import keras# 或from tensorflow.keras.models import load_model

错误2:OpenCV无法读取摄像头

现象

error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

原因:摄像头索引不正确或摄像头被占用。

解决方案

# 尝试不同的摄像头索引vs = VideoStream(src=0).start()  # 尝试 0, 1, 2...# 或使用视频文件测试vs = cv2.VideoCapture("test_video.mp4")

错误3:模型文件路径问题

现象

OSError: Unable to open file (unable to open file: name = 'face_detector/deploy.prototxt')

原因:工作目录不正确,相对路径找不到文件。

解决方案

import os# 使用绝对路径base_dir = os.path.dirname(os.path.abspath(__file__))prototxtPath = os.path.join(base_dir, "face_detector""deploy.prototxt")

错误4:GPU内存不足

现象

ResourceExhaustedError: OOM when allocating tensor

原因:批次大小过大或GPU内存不足。

解决方案

# 减小批次大小BS = 16  # 从32降到16# 或使用CPU训练import osos.environ["CUDA_VISIBLE_DEVICES"] = "-1"

八、优化建议

8.1 性能优化

优化方向
方法
预期效果
推理加速
使用TensorRT或OpenVINO
2-3x速度提升
模型量化
INT8量化
模型大小减少75%
批处理
多人脸批量预测
减少推理次数
跳帧处理
每N帧检测一次
降低CPU占用

8.2 精度优化

  1. 微调基础网络
    :解冻MobileNetV2最后几层进行微调
  2. 增加数据
    :收集更多样化的口罩图片
  3. 模型集成
    :使用多个模型的投票结果
  4. 调整阈值
    :根据实际场景调整置信度阈值

8.3 部署优化

# 解冻部分层进行微调(提升精度)for layer in baseModel.layers[-20:]:  # 解冻最后20    layer.trainable = True# 使用更小的学习率进行微调opt = Adam(lr=INIT_LR / 10, decay=(INIT_LR / 10) / EPOCHS)

九、总结

本文从零开始构建了一个完整的人脸口罩检测系统,核心要点回顾:

  1. 两阶段架构
    :SSD人脸检测 + MobileNetV2口罩分类,兼顾速度与精度
  2. 迁移学习
    :利用ImageNet预训练权重,在小数据集上快速收敛
  3. 数据增强
    :通过旋转、缩放、翻转等操作提升模型泛化能力
  4. 实时处理
    :支持摄像头实时视频流检测,可视化标注结果

这个项目虽然代码量不大(两个核心脚本不到200行),但完整覆盖了计算机视觉项目的标准流程:数据准备 → 模型训练 → 评估 → 部署推理。非常适合作为CV入门实战项目。

下一篇预告:我们将继续探索30个计算机视觉项目中的下一个——YOLOR卡片目标检测,看看最新的YOLO变体如何在保持实时性的同时提升检测精度。


参考链接

  • MobileNetV2论文
  • OpenCV DNN模块文档
  • TensorFlow迁移学习指南
  • SSD人脸检测器下载

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 00:58:47 HTTP/2.0 GET : https://f.mffb.com.cn/a/501636.html
  2. 运行时间 : 0.220289s [ 吞吐率:4.54req/s ] 内存消耗:4,940.15kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e3bb926f8aacb056f85eda61d4401278
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000628s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000809s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000285s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000262s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000555s ]
  6. SELECT * FROM `set` [ RunTime:0.000257s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001004s ]
  8. SELECT * FROM `article` WHERE `id` = 501636 LIMIT 1 [ RunTime:0.000652s ]
  9. UPDATE `article` SET `lasttime` = 1783011527 WHERE `id` = 501636 [ RunTime:0.017430s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000348s ]
  11. SELECT * FROM `article` WHERE `id` < 501636 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.024883s ]
  12. SELECT * FROM `article` WHERE `id` > 501636 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000521s ]
  13. SELECT * FROM `article` WHERE `id` < 501636 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008212s ]
  14. SELECT * FROM `article` WHERE `id` < 501636 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.068258s ]
  15. SELECT * FROM `article` WHERE `id` < 501636 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.029497s ]
0.221919s