人脸识别之Hog特征+SVM分类器训练与使用

2023-05-16

原文来自:https://juejin.im/post/5b0e70686fb9a00a1451c8e7
计算机视觉—人脸识别(Hog特征+SVM分类器)

一、SVM支持向量机

1、SVM原理

在机器学习,支持向量机的监督学习模型与相关的学习算法可以分析用于数据分类和回归分析。给定一组训练样例,每个训练样例被标记为属于两个类别中的一个或另一个,SVM训练算法建立一个模型,将新的例子分配给一个类别或另一个类别,使其成为非概率二元线性分类器(尽管方法如Platt缩放存在以在概率分类设置中使用SVM)。SVM模型是将这些例子表示为空间中的点的映射,以便将各个类别的例子除以尽可能宽的明显差距。然后将新示例映射到同一空间中,并预测属于基于它们落在哪一侧的类别。

比如,我们有两种颜色的球在桌子上,我们要分开它们。

在这里插入图片描述
我们拿到一根棍子放在桌子上,是否完成得很漂亮?

在这里插入图片描述

有些贱人来了,桌子上放了更多的球,这种方法很有效,但其中一个球在错误的一边,现在可能有一个更好的地方放置棒。

在这里插入图片描述

SVM试图通过尽可能在棒的两侧留出尽可能大的间隙来将棒放置在最佳位置。

在这里插入图片描述

现在,当贱人回来时,棍子仍然是一个不错的位置。

在这里插入图片描述

SVM工具箱还有另一个更重要的技巧。贱人已经看到你用棍子有多好,所以他给了你一个新的挑战。

在这里插入图片描述

世界上没有任何棍棒可以让你分球,所以你会怎么做?你当然翻桌子!把球扔进空中。然后,用你的专业忍者技能,你抓住一张纸并将其滑入球之间。

在这里插入图片描述

现在,贱人站着看球,他们的球会看起来被一些弯曲的线条分开。

再之后,无聊的大人们,把这些球叫做 「data」,把棍子 叫做 「classifier」, 最大间隙trick 叫做「optimization」, 拍桌子叫做「kernelling」, 那张纸叫做「hyperplane」。

2、opencv的SVM参数

OpenCV 3.3中给出了支持向量机(Support Vector Machines)的实现,即cv::ml::SVM类,此类的声明在include/opencv2/ml.hpp文件中,实现在modules/ml/src/svm.cpp文件中,它既支持两分类,也支持多分类,还支持回归等,OpenCV中SVM的实现源自libsvm库。其中:

(1)、cv::ml::SVM类:继承自cv::ml::StateModel,而cv::ml::StateModel又继承自cv::Algorithm;

(2)、create函数:为static,new一个SVMImpl用来创建一个SVM对象;

(3)、setType/getType函数:设置/获取SVM公式类型,包括C_SVC、NU_SVC、ONE_CLASS、EPS_SVR、NU_SVR,用于指定分类、回归等,默认为C_SVC;

(4)、setGamma/getGamma函数:设置/获取核函数的γ参数,默认值为1;

(5)、setCoef0/getCoef0函数:设置/获取核函数的coef0参数,默认值为0;

(6)、setDegree/getDegree函数:设置/获取核函数的degreee参数,默认值为0;

(7)、setC/getC函数:设置/获取SVM优化问题的C参数,默认值为0;

(8)、setNu/getNu函数:设置/获取SVM优化问题的υ参数,默认值为0;

(9)、setP/getP函数:设置/获取SVM优化问题的ε参数,默认值为0;

(10)、setClassWeights/getClassWeights函数:应用在SVM::C_SVC,设置/获取weights,默认值是空cv::Mat;

(11)、setTermCriteria/getTermCriteria函数:设置/获取SVM训练时迭代终止条件,默认值是cv::TermCriteria(cv::TermCriteria::MAX_ITER + TermCriteria::EPS,1000, FLT_EPSILON);

