logo 范 · 拾光录
网址收集 关于作者 Github Gitee
杂文随笔5
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置基于Node的WIKI管理
前端知识16
HTML常用知识CSS常用知识CSS美化checkbox复选框JavaScript常用知识JavaScript格式化时间戳JavaScript窗口宽高处理JavaScript黑夜主题切换实现方案JavaScript数字转大写简易图片查看器TypeScript基础知识Threejs基础三要素Threejs网格辅助和轨道控制器Threejs物体绘制Electron基础使用Nodejs基础知识animate.css页面动画
Vue框架19
Vite的使用及扩展Vue3父子组件Vue3使用Marked解析MarkdownMermaid图表生成库初始化页面加载动画Axios表单提交二维码解决方案NProgress加载进度条Vue3动态菜单实现Vue3使用ECharts图表Vue3处理Excel导入导出keep-alive页面缓存及setup问题Element:文件上传Element:结合Pinia实现动态菜单Element:图片上传组件Element:自定义统一弹窗组件Element:表格自定义指令控制按钮显示(鉴权)可视化大屏使用缩放适配分辨率
UniApp15
UniApp的基础使用封装网络请求工具及文件上传uni-app的开发记录微信小程序分享原生文件上传Pinia取消滚动条(兼容小程序)tabbar消息数量显示scroll-view上滑到底部加载数据状态栏高度动态设配数据共享与传递uview-plus导航栏实现背景融合Wot UIWot UI实现顶部背景图融合uni-app x
Java基础知识10
基础知识面向对象Lambda表达式常用API常用知识积累try-with-resource注解反射多线程经纬度距离计算
SpringBoot31
application配置Maven创建聚合项目全局异常处理锁机制项目启动初始化数据方式邮件功能集成原生定时任务异步集成阿里云OSS阿里OSS预签名上传基于hutool读excelJSR303WebSocketWebSocket版AI接口流式调用Smart-Doc接口文档生成器application配置信息加密雪花算法工具AOP实现请求参数脱敏思路JWT生成Token及工具类SpringBoot默认JSON与对象转换若依框架:安装使用若依框架:优化和调整文件上传若依框架:管理后台页面优化若依框架:后端接口代码优化SpringAISpringBoot实现AI接口流式调用服务启动时创建MySQL连接自建项目工程树形结构处理工具微信支付代码微信手机号登录
SpringMVC14
跨域处理拦截器RESTful风格伪前后端分离Jackson转换器调整Thymeleaf基于拦截器做权限校验AOP打印接口请求响应日志AOP打印接口请求响应耗时文件上传和回显POST请求加解密实现(AES)POST请求加解密实现(RSA+AES)参数动态校验实现方案真实IP和归属地
MyBatis8
MyBatis基本使用与配置Mapper使用相关MaBatis多数据源配置MyBatisPlus数据统计类处理方案MyBatisPlus条件查询正向工程的实现(H2)mybatis-plus-join
SpringCloud15
Netflix:微服务与搭建Netflix:服务的消费与提供Netflix:EurekaNetflix:ActuatorNetflix:RibbonNetflix:FeignNetflix:HystrixNetflix:ZuulAlibaba:简介与搭建Alibaba:Nacos注册中心Alibaba:RibbonAlibaba:OpenFeignAlibaba:Nacos配置中心Alibaba:GetewayAlibaba:Sentinel
MySQL6
MySQL基础知识MySQL多表查询与事务MySQL常用函数及解决方案MySQL视图MySQL索引安装MySQL
Redis7
Redis介绍和安装Redis配置文件Redis持久化Redis集群Redis语法基础Redis相关问题及解决方案SpringBoot集成Redis使用记录
MongoDB10
Linux安装MongoDBMongoDB基础语法MongoTemplate及SpringBoot配置MongoTemplate中Update操作MongoTemplate中聚合查询MongoTemplate日期归档示例项目使用相关知识归纳地理位置存储与距离查询MongoDB副本集与事务获取类名和属性名工具类
其他数据库1
H2数据库
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv
工具集合13
IDEAMavenGradleGitNginx安装Nginx配置VSCodeJMeter压测DockerOllamaRustFSPicGoObs录制
Linux知识11
Linux常用命令Jar启动脚本VirtualBox安装CentOSVirtualBox安装Ubuntu树莓派安装及使用frp内网穿透ArchLinux:基础系统安装ArchLInux:图形化界面安装ArchLinux:常用软件ArchLinux:深度优化ArchLinux:Niri
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

简单检测

import time

