当前位置:首页>python>基于python与YOLO的GUI元素检测模型

基于python与YOLO的GUI元素检测模型

  • 2026-03-26 15:50:55
基于python与YOLO的GUI元素检测模型

这是一个基于python与YOLO模型的 GUI 元素检测应用,可以检测屏幕上的交互式 UI 元素(图标、按钮等)。

系统要求

    Python 3.7+

    Windows 操作系统(支持 macOS 和 Linux,但截图功能可能有限)

安装步骤

1. 安装依赖

pip install -r requirements.txt

ultralytics>=8.0.0torch>=2.0.0torchvision>=0.15.0opencv-python>=4.5.0Pillow>=8.0.0pyautogui>=0.9.0numpy>=1.19.0

2. 运行应用

python run_detector.py

当然也可以直接运行:

python gui_detector.py

使用方法

  1. 截图或选择图像

  2. 点击"截图屏幕"按钮截取当前屏幕

  3. 点击"选择图像"按钮从文件选择图像

调整参数

  1. 置信度阈值: 控制检测的严格程度(0.01-1.0)

  2. 图像尺寸: 输入图像的尺寸(320/640/1280)

开始检测

  1. 点击"开始检测"按钮运行检测算法

  2. 检测结果会显示在图像上(红色边界框)和结果区域

查看结果

  1. 检测到的 UI 元素会用红色边界框标记

  2. 每个元素都有序号和置信度分数

  3. 详细结果显示在底部的文本框中

功能特点

  1. 实时截图: 一键截取当前屏幕

  2. 图像预览: 支持多种图像格式

  3. 参数调节: 可调整检测敏感度

  4. 可视化结果: 边界框和标签显示

  5. 详细输出: 坐标和置信度信息

技术说明

  1. 使用 Ultralytics YOLO 模型进行目标检测

  2. 基于预训练的 GPA-GUI-Detector 模型

  3. 支持自定义置信度阈值和图像尺寸

  4. 多线程处理,避免界面冻结

gui_detector.py