(12)、setKernel/getKernelType函数:设置/获取SVM核函数类型,包括CUSTOM、LINEAR、POLY、RBF、SIGMOID、CHI2、INTER,默认值为RBF;

(13)、setCustomKernel函数:初始化CUSTOM核函数;

(14)、trainAuto函数:用最优参数训练SVM;

(15)、getSupportVectors/getUncompressedSupportVectors函数:获取所有的支持向量;

(16)、getDecisionFunction函数:决策函数;

(17)、getDefaultGrid/getDefaultGridPtr函数:生成SVM参数网格;

(18)、save/load函数:保存/载入已训练好的model,支持xml,yaml,json格式;

(19)、train/predict函数:用于训练/预测,均使用基类StatModel中的。

原文链接:http://bytesizebio.net/2014/02/05/support-vector-machines-explained-well/
公式链接:https://en.wikipedia.org/wiki/Support_vector_machine
SVM参数链接:https://docs.opencv.org/master/d1/d2d/classcv_1_1ml_1_1SVM.html

实例

svm_type()—— 指定SVM的类型:

参数:

C_SVC:C表示惩罚因子,C越大表示对错误分类的惩罚越大。
NU_SVC:和C_SVC相同。
ONE_CLASS:不需要类标号,用于支持向量的密度估计和聚类.
EPSILON_SVR:-不敏感损失函数,对样本点来说,存在着一个不为目标函数提供任何损失值的区域,即-带。
NU_SVR:由于EPSILON_SVR需要事先确定参数,然而在某些情况下选择合适的参数却不是一件容易的事情。而NU_SVR能够自动计算参数。

在这里插入图片描述

kernel_type()—— SVM的内核类型:

参数:

LINEAR:线性核函数(linear kernel)
POLY:多项式核函数(ploynomial kernel)
RBF:径向机核函数(radical basis function)
SIGMOID: 神经元的非线性作用函数核函数(Sigmoid tanh)
PRECOMPUTED:用户自定义核函数

train()

参数:

InputArray samples, 训练样本
int layout, 排版,参数:ROW_SAMPLE,每个训练样本是一行样本,COL_SAMPLE,每个训练样本占据一列样本
InputArray responses, 与训练样本相关联的响应向量

getDecisionFunction()

参数:

int i,决策函数的索引。如果解决的问题是回归,1类或2类分类,那么只会有一个决策函数,并且索引应该总是0.否则,在N类分类的情况下,将会有N(N- 1 )/ 2 决策功能。
OutputArray alpha, α	权重的可选输出向量,对应于不同的支持向量。在线性SVM的情况下,所有的alpha都是1。
OutputArray svidx, 支持向量矩阵内的支持向量索引的可选输出向量。在线性SVM的情况下,每个决策函数由单个“压缩”支持向量组成。

3、Demo

import cv2
import numpy as np
import matplotlib.pyplot as plt
#1 准备data
rand1 = np.array([[155,48],[159,50],[164,53],[168,56],[172,60]])
# 女生身高和体重数据
rand2 = np.array([[152,53],[156,55],[160,56],[172,64],[176,65]])
# 男生身高和体重数据

# 2 建立分组标签,0代表女生,1代表男生
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])

# 3 合并数据
data = np.vstack((rand1,rand2))
data = np.array(data,dtype='float32')

# 4 训练
# ml  机器学习模块 SVM_create() 创建
svm = cv2.ml.SVM_create() 

# 属性设置
svm.setType(cv2.ml.SVM_C_SVC) # svm type
svm.setKernel(cv2.ml.SVM_LINEAR) # line
svm.setC(0.01)

# 训练
result = svm.train(data,cv2.ml.ROW_SAMPLE,label)

# 预测
pt_data = np.vstack([[167,55],[162,57]]) #0 女生 1男生
pt_data = np.array(pt_data,dtype='float32')
print(pt_data)
(par1,par2) = svm.predict(pt_data)
print(par2)