from ultralytics import YOLO

# 加载模型
model = YOLO('yolo11n.pt')
startTime = time.time()
# 检测图片
model('1.png', save=True)
print(time.time()-startTime)

实时屏幕检测

import time
import cv2
import numpy as np
import win32gui
import win32con
from mss import mss
from ultralytics import YOLO
from PIL import Image
import torch  # 添加torch库用于GPU检测

# 依赖
# pip install ultralytics opencv-python mss pywin32 pillow
# cuda环境:https://www.bilibili.com/video/BV1RDZqY2Ejs?spm_id_from=333.788.videopod.sections&vd_source=db6ea3f4f428d304a4503f2f8b25c70d

# 检查GPU可用性
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"Using device: {device}")

# 加载YOLO模型并启用GPU
model = YOLO('yolo11n.pt').to(device)  # 将模型移至GPU

# 获取屏幕尺寸
with mss() as sct:
    monitor = sct.monitors[1]  # 主显示器
    screen_width, screen_height = monitor["width"], monitor["height"]

# 计算中心区域坐标 (640x480)
crop_width, crop_height = 320, 320
crop_x = (screen_width - crop_width) // 2
crop_y = (screen_height - crop_height) // 2

# 创建透明覆盖窗口
window_name = "YOLO Detection Overlay"
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.setWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
cv2.setWindowProperty(window_name, cv2.WND_PROP_TOPMOST, 1)  # 置顶窗口
cv2.resizeWindow(window_name, screen_width, screen_height)
cv2.moveWindow(window_name, 0, 0)

# 设置窗口透明属性 (仅Windows)
hwnd = win32gui.FindWindow(None, window_name)
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE,
                       win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) |
                       win32con.WS_EX_LAYERED |
                       win32con.WS_EX_TRANSPARENT)
win32gui.SetLayeredWindowAttributes(hwnd, 0, 0, win32con.LWA_COLORKEY)

# 创建透明画布 (全屏尺寸)
overlay = np.zeros((screen_height, screen_width, 4), dtype=np.uint8)

# 主循环
with mss() as sct:
    monitor = {"top": crop_y, "left": crop_x, "width": crop_width, "height": crop_height}

    # GPU预热 - 首次推理通常较慢
    warmup_img = Image.new('RGB', (crop_width, crop_height), (0, 0, 0))
    _ = model(warmup_img, device=device, verbose=False)

    while True:
        start_time = time.perf_counter()

        # 捕获屏幕中心区域
        screenshot = sct.grab(monitor)
        img = Image.frombytes("RGB", screenshot.size, screenshot.rgb)

        # YOLO目标检测 - 使用GPU加速
        results = model(img,
                        device=device,  # 指定使用GPU
                        half=True,  # 启用半精度推理(仅GPU有效)
                        verbose=False)  # 禁用详细日志

        # 重置覆盖层
        overlay.fill(0)

        # 绘制检测区域边框(灰色边框)
        cv2.rectangle(overlay, (crop_x, crop_y),
                      (crop_x + crop_width, crop_y + crop_height),
                      (150, 150, 150, 255), 2)  # 灰色边框 (BGR: 150,150,150)

        # 添加检测区域标签
        cv2.putText(overlay, "Detection Area",
                    (crop_x + 10, crop_y - 10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.6, (200, 200, 200, 255), 2)

        # 绘制检测结果
        for result in results:
            for box in result.boxes:
                # 转换坐标到全屏坐标系
                x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
                x1 += crop_x
                y1 += crop_y
                x2 += crop_x
                y2 += crop_y

                # 绘制边界框 (BGR颜色 + 透明度)
                cv2.rectangle(overlay, (x1, y1), (x2, y2), (0, 255, 0, 255), 2)

                # 获取类别和置信度
                cls_id = int(box.cls)
                conf = float(box.conf)
                label = f"{result.names[cls_id]} {conf:.2f}"

                # 绘制标签
                cv2.putText(overlay, label, (x1, y1 - 10),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0, 255), 2)

        # 计算并显示FPS
        fps = 1 / (time.perf_counter() - start_time)
        cv2.putText(overlay, f"FPS: {fps:.1f} | Delay: {1000 / fps:.1f}ms | Device: {device.upper()}",
                    (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255, 255), 2)

        # 显示覆盖层
        cv2.imshow(window_name, overlay)

        # 退出条件
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

# 清理资源
cv2.destroyAllWindows()

数据标注工具

https://github.com/HumanSignal/labelImg

简单检测
实时屏幕检测
数据标注工具