import tkinter as tkfrom tkinter import ttk, filedialog, messageboximport cv2import numpy as npfrom PIL import Image, ImageTkimport pyautoguifrom ultralytics import YOLOimport threadingimport osclass GUIDetectorApp:    def __init__(self, root):        self.root = root        self.root.title("GPA GUI 元素检测器")        self.root.geometry("1200x800")        # 加载模型        self.model = None        self.load_model()        # 当前图像        self.current_image = None        self.photo = None        self.detection_results = None        # 创建界面        self.create_widgets()    def load_model(self):        """加载YOLO模型"""        try:            self.model = YOLO("model.pt")            print("模型加载成功")        except Exception as e:            messagebox.showerror("错误"f"模型加载失败: {str(e)}")    def create_widgets(self):        """创建界面组件"""        # 主框架        main_frame = ttk.Frame(self.root)        main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)        # 控制面板        control_frame = ttk.LabelFrame(main_frame, text="控制面板", padding=10)        control_frame.pack(fill=tk.X, pady=(010))        # 截图按钮        ttk.Button(control_frame, text="截图屏幕", command=self.capture_screen).pack(side=tk.LEFT, padx=5)        ttk.Button(control_frame, text="选择图像", command=self.select_image).pack(side=tk.LEFT, padx=5)        # 参数设置        param_frame = ttk.Frame(control_frame)        param_frame.pack(side=tk.LEFT, padx=20)        ttk.Label(param_frame, text="置信度阈值:").grid(row=0, column=0, sticky=tk.W)        self.conf_var = tk.DoubleVar(value=0.05)        ttk.Scale(param_frame, from_=0.01, to=1.0, variable=self.conf_var,                  orient=tk.HORIZONTAL, length=150).grid(row=0, column=1, padx=5)        self.conf_label = ttk.Label(param_frame, text="0.05")        self.conf_label.grid(row=0, column=2)        # 缩放控制        ttk.Label(param_frame, text="图像缩放:").grid(row=1, column=0, sticky=tk.W)        self.zoom_var = tk.DoubleVar(value=1.0)        ttk.Scale(param_frame, from_=0.1, to=3.0, variable=self.zoom_var,                  orient=tk.HORIZONTAL, length=150).grid(row=1, column=1, padx=5)        self.zoom_label = ttk.Label(param_frame, text="100%")        self.zoom_label.grid(row=1, column=2)        # 操作按钮        ttk.Button(control_frame, text="保存图像", command=self.save_image).pack(side=tk.RIGHT, padx=5)        ttk.Button(control_frame, text="开始检测", command=self.start_detection,                   style="Accent.TButton").pack(side=tk.RIGHT, padx=5)        # 绑定事件        self.conf_var.trace('w'self.update_conf_label)        self.zoom_var.trace('w'self.update_zoom)        # 图像显示区域        self.image_frame = ttk.LabelFrame(main_frame, text="图像预览", padding=10)        self.image_frame.pack(fill=tk.BOTH, expand=True)        self.canvas = tk.Canvas(self.image_frame, bg='white')        self.canvas.pack(fill=tk.BOTH, expand=True)        # 结果区域        self.result_frame = ttk.LabelFrame(main_frame, text="检测结果", padding=10)        self.result_frame.pack(fill=tk.X, pady=(100))        # 结果文本框        self.result_text = tk.Text(self.result_frame, height=8, width=80)        scrollbar = ttk.Scrollbar(self.result_frame, orient=tk.VERTICAL, command=self.result_text.yview)        self.result_text.configure(yscrollcommand=scrollbar.set)        self.result_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)    def update_conf_label(self, *args):        """更新置信度阈值显示"""        self.conf_label.config(text=f"{self.conf_var.get():.2f}")    def update_zoom(self, *args):        """更新缩放显示并重新显示图像"""        zoom = self.zoom_var.get()        self.zoom_label.config(text=f"{zoom*100:.0f}%")        if self.current_image:            self.display_image(self.current_image)    def capture_screen(self):        """截取屏幕"""        try:            # 截图            screenshot = pyautogui.screenshot()            self.current_image = screenshot            # 转换为适合显示的尺寸            display_image = self.resize_image_for_display(screenshot)            self.display_image(display_image)            self.result_text.delete(1.0, tk.END)            self.result_text.insert(tk.END, f"屏幕截图已捕获: {screenshot.size}\n")        except Exception as e:            messagebox.showerror("错误"f"截图失败: {str(e)}")    def select_image(self):        """选择图像文件"""        file_path = filedialog.askopenfilename(            title="选择图像文件",            filetypes=[("图像文件""*.png *.jpg *.jpeg *.bmp"), ("所有文件""*.*")]        )        if file_path:            try:                image = Image.open(file_path)                self.current_image = image                # 转换为适合显示的尺寸                display_image = self.resize_image_for_display(image)                self.display_image(display_image)                self.result_text.delete(1.0, tk.END)                self.result_text.insert(tk.END, f"图像已加载: {file_path}\n尺寸: {image.size}\n")            except Exception as e:                messagebox.showerror("错误"f"图像加载失败: {str(e)}")    def resize_image_for_display(self, image):        """根据缩放比例调整图像尺寸"""        if not self.current_image:            return image        zoom = self.zoom_var.get()        width, height = image.size        # 应用缩放比例        new_width = int(width * zoom)        new_height = int(height * zoom)        return image.resize((new_width, new_height), Image.Resampling.LANCZOS)    def display_image(self, image):        """在画布上显示图像"""        # 清除画布        self.canvas.delete("all")        # 调整图像尺寸        display_image = self.resize_image_for_display(image)        # 转换为PhotoImage        self.photo = ImageTk.PhotoImage(display_image)        # 在画布中心显示图像        canvas_width = self.canvas.winfo_width()        canvas_height = self.canvas.winfo_height()        if canvas_width > 1 and canvas_height > 1:            x = canvas_width // 2            y = canvas_height // 2        else:            x = self.photo.width() // 2            y = self.photo.height() // 2        self.canvas.create_image(x, y, image=self.photo, anchor=tk.CENTER)        # 如果存在检测结果,重新绘制边界框        if self.detection_results:            self.draw_detection_results()    def start_detection(self):        """开始检测(在新线程中运行)"""        if self.current_image is None:            messagebox.showwarning("警告""请先截图或选择图像")            return        if self.model is None:            messagebox.showerror("错误""模型未加载成功")            return        # 在新线程中运行检测,避免界面冻结        thread = threading.Thread(target=self.run_detection)        thread.daemon = True        thread.start()    def run_detection(self):        """运行检测算法"""        try:            # 更新界面状态            self.root.after(0lambdaself.result_text.insert(tk.END, "开始检测...\n"))            # 获取参数            conf = self.conf_var.get()            # 自动确定图像尺寸(使用图像宽度,不超过1280)            width, height = self.current_image.size            imgsz = min(width, 1280)            # 运行YOLO检测            results = self.model.predict(                source=self.current_image,                conf=conf,                imgsz=imgsz,                iou=0.7            )            # 解析结果            boxes = results[0].boxes.xyxy.cpu().numpy()            scores = results[0].boxes.conf.cpu().numpy()            self.detection_results = {                'boxes': boxes,                'scores': scores,                'original_size'self.current_image.size            }            # 更新结果显示            self.root.after(0self.update_results_display)            # 绘制边界框            self.root.after(0self.draw_detection_results)        except Exception as e:            self.root.after(0lambda: messagebox.showerror("错误"f"检测失败: {str(e)}"))    def save_image(self):        """保存当前图像(带检测结果)"""        if self.current_image is None:            messagebox.showwarning("警告""没有可保存的图像")            return        file_path = filedialog.asksaveasfilename(            title="保存图像",            defaultextension=".png",            filetypes=[("PNG图像""*.png"), ("JPEG图像""*.jpg"), ("所有文件""*.*")]        )        if file_path:            try:                # 如果存在检测结果,创建带标注的图像                if self.detection_results:                    # 使用PIL绘制边界框                    from PIL import ImageDraw                    annotated_image = self.current_image.copy()                    draw = ImageDraw.Draw(annotated_image)                    boxes = self.detection_results['boxes']                    scores = self.detection_results['scores']                    for i, (box, score) in enumerate(zip(boxes, scores)):                        x1, y1, x2, y2 = box                        # 绘制紫色边界框                        draw.rectangle([x1, y1, x2, y2], outline="purple", width=3)                        # 绘制标签                        label = f"{i+1}{score:.2f}"                        draw.text((x1, y1 - 15), label, fill="purple")                    annotated_image.save(file_path)                else:                    # 保存原始图像                    self.current_image.save(file_path)                messagebox.showinfo("成功"f"图像已保存到: {file_path}")            except Exception as e:                messagebox.showerror("错误"f"保存失败: {str(e)}")    def update_results_display(self):        """更新结果文本框"""        if self.detection_results:            boxes = self.detection_results['boxes']            scores = self.detection_results['scores']            self.result_text.delete(1.0, tk.END)            self.result_text.insert(tk.END, f"检测完成! 发现 {len(boxes)} 个UI元素\n\n")            for i, (box, score) in enumerate(zip(boxes, scores)):                x1, y1, x2, y2 = box                self.result_text.insert(tk.END,                     f"元素 {i+1}: 位置 [{x1:.0f}{y1:.0f}{x2:.0f}{y2:.0f}] 置信度: {score:.3f}\n")    def draw_detection_results(self):        """在图像上绘制检测结果"""        if not self.detection_results or not self.photo:            return        # 获取原始图像和显示图像的尺寸比例        orig_width, orig_height = self.detection_results['original_size']        display_width = self.photo.width()        display_height = self.photo.height()        scale_x = display_width / orig_width        scale_y = display_height / orig_height        # 绘制边界框        boxes = self.detection_results['boxes']        scores = self.detection_results['scores']        for i, (box, score) in enumerate(zip(boxes, scores)):            x1, y1, x2, y2 = box            # 缩放坐标到显示尺寸            x1_disp = x1 * scale_x            y1_disp = y1 * scale_y            x2_disp = x2 * scale_x            y2_disp = y2 * scale_y            # 计算画布中心偏移            canvas_width = self.canvas.winfo_width()            canvas_height = self.canvas.winfo_height()            if canvas_width > 1 and canvas_height > 1:                offset_x = (canvas_width - display_width) // 2                offset_y = (canvas_height - display_height) // 2            else:                offset_x = 0                offset_y = 0            # 绘制边界框(紫色)            self.canvas.create_rectangle(                x1_disp + offset_x, y1_disp + offset_y,                x2_disp + offset_x, y2_disp + offset_y,                outline="purple", width=3            )            # 绘制标签(紫色)            label_text = f"{i+1}{score:.2f}"            self.canvas.create_text(                x1_disp + offset_x, y1_disp + offset_y - 10,                text=label_text, fill="purple", anchor=tk.SW, font=("Arial"10"bold")            )def main():    """主函数"""    root = tk.Tk()    app = GUIDetectorApp(root)    root.mainloop()if __name__ == "__main__":    main()