结果:

[[167.  55.]
 [162.  57.]]
[[0.]
 [1.]]

二、Hog特征

方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。

HOG特征提取算法的实现过程:

HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):

1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

4)将图像划分成小cells(例如6*6像素/cell);

5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;

6)将每几个cell组成一个block(例如3*3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。

7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。

原文链接:https://blog.csdn.net/liulina603/article/details/8291093

三、DEMO

HOGDescriptor()

参数:

Size win_size=Size(64, 128),检测窗口大小。
Size block_size=Size(16, 16),块大小,目前只支持Size(16, 16)
Size block_stride=Size(8, 8),块的滑动步长,大小只支持是单元格cell_size大小的倍数。
Size cell_size=Size(8, 8),单元格的大小,目前只支持Size(8, 8)。
int nbins=9, 直方图bin的数量(投票箱的个数),目前每个单元格Cell只支持9个。
double win_sigma=DEFAULT_WIN_SIGMA,高斯滤波窗口的参数。
double threshold_L2hys=0.2,块内直方图归一化类型L2-Hys的归一化收缩率
bool gamma_correction=true,是否gamma校正
nlevels=DEFAULT_NLEVELS,检测窗口的最大数量

正样本:

在这里插入图片描述
负样本:

在这里插入图片描述

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 第一步:确定标准
PosNum = 820
# 正样本个数
NegNum = 1931
# 负样本个人
winSize = (64,128)
# 一个窗口(win)的大小是64x128
blockSize = (16,16) 
# 每个块的大小是16x16
blockStride = (8,8) 
# 每个块的步长是8x8
# 一个窗口有((64-16)/8+1)*((128-16)/8+1) = 7*15 = 105个块(block)
cellSize = (8,8)
# 每个胞元的大小是8x8
# 一个块(block)有 (16/8)*(16/8) = 4胞元(cell)
nBin = 9 
# 一个胞元有 9 个bin,表示每一个胞元对应的向量就是9维
# 窗口对应的一维特征向量维数n = 105 * 4 * 9 = 3780
# hog+svm检测行人,最终的检测方法是最基本的线性判别函数,wx + b = 0,刚才所求的3780维向量其实就是w,而加了一维的b就形成了opencv默认的3781维检测算子

# 第二步:创造一个HOG描述子和检测器
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nBin)
# 第三步:启动SVM分离器
svm = cv2.ml.SVM_create()

# 第四步:计算Hog
featureNum = int(((128-16)/8+1)*((64-16)/8+1)*4*9)
# 窗口对应的一维特征向量维数n
featureArray = np.zeros(((PosNum+NegNum),featureNum),np.float32)
# 创建Hog特征矩阵
labelArray = np.zeros(((PosNum+NegNum),1),np.int32)
# 创建标签矩阵

# 给图片样本打标签,正样本是1,负样本是-1
for i in range(0,PosNum):
    fileName = 'pos/'+str(i+1)+'.jpg'
    # 导入正样本图片
    img = cv2.imread(fileName)
    hist = hog.compute(img,(8,8))
    # 每个hog特性的维数是3780
    for j in range(0,featureNum):
        featureArray[i,j] = hist[j]
    # featureArray装载hog特征, [1,:]代表hog特征1, [2,:]代表hog特征2
    labelArray[i,0] = 1
    # 正样本的label是 1
    
for i in range(0,NegNum):
    fileName = 'neg/'+str(i+1)+'.jpg'
    img = cv2.imread(fileName)
    hist = hog.compute(img,(8,8))
    for j in range(0,featureNum):
        featureArray[i+PosNum,j] = hist[j]
    labelArray[i+PosNum,0] = -1
    # 负样本的label是 -1
    
