当前位置: 首页 > news >正文

OpenCv高阶(十四)——LBPH人脸识别

文章目录

  • 前言
  • 一、LBPH原理
    • 1. LBP(局部二值模式)特征提取
    • 2. 图像分块处理
    • 3. 生成直方图
    • 4. 人脸识别(匹配阶段)
    • 5. LBPH的特点
    • 6. 变种与优化
  • 二、LBPH人脸识别简单实现
    • (一)LBPH人脸识别
      • 1、图像读取(灰度转换)
      • 2、创建识别器
      • 3、模型训练
      • 4、预测阶段
    • (二)摄像头人脸识别
      • 1. 中文文本叠加函数
      • 2. 训练数据准备
      • 3. LBPH识别器初始化
      • 4. 实时人脸检测与识别
  • 总结


前言

在人工智能技术蓬勃发展的今天,深度学习模型(如CNN、Transformer)在人脸识别领域占据主导地位。然而,在计算资源有限或需要快速部署的场景中,经典算法依然展现出独特的价值。LBPH(Local Binary Patterns Histograms) 作为一种基于纹理特征的人脸识别算法,凭借其简洁的原理、高效的实现和对光照变化的鲁棒性,成为传统方法中的代表性技术。

LBPH的核心思想源于对图像局部纹理特征的捕捉。它不依赖复杂的数学模型,而是通过比较像素邻域的灰度关系,生成具有判别性的特征向量。这种“轻量化”特性使其在嵌入式设备、实时监控系统等场景中依然广泛应用。本文将深入解析LBPH的原理、实现流程及其实际应用,并通过代码实践展示如何构建一个实时人脸识别系统。无论是希望理解传统图像处理技术的本质,还是寻求在资源受限环境中部署高效算法的开发者,都能从中获得启发。

一、LBPH原理

LBPH(Local Binary Patterns Histograms,局部二值模式直方图)是一种基于纹理特征的人脸识别算法,其核心思想是通过提取图像的局部纹理信息,并结合空间分布特征进行人脸匹配。以下是其原理的详细分步解释:

1. LBP(局部二值模式)特征提取

基本思想:将图像的每个像素与其邻域像素进行对比,生成二进制模式,描述局部纹理特征。

具体步骤:

邻域选择:以中心像素 (xc,yc) 为中心,选择一个邻域(如3×3的正方形或圆形邻域)。

二值化:将邻域像素值与中心像素值比较,若邻域像素值大于等于中心值,标记为1;否则标记为0。

二进制转十进制:按固定顺序(如顺时针)排列二值结果,形成一个二进制数,再转换为十进制作为该中心像素的LBP值。

在这里插入图片描述

2. 图像分块处理

目的:保留局部特征的空间分布信息,避免全局直方图丢失位置信息。

方法:将人脸图像划分为多个子区域(如16×16的块),每个子区域单独计算LBP特征。

3. 生成直方图

子区域直方图:对每个子区域内的所有像素LBP值统计直方图。假设LBP取值范围为0~255(8位邻域),则每个子区域直方图有256个维度。

全局特征向量:将所有子区域的直方图按顺序连接,形成整张图像的LBPH特征向量。例如,若图像分为4×4=16个子区域,则特征维度为16×256=4096。

4. 人脸识别(匹配阶段)

训练阶段:存储每个人脸样本的LBPH特征向量到数据库。

识别阶段:

提取待识别人脸的LBPH特征向量。

与数据库中所有特征向量进行相似度计算,常用距离度量包括:

卡方距离(Chi-Square):

在这里插入图片描述

直方图交集(Histogram Intersection):

在这里插入图片描述

选择距离最小的样本作为识别结果。

5. LBPH的特点

优点:

对光照变化鲁棒(依赖相对灰度而非绝对亮度)。

计算简单,适合实时应用。

缺点:

对姿态、表情变化敏感。

分块策略影响性能(需平衡子区域大小和特征维度)。

6. 变种与优化

均匀模式(Uniform Patterns):减少二进制模式数量,仅保留跳变次数≤2的模式(如从256维降至59维),降低计算量。

多尺度LBP:使用不同半径的邻域提取多尺度纹理特征。

结合其他特征:与HOG、深度学习特征融合提升性能。

二、LBPH人脸识别简单实现

(一)LBPH人脸识别