fix_torchvision.py

#!/usr/bin/env python3"""修复torchvision版本兼容性问题问题描述:operator torchvision::nms does not exist原因:PyTorch和torchvision版本不兼容解决方案:重新安装兼容版本"""import sysimport subprocessimport importlib.utildef check_torch_versions():    """检查当前安装的PyTorch和torchvision版本"""    try:        import torch        import torchvision        print("当前安装版本:")        print(f"PyTorch: {torch.__version__}")        print(f"torchvision: {torchvision.__version__}")        print(f"CUDA可用: {torch.cuda.is_available()}")        # 检查nms操作符是否存在        try:            from torchvision.ops import nms            print("✓ torchvision::nms 操作符可用")            return True        except ImportError as e:            print(f"✗ torchvision::nms 操作符不可用: {e}")            return False    except ImportError as e:        print(f"导入失败: {e}")        return Falsedef install_compatible_versions():    """安装兼容的PyTorch和torchvision版本"""    print("\n正在安装兼容版本...")    # 根据Python版本和系统推荐兼容版本    if sys.platform.startswith('win'):        # Windows系统推荐版本        torch_cmd = [sys.executable, "-m""pip""install""torch==2.0.1""torchvision==0.15.2""torchaudio==2.0.2""--index-url""https://download.pytorch.org/whl/cu118"]    else:        # Linux/Mac系统        torch_cmd = [sys.executable, "-m""pip""install""torch==2.0.1""torchvision==0.15.2""torchaudio==2.0.2"]    try:        print("安装PyTorch和torchvision...")        subprocess.check_call(torch_cmd)        print("✓ PyTorch安装成功")        # 重新安装ultralytics以确保兼容性        print("重新安装ultralytics...")        subprocess.check_call([sys.executable, "-m""pip""install""--upgrade""ultralytics"])        print("✓ ultralytics安装成功")        return True    except subprocess.CalledProcessError as e:        print(f"✗ 安装失败: {e}")        return Falsedef main():    """主函数"""    print("=" * 60)    print("GPA GUI检测器 - torchvision兼容性修复工具")    print("=" * 60)    # 检查当前版本    if check_torch_versions():        print("\n✓ 当前版本兼容,无需修复")        return    print("\n检测到版本兼容性问题,开始修复...")    # 卸载现有版本    print("卸载现有版本...")    try:        subprocess.check_call([sys.executable, "-m""pip""uninstall""-y""torch""torchvision""torchaudio"])    except:        pass  # 忽略卸载错误    # 安装兼容版本    if install_compatible_versions():        print("\n✓ 修复完成!请重新运行检测器")        # 验证修复结果        print("\n验证修复结果:")        check_torch_versions()    else:        print("\n✗ 修复失败,请手动安装兼容版本")        print("推荐命令:")        print("pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2")        print("pip install ultralytics")if __name__ == "__main__":    main()