# SVM属性设置    
svm.setType(cv2.ml.SVM_C_SVC)
# SVM模型类型:C_SVC表示SVM分类器,C_SVR表示SVM回归
svm.setKernel(cv2.ml.SVM_LINEAR)
# 核函数类型: LINEAR:线性核函数(linear kernel),POLY:多项式核函数(ploynomial kernel),RBF:径向机核函数(radical basis function),SIGMOID: 神经元的非线性作用函数核函数(Sigmoid tanh),PRECOMPUTED:用户自定义核函数 
svm.setC(0.01)
# SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C,C表示惩罚因子,C越大表示对错误分类的惩罚越大

# 第六步:训练函数
ret = svm.train(featureArray,cv2.ml.ROW_SAMPLE,labelArray)

# 第七步:检测 (1、创建myhog,参数myDeteect)
alpha = np.zeros((1),np.float32)
# 权重的可选输出向量
rho = svm.getDecisionFunction(0,alpha)
# 检索决策函数。
print(rho)
print(alpha)

alphaArray = np.zeros((1,1),np.float32)
supportVArray = np.zeros((1,featureNum),np.float32)
resultArray = np.zeros((1,featureNum),np.float32)
alphaArray[0,0] = alpha
resultArray = -1*alphaArray*supportVArray

myDetect = np.zeros((3781),np.float32)
for i in range(0,3780):
    myDetect[i] = resultArray[0,i]
myDetect[3780] = rho[0]
# myDetect是3781维,其中3780维来自resultArray,最后一维来自rho

myHog = cv2.HOGDescriptor()
myHog.setSVMDetector(myDetect)

# 第八步:导入待检测图片的加载 
imageSrc = cv2.imread('Test2.jpg',1)
# 加载待检测图片
objs = myHog.detectMultiScale(imageSrc,0,(8,8),(32,32),1.05,2)
# 检测图片
x = int(objs[0][0][0])
y = int(objs[0][0][1])
w = int(objs[0][0][2])
h = int(objs[0][0][3])
# 原始坐标(x,y),宽w,高h