# 导入OpenCV和NumPy库
import cv2
import numpy as np# 准备训练数据
image = []
# 读取多张训练图像(灰度模式),薛之谦(xzq)、刘亦菲(lyf)、彭逸畅(pyc)各2张
image.append(cv2.imread('../data/face-detect/xzq1.png', 0))  # 参数0表示以灰度模式读取
image.append(cv2.imread('../data/face-detect/xzq2.png', 0))
image.append(cv2.imread('../data/face-detect/lyf1.png', 0))
image.append(cv2.imread('../data/face-detect/lyf2.png', 0))
image.append(cv2.imread('../data/face-detect/pyc1.png', 0))
image.append(cv2.imread('../data/face-detect/pyc2.png', 0))# 定义标签(与图像顺序对应):0-薛之谦,1-刘亦菲,2-彭逸畅
labels = [0, 0, 1, 1, 2, 2]# 创建标签与名称的映射字典(-1表示未知)
dic = {0: '薛之谦', 1: "刘亦菲", 2: "彭逸畅", -1: '无法识别'}# 读取待预测图像(灰度模式)
predict_image = cv2.imread('../data/face-detect/lyf.png', 0)# 创建LBPH人脸识别器(底层实现LBPH算法)
# 可选参数:radius(邻域半径)、neighbors(邻域点数)、grid_x/grid_y(分块数量)
recognizer = cv2.face.LBPHFaceRecognizer_create()# 训练模型(核心步骤)
# 输入:图像列表 + 标签数组(需转换为numpy数组)
recognizer.train(image, np.array(labels))# 进行预测
# 返回:预测标签、置信度(数值越小置信度越高)
label, confidence = recognizer.predict(predict_image)# 输出结果
print("这位是", dic[label])     # 根据标签获取姓名
print("置信度", confidence)    # 显示置信度(理想值通常小于60)

1、图像读取(灰度转换)

cv2.imread('path', 0)  # 0表示灰度模式

作用:将图像转换为单通道灰度图,符合LBPH对灰度特征的需求

原理关联:LBP依赖像素间的相对灰度值比较

2、创建识别器

cv2.face.LBPHFaceRecognizer_create()

参数说明(默认值):

radius=1:邻域半径

neighbors=8:邻域点数(圆形采样)

grid_x=8, grid_y=8:图像分块数量

3、模型训练

recognizer.train(image, np.array(labels))

内部操作:

对每个图像提取LBPH特征(分块统计直方图)

存储特征向量与标签的映射关系

4、预测阶段

recognizer.predict(predict_image)

内部操作:

提取待识别图像的LBPH特征

与所有训练特征进行距离计算(默认使用卡方距离)

返回最近邻的标签和置信度

(二)摄像头人脸识别

1. 中文文本叠加函数

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFontdef cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30):""" 向OpenCV图像添加中文文本(解决OpenCV不支持中文的问题)"""if isinstance(img, np.ndarray):  # 判断输入是否为OpenCV的numpy数组格式# 将BGR格式的OpenCV图像转换为RGB格式的PIL图像img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(img)  # 创建PIL绘图对象# 加载中文字体文件(需要确保simhei.ttf文件存在)fontStyle = ImageFont.truetype("../data/simhei.ttf", textSize, encoding="utf-8")draw.text(position, text, textColor, font=fontStyle)  # 绘制文本# 将PIL图像转换回OpenCV的BGR格式return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

作用:解决OpenCV无法直接显示中文的问题,通过PIL库实现中文渲染

2. 训练数据准备

# 加载训练图像(灰度模式)
image = []
image.append(cv2.imread('../data/face-detect/xzq1.png', 0))  # 薛之谦样本
image.append(cv2.imread('../data/face-detect/xzq2.png', 0))
image.append(cv2.imread('../data/face-detect/lyf1.png', 0))  # 刘亦菲样本
image.append(cv2.imread('../data/face-detect/lyf2.png', 0))
image.append(cv2.imread('../data/face-detect/pyc1.png', 0))  # 彭逸畅样本
image.append(cv2.imread('../data/face-detect/pyc2.png', 0))
image.append(cv2.imread('../data/face-detect/lyf4.png', 0))  # 新增样本
image.append(cv2.imread('../data/face-detect/lyf5.png', 0))
image.append(cv2.imread('../data/face-detect/pyc3.png', 0))
image.append(cv2.imread('../data/face-detect/pyc4.png', 0))
image.append(cv2.imread('../data/face-detect/pyc5.png', 0))# 定义标签(存在潜在问题:标签3未在字典中定义)
labels = [0, 0, 1, 1, 2, 2, 11222]  # 前6个对应0/1/2,后续3对应3(未定义)
dic = {0: '薛之谦', 1: "刘亦菲", 2: "彭逸畅", -1: '无法识别'}  # 缺少标签3的映射