run_detector.py

#!/usr/bin/env python3"""GPA GUI 检测器 - 启动脚本使用方法:1. 确保已安装依赖: pip install -r requirements.txt2. 运行此脚本: python run_detector.py"""import sysimport osdef check_dependencies():    """检查必要的依赖是否已安装"""    required_packages = [        ('ultralytics''ultralytics'),        ('torch''torch'),        ('torchvision''torchvision'),        ('cv2''opencv-python'),        ('PIL''Pillow'),        ('pyautogui''pyautogui'),        ('tkinter''tkinter')  # 通常是Python自带的    ]    missing_packages = []    for import_name, package_name in required_packages:        try:            __import__(import_name)        except ImportError:            missing_packages.append(package_name)    return missing_packagesdef install_dependencies():    """安装缺失的依赖"""    missing = check_dependencies()    if missing:        print("检测到缺失的依赖包:")        for package in missing:            print(f"  - {package}")        print("\n正在安装依赖...")        try:            import subprocess            subprocess.check_call([sys.executable, "-m""pip""install""-r""requirements.txt"])            print("依赖安装完成!")        except Exception as e:            print(f"安装失败: {e}")            print("请手动运行: pip install -r requirements.txt")            return False    return Truedef main():    """主函数"""    print("=" * 50)    print("GPA GUI 元素检测器")    print("=" * 50)    # 检查模型文件    if not os.path.exists("model.pt"):        print("错误: 未找到模型文件 'model.pt'")        print("请确保模型文件存在于当前目录")        return    # 安装依赖    if not install_dependencies():        return    # 启动GUI应用    print("\n启动GUI应用...")    try:        from gui_detector import main as gui_main        gui_main()    except Exception as e:        print(f"启动失败: {e}")        print("请检查错误信息并重试")if __name__ == "__main__":    main()

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 15:14:19 HTTP/2.0 GET : https://f.mffb.com.cn/a/478504.html
  2. 运行时间 : 0.165384s [ 吞吐率:6.05req/s ] 内存消耗:4,866.66kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=dc18d848a7859cda2eac1f568a61ad50
  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.000927s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001072s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000411s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000296s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000703s ]
  6. SELECT * FROM `set` [ RunTime:0.000244s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000750s ]
  8. SELECT * FROM `article` WHERE `id` = 478504 LIMIT 1 [ RunTime:0.000644s ]
  9. UPDATE `article` SET `lasttime` = 1774595659 WHERE `id` = 478504 [ RunTime:0.001506s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000310s ]
  11. SELECT * FROM `article` WHERE `id` < 478504 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000675s ]
  12. SELECT * FROM `article` WHERE `id` > 478504 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000546s ]
  13. SELECT * FROM `article` WHERE `id` < 478504 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008398s ]
  14. SELECT * FROM `article` WHERE `id` < 478504 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001535s ]
  15. SELECT * FROM `article` WHERE `id` < 478504 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001520s ]
0.167126s