# 第九步:绘制展示
cv2.rectangle(imageSrc,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('dst',imageSrc)
cv2.waitKey(0)

待检测图片:

在这里插入图片描述

结果:

(0.19296025963377925, array([[1.]]), array([[0]], dtype=int32))[0.]

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人脸识别之Hog特征+SVM分类器训练与使用 的相关文章

  • Apache2 配置 HTTPS

    文章目录 自签名 CA 证书服务器部署 HTTPS客户端验证Https 原理 常见问题参考 自签名 CA 证书 生成密钥 使用 128 位的 RSA 算法生成的密钥 xff0c 4096 是密钥的长度 xff0c 建议使用 4096 或以上
  • WPF .Net5 caliburnmicro初始化

    貌似nuget没有提供 Net5的Starter模版 xff0c 因此记录一下初始化工程的流程 下载Cal Nuget 搜索Caliburn 下载4 0 173版本 向工程添加ViewModels和Views文件夹 添加ViewModel
  • MSF手机渗透实验(未成功)(CVE-2019-2215 Binder UA)

    1 前言 最近想利用metasploit对手机进行依次渗透实验 通过查看最近三年的安卓漏洞 xff0c 我对CVE 2019 2215这个漏洞很感兴趣 幸运的是 xff0c metasploit里就有这个漏洞的攻击payload xff0c
  • Socket缓冲区大小修改与系统设置

    每个Socket在Linux中都映射为一个文件 xff0c 并与内核中两个缓冲区 xff08 读缓冲区 写缓冲区 xff09 相关联 或者说 xff0c 每个Socket拥有两个内核缓冲区 有时 xff0c 我们需要修改缓冲区的内核限制的最
  • Java-两个较大的List快速取交集、差集

    工作中经常遇到需要取两个集合之间的交集 差集情况 xff0c 但是普通的retainAll 和removeAll 无法满足数据量大的情况 xff0c 由此就自己尝试运用其他的方法解决 注 xff1a 如果数据量小的情况下 xff0c 还是使
  • CUDA程序安装失败原因及解决方案

    安装教程可以看别人的 xff0c 都差不多 一 GPU和所选cuda版本不兼容 建议先确认自己的GPU是否支持CUDA xff0c 我卑微的950是支持的 再查看自己显卡适配的cuda版本 xff0c 一般来说无差别 二 没有VS 若电脑没
  • Docker 学习(十一)编写Dockerfile

    目录 1 常用指令讲解2 制作Hello World的Dockerfile3 制作 jar包的Dockerfile 1 常用指令讲解 FROM 镜像 版本 xff1a 指定所依赖的基础镜像 RUN lt 命令行命令 gt xff1a 等同于
  • 5G/NR 5G核心网(5GC)之基本概念

    系列文章目录 5G NR 5G核心网 5GC 之网络功能和实体 5G NR 5G核心网 5GC 之非漫游参考架构 5G NR 5G核心网 5GC 之漫游参考架构 5G NR 5G核心网 5GC 之网络功能服务通信 第五代移动通信系统 5G
  • 5G/NR 5G核心网(5GC)之漫游参考架构

    系列文章目录 5G NR 5G核心网 5GC 之基本概念 5G NR 5G核心网 5GC 之网络功能和实体 5G NR 5G核心网 5GC 之非漫游参考架构 5G NR 5G核心网 5GC 之网络功能服务通信 1 5GS漫游参考架构 5G架
  • axure 表格自适应界面

    思路和效果如下图 xff1a 在给定宽度 xff08 all from xff09 内 xff0c 给列表百分比宽度 xff0c 后续修改中 xff0c 只需要修改all from xff0c all from y xff0c 既可调整大小
  • STM32MCU量产工具:STM32 Batch Programmer

    写在最前面 由于本人从事嵌入式开发 xff08 STM32方向 xff09 xff0c 公司产品多数都为STM32芯片 xff0c 面对批量芯片烧录工作实在麻烦 xff08 未送寄焊厂烧录 xff09 xff0c 于是本人根据公司 同事及自
  • QNX 7.1 交叉编译 boost 1.76

    配置 QNX 编译环境 假如 QNX 7 1 SDP 的路径为 work sdk qnx710 xff0c 使用 source 命令让 qnx 环境变量生效 xff1a span class token builtin class name
  • 创建自签名数字证书PFX格式

    创建自签名数字证书PFX格式 1 在系统中安装一个自签名数字证书 1 1 安装makecert exe xff0c 可直接安装Visual Studio xff08 Visual Studio包含makecert exe xff09 1 2
  • E5 调用API续订服务:Microsoft 365 E5 Renew X

    Microsoft 365 E5 Renew X Microsoft 365 E5 Renew X是一款网页版的E5续订服务 xff0c 其依赖网页浏览器呈现支持用户多端操作 xff0c 完全将E5账户API调用托管在了服务器端因此用户无需
  • ARM Cortex-M3 深度研究 - 慎用 volatile 关键字修饰 double longlong 等64位长度类型的变量

    ARM Cortex M3 深度研究 慎用 volatile 关键字修饰 double longlong 等64位长度类型的变量 导语 大家在做嵌入式项目的时候应该都使用过volatile关键字来修饰访问比较频繁的变量 volatile关键
  • 综合项目之闪讯破解(二)之 如何用C++建立PPPOE连接

    如何用C 43 43 建立PPPOE连接 之前我们把闪讯拨号的真实用户名通过特定算法得到了 xff0c 密码闪讯是没有加密的 xff0c 因此我们接下来就是建立一个PPPOE连接 通过程序代码建立PPPOE连接的方法有大概这么几种 xff1
  • 综合项目之闪讯破解(三)之 如何用C++实现PPPOE拨号

    如何用C 43 43 实现PPPOE拨号 1 xff09 CMD命令行方式 拨号本是一件很简单的事情 xff0c CMD命令行直接搞定 xff0c 但我在第一篇文章中提到过 xff0c 闪讯的真实用户名的前两位是换行符 n 和 r xff0
  • 综合项目之闪讯破解(四)之 如何用C++编写可被C#调用的Dll

    如何用C 43 43 编写可被C 调用的Dll 之前的三篇文章已经将闪讯的算法以及PPPOE拨号的关键函数全部用C 43 43 实现了 xff0c 但C 43 43 写界面比较繁琐 xff0c 本身我擅长C 所以决定用C 写界面 xff0c
  • 综合项目之闪讯破解(五)之 如何用C#调用C++编写的Dll

    如何用C 调用C 43 43 编写的Dll 上一篇文章我们提到了C 与C 43 43 DLL的联合项目的好处 xff0c 并且成功编写了一个求和函数的C 43 43 Dll 接下来继续用C 调用这个Dll 1 xff09 用VS建立一个C
  • MBR+BIOS与GPT+UEFI启动系统的区别

    MBR 43 BIOS与GPT 43 UEFI启动系统的区别 近些年来许多电脑厂商的出厂电脑都自带系统 xff0c 这些电脑的分区看起来和我们一般的组装机电脑的分区有些不同 xff0c 它除了有一个系统主分区之外在主分区之前还有3个小分区

随机推荐

  • 如何装GPT+UEFI / MBR+BIOS的系统

    本文将深度讲述装机步骤与原理 xff0c 解决装机过程中遇到的各种问题 xff0c 使用不同的方式装机 本文所有的装机方式笔者都亲自尝试过 xff0c 所有重装步骤不会损毁除系统盘外其他分区文件 这是笔者总结许久的装机经验 xff0c 本文
  • 综合项目之闪讯破解(六)之 如何解决程序/C++Dll的兼容性问题

    如何解决程序 C 43 43 Dll的兼容性问题 本文将尝试解决程序与DLL在不同客户机上运行存在的兼容性问题 前言 前面的五篇文章已经将程序的核心部分全部搞定 xff0c 由于我们调用了一些系统API xff0c 所以这很有可能导致程序在
  • Ubuntu 修改 apt 源为阿里云源

    文章目录 软件源 Software Source使用说明图形界面 xff08 新手推荐 xff09 手动修改配置文件 相关链接 软件源 Software Source 软件源是指用于存储各种 Linux 应用程序的存储库 xff0c 包括自
  • C#如何自绘滚动条控件

    C 如何自绘滚动条控件 滚动条样式 普通情况 鼠标位于滑块上面 鼠标按下滑块 程序变量与函数层级图 垂直滚动条代码 不讲如何编写了 代码上面有注释 直接上代码片了 span class hljs comment 自定义控件 xff1a 垂直
  • TeeChart WPF DLL消除水印

    TeeChart WPF DLL消除水印 准备工作 Steema TeeChart for NET 2017 Evaluation 4 1 2017 03147 DNSPY X86 一些代码 xff1a Texts ExpireMsg1 W
  • polybar基础使用

    如果不喜欢i3或者其他桌面系统的默认状态栏 xff0c polybar还是一个不错的选择 基本上 xff0c 所有的流行的Linux发行版都可以用包管理器直接进行polybar的安装 ArchLinux可以使用yay或者其他AUR工具安装
  • ArchLinux图形界面安装与美化:i3+polybar

    arch只提供了tty xff0c 我们需要自己配置一个漂亮的桌面 你可以选择继承好的GNOME Deepin等桌面 但是他们都包含了许多你可能并不能用到的工具和插件 i3wm是一个窗口管理器 xff0c 它提供了最基础的窗口管理功能 你可
  • ceph学习(1)——手动部署ceph分布式存储集群(使用本地源离线安装),一次成功!!

    手动搭建适合已经使用自动部署工具成功搭建了集群 xff0c 想加深对ceph理解的同学 xff0c 手动搭建ceph可以更灵活的配置ceph集群 xff0c 现在就开始吧 xff01 xff01 一 环境准备 1 服务器配置 xff1a 三
  • iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上

    span class hljs pp span class hljs params style color rgb 102 0 102 void span touchesBegan span class hljs params style
  • SQL Server解析Json格式数据

    主要介绍5个函数 xff1a openJson 打开Json字符串IsJson 判断一个字符串是不是合法的Json格式 是返回1 xff0c 否返回0 xff0c null返回null Json Value 从Json字符串中提取值 Jso
  • openwrt 无线桥接(AP)

    无线桥接常见的有三种模式 1 AP模式 AP模式其实是Access Point的简称 xff0c 意思是 xff1a 访问接入点 而无线网桥的AP模式 xff0c 也就是利用无线网桥做无线信号的接入点了 那么 xff0c 究竟是什么东西接入
  • macOS下使用anaconda相关系列

    创建虚拟环境 conda create n 环境名 python 61 3 6 进入虚拟环境 source bash profile source activate 环境名 其中bash profile是安装anaconda时候默认生成的环
  • Windows 安装NET4.6/4.7/4.8 时间戳签名和或证书无法验证或已损坏

    时间戳签名和或证书无法验证或已损坏 问题版本 xff1a 事件 xff1a 解决办法下载补丁程序 xff1a 安装KB2813430补丁 注意事项补丁需要重启设备生效 2021 10 11 by 崔斐然 问题 版本 xff1a win7专业
  • 在 Ubuntu Linux 中使用 PPA(完全指南)

    译 xff1a 在 Ubuntu Linux 中使用 PPA xff08 完全指南 xff09 作者 xff1a Abhishek Prakash 自由和开放源码软件的创造者 一个热心的 Linux 用户和开源推动者 从阿加莎 克里斯蒂和夏
  • RDP(远程桌面)优化

    RDP连接优化 一 优化连接时间二 优化集显帧率三 开启RemoteFX USB重定向 xff08 如果有需要 xff09 四 MacOS系统RDP超高清显示 2022 03 31 by 崔斐然 一 优化连接时间 1 客户端 xff1a 关
  • 【FRP】windowsServer部署FRP

    FRP windowsServer部署FRP 1 下载FRP nssm2 服务器端部署过程 xff1a 3 客户端部署过程 xff1a 4 卸载服务 2022 08 24 by 崔斐然 1 下载FRP nssm 下载地址 xff1a FRP
  • 【FRP】群晖docker中部署Frp

    2022 08 24 by 崔斐然 0 xff1a 需求 公司有台笔记本 xff0c 现在疫情期间居家办公 我用的MacBook RDP客户端做的非常好用 xff0c 如相互粘贴文件 文字等 xff0c MacBook通过远程桌面连接公司内
  • Debian 9/10快速开启Google BBR的方法,实现TCP高效单边加速

    BBR 是谷歌公司的某个员工研发出来的服务器单边加速算法 xff0c Linux内核从4 9版开始集成BBR算法 相比锐速BBR的加速效果更为温和 xff0c 并且占用内存小对服务器压力也很小 xff0c 当时理想情况下是可以跑满整个服务器
  • 基于机器学习的捡球机器人设计与实现(探索)第4篇——机械设计)

    2019 03 18 by 崔斐然 原以为软件很复杂 机械好搞 结果发现 都难搞 一次次想出办法又一次次被自己否定 我tm想静静
  • 人脸识别之Hog特征+SVM分类器训练与使用

    原文来自 xff1a https juejin im post 5b0e70686fb9a00a1451c8e7 计算机视觉 人脸识别 xff08 Hog特征 43 SVM分类器 xff09 一 SVM支持向量机 1 SVM原理 在机器学习