这里面的数据可以更换成待识别的人脸图片,注意需要转换成灰度图片。

3. LBPH识别器初始化

#创建LBPH人脸识别器,设置置信度阈值为70

recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=70)
recognizer.train(image, np.array(labels))  # 训练模型

参数说明:

threshold=70:当预测置信度超过该值时返回-1(无法识别)

训练时会将每个图像的LBPH特征与标签关联存储

4. 实时人脸检测与识别

# 加载Haar级联分类器(需要确保xml文件路径正确)
faceCascade = cv2.CascadeClassifier(r'./myface-detect/haarcascade_frontalface_alt.xml')# 初始化摄像头
cap = cv2.VideoCapture(0)
if not cap.isOpened():print('视频打开失败')exit()while True:ret, frame = cap.read()  # 读取视频帧frame = cv2.flip(frame, 1)  # 水平翻转(镜像效果)gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 转换为灰度图# 人脸检测(使用Haar级联分类器)faces = faceCascade.detectMultiScale(gray,scaleFactor=1.05,  # 图像缩放因子(用于多尺度检测)minNeighbors=16,   # 候选框最少邻居数(值越大检测越严格)minSize=(8, 8)     # 最小人脸尺寸)# 遍历检测到的人脸for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 2), 2)  # 绘制矩形框# 提取人脸区域(ROI),扩展20像素边界roi = gray[y-20:y+h+20, x-20:x+w+20]  # 注意可能超出图像边界# LBPH识别预测label, confidence = recognizer.predict(roi)# 添加中文标签(存在标签3未定义的风险)frame = cv2AddChineseText(frame, dic[label], (x-10, y-20), (0, 255, 0), 16)cv2.imshow('image', frame)  # 显示结果if not ret: breakif cv2.waitKey(1) == 27: break  # ESC键退出cap.release()
cv2.destroyAllWindows()

效果
在这里插入图片描述

这里图片库内的图片数量较少,所以导致识别效果很差.

总结

LBPH算法以其独特的局部二值模式,为图像特征提取提供了一种高效且直观的解决方案。通过本文的探讨,我们可以总结以下关键点:

技术优势

低计算开销:无需GPU加速,适合边缘计算场景。光照鲁棒性:依赖相对灰度值,对光照变化具有天然适应性。可解释性:直方图特征直观,便于调试和优化。

应用场景

嵌入式设备(如门禁系统、智能摄像头)快速原型开发(结合OpenCV等工具链)与其他算法融合(如作为深度学习模型的预处理模块)

局限性

对姿态和表情变化敏感,需配合人脸对齐技术。特征维度较高,需通过分块策略平衡精度与效率。

尽管深度学习在准确率上远超传统方法,但LBPH的“轻量化哲学”仍为开发者提供了重要启示:在追求性能的同时,不应忽视算法的简洁性与可部署性。未来,将LBPH与轻量级神经网络结合,或利用其纹理特征增强模型鲁棒性,可能是值得探索的方向。

无论是作为学习计算机视觉的入门课题,还是作为实际项目的技术备选,LBPH都值得开发者深入理解与实践。毕竟,在技术迭代的浪潮中,经典算法的智慧始终熠熠生辉。

相关文章:

OpenCv高阶(十四)——LBPH人脸识别

文章目录 前言一、LBPH原理1. LBP(局部二值模式)特征提取2. 图像分块处理3. 生成直方图4. 人脸识别(匹配阶段)5. LBPH的特点6. 变种与优化 二、LBPH人脸识别简单实现(一)LBPH人脸识别1、图像读取&#xff0…...

C#开发利器:SharpBoxesCore全解析

SharpBoxesCore 是一个基于 C# 的开源开发工具库,旨在为开发者提供一系列常用功能模块和辅助类,以提高开发效率、减少重复代码编写,并增强项目的可维护性和扩展性。该库集成了多种实用工具类和通用扩展方法,适用于桌面应用、Web 项…...

回表是数据库概念,还是mysql的概念?

主键索引没有列,根据耳机索引去查主键索引,又没有查表,为啥叫回表呢? “回表”这个词,其实算是数据库里的一个通用概念,不过它最常见的应用场景是在 MySQL 的 InnoDB 引擎里,所以很多人一提起回…...

49、c# 能⽤foreach 遍历访问的对象需满足什么条件?

在 C# 中,要使用 foreach 循环遍历一个对象,该对象必须满足以下条件之一: 1. 实现 IEnumerable 或 IEnumerable 接口 非泛型版本:System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…...

DL00987-基于深度学习YOLOv11的红外鸟类目标检测含完整数据集

提升科研能力,精准识别红外鸟类目标! 完整代码数据集见文末 针对科研人员,尤其是研究生们,是否在鸟类目标检测中遇到过数据不够精准、处理困难等问题?现在,我们为你提供一款基于深度学习YOLOv11的红外鸟类…...

07 接口自动化-用例管理框架之pytest单元测试框架

文章目录 一、pytest用例管理框架(单元测试框架)二、pytest简介三、pytest的最基本的测试用例的规则四、运行方式1.主函数方式2.命令行方式3.通过pytest.ini的配置文件运行 五、pytest 默认执行测试用例的顺序六、跳过测试用例1.无条件跳过 pytest.mark.…...

Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中

Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中 在 Flutter 中,build 方法被设计在 StatefulWidget 的 State 类中而非 StatefulWidget 类本身,这种设计基于几个重要的架构原则和实际考量: 1. 核心设计原因 1.1 生命周期管理…...

多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity(含 KeyMob 工具实测)

多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity 随着移动端开发日趋多元化,iOS 项目中纯 Objective-C/Swift 已不再是唯一选择。越来越多团队采用 Flutter、React Native、Unity、WebView 混合等方案构建 App。这种“技术栈混合”带来灵活性的同…...

Base64加密解密

Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式,常用于需要通过文本协议传输二进制数据的场景(如 URL、邮件)。以下是不同场景下生成 Base64 编码的方法: 一、编程语言实现 Python import base64# 字符串转Base…...

程序设计基础----排序(2)

1、冒泡排序 #include <stdio.h>#define N 1000 int arr[N];/* 对长度为n的数组arr执行冒泡排序 */ void bubbleSort(int arr[], int n);/* 打印长度为n的数组arr */ void printArray(int arr[], int n);void swap(int *xp, int *yp) {int temp *xp;*xp *yp;*yp temp…...

C++:vector容器

vector容器与array容器相似&#xff0c;但vector容器是动态的&#xff0c;可以自动扩容。 使用方法和一些注意如下&#xff1a; #include<iostream> #include<vector> using namespace std;int main() {vector<char> vec { a,b,c,d };vec[4] e;//不能以此…...

十四、Hive 视图 Lateral View

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月20日 专栏&#xff1a;Hive教程 在Hive中&#xff0c;我们经常需要以不同于原始表结构的方式查看或处理数据。为了简化复杂查询、提供数据抽象&#xff0c;以及处理复杂数据类型&#xff08;如数组或Map&#xff09;&#…...

Frp Dockr Mysql内网映射

用 FRP 远程暴露 Mac mini 上的 Docker-MySQL&#xff08;含 Ubuntu frps 安装和 macOS 客户端配置&#xff09; 一、环境说明 服务器&#xff08;公网&#xff09;&#xff1a;Ubuntu 22.04 frps内网设备&#xff1a;macOS (Mac mini) frpc Docker MySQL目标&#xff1a;…...

PHP 扇形的面积(Area of a Circular Sector)

圆形扇区或圆形扇区是圆盘上由两个半径和一个圆弧围成的部分&#xff0c;其中较小的区域称为小扇区&#xff0c;较大的区域称为大扇区。让我们看看这个图&#xff0c;试着找出扇区&#xff1a; 在该图中&#xff0c;绿色阴影部分是扇形&#xff0c;“r”是半径&#xff0c;“th…...

物业后勤小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的物业后勤小程序源码&#xff0c;它为物业管理提供了高效便捷的解决方案。 该源码功能丰富&#xff0c;涵盖房屋认证、家人认证&#xff0c;保障社区居住安全&#xff1b;支持报事报修、装修申请&#xff0c;方便业主与物业沟通&#xff1b;还…...

git基础操作

当远程仓库迁移到一个新的组下面时&#xff0c;你需要在本地仓库中更新远程仓库的URL&#xff0c;以便与新的远程仓库关联。以下是详细步骤&#xff1a; 获取新的远程仓库URL&#xff1a; 首先&#xff0c;你需要从GitLab或相关平台获取新组下的仓库的新URL。通常&#xff0c;仓…...

鸿蒙HarmonyOS 【ArkTS组件】通用属性-背景设置

&#x1f4d1;往期推文全新看点&#xff08;附带最新鸿蒙全栈学习笔记&#xff09; 嵌入式开发适不适合做鸿蒙南向开发&#xff1f;看完这篇你就了解了~ 鸿蒙岗位需求突增&#xff01;移动端、PC端、IoT到底该怎么选&#xff1f; 分享一场鸿蒙开发面试经验记录&#xff08;三面…...

java 在用redis 的时候,如何合理的处理分页问题? redis应当如何存储性能最佳

在 Java 中使用 Redis 处理用户表分页时&#xff0c;需结合其数据结构特性优化存储和查询 1. 数据结构设计 场景需求 用户表字段&#xff1a;id, name, age, register_time&#xff08;注册时间&#xff09;分页要求&#xff1a;按注册时间倒序分页展示&#xff0c;每页 10 条…...

分类预测 | Matlab实现PNN概率神经网络多特征分类预测

分类预测 | Matlab实现PNN概率神经网络多特征分类预测 目录 分类预测 | Matlab实现PNN概率神经网络多特征分类预测分类效果代码功能算法流程程序设计参考资料分类效果 代码功能 该代码实现了一个基于**概率神经网络(PNN)**的多分类任务,核心功能如下: 数据预处理 读取Exce…...

spring-retry

学习链接 【SpringBoot】spring-retry(重试机制) 【Spring】Spring Retry CSDN有点可恶啊&#xff0c;拿着别人的文章&#xff0c;要开VIP才能看...

RTMP协议解析【二】

文章目录 RTMP协议解析【二】RTMP消息消息的格式Basic HeaderMessage HeaderExtended Timestamp RTMP协议解析【二】 本专栏重点负责介绍RTMP协议的理论部分&#xff0c; 跳过定义&#xff0c;协议与其他协议的优缺点对比&#xff0c;协议的拓展与改进&#xff0c;协议的历史发…...

WebGL2混合与雾

混合技术 一、混合基本技术 混合技术就是将两个片元调和&#xff0c;主要通过各种测试将准备进入帧缓冲&#xff08;源片元&#xff09;与帧缓冲中原有片元&#xff08;目标片元&#xff09;按照设定的比例加权计算出最终片元的颜色值 。 两种常用 组合 &#xff1a; 源因子…...

Windows Docker笔记-扩展

docker扩展知识点 开放容器端口 背景&#xff0c;有一个docker Centos7镜像&#xff0c;运行容器后&#xff0c;想要通过22端口远程这个容器 创建容器时开放映射端口&#xff0c;将容器的22端口映射到本地的22端口 docker run -p <宿主机端口>:<容器端口> 镜像名…...

【C++ Primer 学习札记】智能指针

1&#xff09;std::unique_ptr&#xff08;独占所有权&#xff09; 特点&#xff1a; 独占资源的所有权&#xff0c;同一时间只能有一个 unique_ptr 指向特定对象。 不可复制&#xff0c;但可以通过 std::move 转移所有权。 轻量级&#xff0c;几乎无额外开销&#xff08;与…...

【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 确定你硬件的关键点 案例分析 &#x1f50d; 一、关键代码分析 ✅ 1. power_save_…...

Taro Error: chunk common [mini-css-extract-plugin]

目录 一、问题描述 二、解决方案 一、问题描述 taro项目编译时抛出一下异常&#xff1a; Error: chunk common [mini-css-extract-plugin] Conflicting order. Following module has been added: * css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].oneOf…...

【深度学习】多目标融合算法(六):渐进式分层提取模型PLE(Progressive Layered Extraction)

目录 一、引言 二、PLE&#xff08;Progressive Layered Extraction&#xff0c;渐进式分层提取模型&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一…...

ping、tcpping、psping、paping、hping的区别

ping、tcpping、psping、paping、hping的区别 这些工具都是用于网络测试的&#xff0c;但它们在功能和协议上有所不同&#xff0c;适用于不同的场景。 ping 基本功能&#xff1a; 发送ICMP echo请求包&#xff0c;并等待接收echo应答包&#xff0c;从而判断网络是否连通&…...

【Redis8】最新安装版与手动运行版

1. 下载 Redis 百度网盘 2. 解压后直接运行 redis-server.exe 3. 使用安装版 双击 install_redis_service.bat 输入安装路径&#xff08;请提前创建好安装路径&#xff09;后直接回车下一步直接回车即可&#xff0c;因为是使用配置模板文件为默认解压出来的&#xff0c;然后…...

前端(小程序)学习笔记(CLASS 1):组件

1、小程序中组件的分类 小程序中的组件也是由宿主环境提供的&#xff0c;开发者可以基于组件快速搭建出漂亮的页面结构。官方把小程序的组件分为了9大类&#xff0c;分别是&#xff1a; * 视图容器&#xff0c;* 基础内容&#xff0c;* 表单组件&#xff0c;* 导航组件 媒体…...

Python MD5加密算法脚本

基本概念 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;用于将任意长度的数据转换为固定长度的哈希值&#xff0c;通常为128位&#xff08;16字节&#xff09;。 特点 不可逆性&#xff1a;无法从哈希值还原出原始数据。无论原始…...

Python数据分析实战:Pandas高效处理Excel数据指南

目录 引言&#xff1a;为什么选择Pandas处理Excel&#xff1f; 一、环境搭建与数据读取 1.1 基础环境配置 1.2 数据高效载入技巧 二、数据清洗核心战术 三、数据加工实战案例 3.1 销售数据透视分析 3.2 异常值检测 3.3 跨表关联分析 四、性能优化秘籍 4.1 大文件处理…...

使用Starrocks制作拉链表

5月1日向ods_order_info插入3条数据&#xff1a; CREATE TABLE ods_order_info(dt string,id string COMMENT 订单编号,total_amount decimal(10,2) COMMENT 订单金额 ) PRIMARY KEY(dt, id) PARTITION BY (dt) DISTRIBUTED BY HASH(id) PROPERTIES ( "replication_num&q…...

【npm】npm命令大全

掌握 NPM&#xff1a;前端与 Node.js 开发者必备命令大全 NPM (Node Package Manager) 无疑是现代 JavaScript 开发的基石。无论是前端项目还是 Node.js 后端服务&#xff0c;NPM 都扮演着管理依赖、执行脚本、发布模块等关键角色。熟悉并熟练使用 NPM 命令&#xff0c;能够极…...

最新版Chrome浏览器调用ActiveX控件技术——alWebPlugin中间件V2.0.42版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...

32核64G内存的物理机上,Netty理论能承载多少连接?

在 32核64G内存 的机器上&#xff0c;Netty 能承载的连接数取决于 业务场景、配置优化 和 操作系统调优。 以下是详细分析和实测数据参考&#xff1a; 1. 理论估算&#xff08;基于资源限制&#xff09; 资源影响内存每个连接占用 10KB~1MB&#xff08;取决于业务&#xff0…...

对于final、finally和finalize不一样的理解

目录 1、final 1.1、不可变性&#xff08;Immutability&#xff09; 1.2、内存可见性&#xff08;Visibility&#xff09; 1.3、初始化安全&#xff08;Initialization Safety&#xff09; 1.4、禁止重排序&#xff08;Reordering&#xff09; 1、静态常量 2、实例常量 …...

Open CASCADE学习|刚体沿曲线运动实现方法

在三维几何建模中&#xff0c;刚体沿参数化曲线的运动模拟是机械运动仿真、机器人路径规划等领域的核心需求。本文基于Open Cascade几何内核&#xff0c;系统阐述刚体沿曲线运动的实现方法&#xff0c;重点解析标架构建、坐标变换及鲁棒性控制等关键技术。 一、基于标架的刚体运…...

工作流引擎-03-聊一聊什么是流程引擎(Process Engine)?

前言 大家好&#xff0c;我是老马。 最近想设计一款审批系统&#xff0c;于是了解一下关于流程引擎的知识。 下面是一些的流程引擎相关资料。 工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#x…...

centos7 p8p1使用ip addr查看时有的时候有两个ip,有的时候只有一个ip,有一个ip快,有一个ip慢

在CentOS 7系统中&#xff0c;网络接口 p8p1 出现IP地址数量变化且访问速度不一致的问题&#xff0c;通常与以下原因相关。以下是逐步排查与解决方案&#xff1a; 1. 检查网络配置文件 可能原因&#xff1a;存在多个配置文件或重复配置&#xff08;如静态IP与DHCP冲突&#xf…...

回溯算法——排列篇

目录 一、全排列 二、全排列II 一、全排列 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<List<Integer>> resultnew ArrayList<>();LinkedList<Integer> pathnew LinkedList<>();boolean[] used;public List<…...

Unity中SRP Batcher使用整理

SRP Batcher 是一种绘制调用优化,可显著提高使用 SRP 的应用程序的性能,SRP Batcher 减少了Unity为使用相同着色器变体的材质准备和调度绘制调用所需的CPU 时间。 工作原理: 传统优化方法通过减少绘制调用次数提升性能,而SRP Batcher的核心理念在于降低绘制调用间的渲染状…...

【JAVA学习】泛型

传统方法不能对加入到集合ArrayList中的数据类型进行约束&#xff0c;遍历的时候需要进行类型转换&#xff0c;如果集合中的数据量较大&#xff0c;对效率有影响。泛型又称参数化类型&#xff0c;是JDK5.0出现的新特性&#xff0c;解决数据类型的安全性问题&#xff0c;在类声明…...

实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验

实验背景 流式细胞仪与微流控技术&#xff0c;为细胞及细胞核成像提供新的路径。传统流式细胞仪在细胞核成像检测方面存在检测通量低&#xff0c;荧光信号微弱等局限&#xff0c;故某光学重点实验室开发一种基于高灵敏度sCMOS科学相机并集成在自组荧光显微镜的微流控细胞核成像…...

MySQL中的JSON_CONTAINS函数用法

MySQL中的JSON_CONTAINS函数用于检查一个JSON文档&#xff08;目标&#xff09;是否包含另一个JSON文档&#xff08;搜索值&#xff09;。以下是其详细用法&#xff1a; 函数语法​ JSON_CONTAINS(target_json, search_json [, path]) ​target_json​&#xff1a;要检查的目…...

如何在 Windows 11 或 10 上将 DNS 更改为 Cloudflare提供的 DNS 服务

域名解析服务(DNS)对于互联网来说至关重要,因为它使我们能够轻松地通过在浏览器中输入域名来访问网站。DNS 的作用是将域名解析为 IP 地址;你可以将其视为互联网上的电话簿。这是因为互联网上的计算机或服务器是通过 IPv4 或 IPv6(数字格式)来识别的,然而,要用户去记住…...

解除diffusers库的prompt长度限制(SDXL版)

2025-5-21 注&#xff1a;本文只提供思路&#xff0c;没有解决“权重识别”、“BREAK”问题。 要想实现与webui一样的绘图效果与无限prompt&#xff0c;可参考diffusers/examples/community/lpw_stable_diffusion_xl.py 1、上代码 from diffusers import StableDiffusionXLP…...

RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头

视频讲解&#xff1a; RISC-V 开发板 MUSE Pi Pro CSI测试&#xff0c;一把点亮ov5647摄像头 手上正好有一颗ov5674&#xff0c;看了下接口排线都是一致的&#xff0c;硬件条件满足的情况下&#xff0c;剩下的就是驱动软件的问题&#xff0c;直接接上CSI排线 https://bianbu-li…...

Word2Vec模型学习和Word2Vec提取相似文本体验

文章目录 说明Word2Vec模型核心思想两种经典模型关键技术和算法流程优点和局限应用场景 Word2Vec提取相似文本完整源码执行结果 说明 本文适用于初学者&#xff0c;体验Pytorch框架在自然语言处理中的使用。简单了解学习Word2Vec模型&#xff0c;体验其使用。 Word2Vec模型 …...

[测试_3] 生命周期 | Bug级别 | 测试流程 | 思考

目录 一、软件测试的生命周期&#xff08;重点&#xff09; 1、软件测试 & 软件开发生命周期 &#xff08;1&#xff09;需求分析 &#xff08;2&#xff09;测试计划 &#xff08;3&#xff09;测试设计与开发 &#xff08;4&#xff09;测试执行 &#xff08;5&am…...