您正在找的激活码我已经准备好了,最新激活教程请移步至:https://sigusoft.com/99576.html
CLion 2023.1.4最新安装激活教程(此版本之前的也适用, 适用于Windows和linux, mac可能可以,博主没有测试环境),此方法采用补丁+激活码的方式进行激活成功教程激活,适用于新的版本,以前的无限时间重置插件在2021.2,2之后就不能再使用了。
其激活成功教程原理是暴力拦截了 Jetbrains 的剩余使用期网络请求,实际上等于永久激活,至于激活到哪天,在之前的 2021.3.3 2021.3.2 等老版本中是可以手动配置的,比如改成激活到 2099 年。可能是太高调了,最新的版本只能显示到 2025 年。
CLion介绍
CLion是一款专业的C/C++集成开发环境,由JetBrains公司开发和维护。CLion提供了强大的代码编辑、调试、重构、测试和分析功能,支持多种编译器和构建系统,以及跨平台的开发和远程开发。CLion还集成了许多流行的工具和框架,如CMake、Google Test、Boost等,帮助开发者提高生产力和代码质量。
与Visual Studio相比,CLion跨平台,且要更轻量一些;而与Vscode相比,CLion使用起来更简单,重构功能更强大。
软件安装
https://www.jetbrains.com/clion/download/#section=windows
根据操作系统选择即可。
激活包下载
激活文件
下载后,解压,为了避免出问题,目录中不要含有中文。
(文件和步骤有更新,之前下载无法激活的再下载一下)
激活过程
找到软件的安装位置,windows下默认在:
C:Program FilesJetBrainsCLion 2023.1.3bin
其他操作系统同理。
修改clion64.exe.vmoptions(linux下,为clion64.vmoptions),在末尾加上:
其中路径D:jetbra修改为激活包的解压路径。例如解压到了C:jetbra目录,则-javaagent:C:jetbraja-netfilter.jar=jetbrains
双击运行激活成功教程包script下的install-current-user.vbs(linux, mac下运行sudo bash https://blog.xiaobaicai.fun/share/install.sh),等待出现Done窗口。
启动软件,进入激活界面,选择激活码激活,粘贴激活成功教程包中的激活码:
Activate, 激活成功:
对CodeWithMe进行同样的激活操作。
注意激活界面不要登陆自己的Jetbrains账号,新版本的Jetbrains软件试用会要求登陆,如果登陆了就在激活界面logout
特别说明
Jetbrains现在使用Gateway来支持远程开发,在使用Gateway来进行远程开发时,我们要激活Gateway, 而不是远端的IDE backend,否则我们会发现激活了远端的,远程开发的时候还是显示没有激活。激活Gateway的方法与Clion是一样的,可以直接用CLion的激活码。
续docker日常使用指南
背景
当我们开始使用docker后,我们的机器上镜像和容器会越来越多,或者有时候我们有多台开发机的时候,单纯使用命令行去管理镜像和容器就变得麻烦了,这时,我们就可以选择一些可视化的容器管理工具来保护我们为数不多的头发了。portainer.io就是这方面的一个不错的选择,它有社区版和商业版,质量相对有保证,对于我们个人,使用社区版足矣。
安装
portainer.io安装很容易,可以直接用docker启动:
使用
浏览器输入https://ip:9443即可打开管理页面,首次打开输入用户和密码。
若忘了密码,可以通过以下步骤找回:
得到输出中的Source字段,如:
执行以下操作:
会输出临时的密码,登陆后,到网页修改:
页面中local即为我们部署portainer服务器的情况,点开展示详情:
例如点开容器的详情,我们可以对容器执行启动、停止、删除等操作。对于镜像可以进行删除等操作。
除了对已有的容器进行操作,还可以在容器页面“Add container”,通过页面创建新的容器,在Images页面“Build new image”,通过在页面写Dockerfile来创建新的镜像。在单机上可能没什么太大用,还不如去命令行来的快。不过如果要控制服务器的权限,不允许直接登录到目标服务器的话或者有多台服务器要管理的话,应该会方便些,暂时没有这方面需要,所以也没有去尝试了。
结语
有了portainer,我们可以方便的管理服务器上的容器和镜像,特别是有多台服务器的时候,可以免去一台台的去机器上看,更多高级用法,可以去官网文档查看:Introduction – Portainer Documentation
- 摘要
- 源码及完整报告:
- 词袋(Bag of Words, BoW)
- 基于词袋模型的图片分类基本流程
- 多尺度空间极值点检测
- 关键点精确定位
- 关键点主方向计算
- 生成描述子
- 特征词典的生成
- SVM分类器
- 实验结果
- 总结
- 参考文献
- 源码及完整报告:
摘要
虽然现在已经是深度学习的时代了,传统的机器学习方法日渐甚微,不过有些算法还是有着旺盛的生命力,比如SIFT、SVM,在一些深度学习算法中也能看到它们的影子。这些人工设计的经典特征和分类器可以让我们感受到那个时代计算机视觉的魅力。互联网上,需要处理识别的图像越来越多,为此图像分类搜索引擎所需的分类能力要求越来越高,在图像处理领域内也成为越来越热点的课题。对目标进行分类是人类的天生能力,对于计算机,现实世界的呈现方式大多是以图片的方式(视频本质上也是图片)输入,因而图片的分类是实现人工智能的重要部分。词袋模型是基于自然语言模型而提出的一种文档描述方法,被广泛研究用于图像的分析和处理中。本文介绍了一种基于词袋的图片分类方法,首先提取图片的SIFT特征通过聚类得到“视觉词典”,然后统计词频获得突破的词袋描述,最后通过SVM进行有监督的图片分类。
源码及完整报告:
算法使用C++ MFC实现,基于OpenCV。
https://mbd.pub/o/bread/ZJuTlZ5u 总结不易,感谢支持
词袋(Bag of Words, BoW)
在图片的分类中首先需要解决的是对图像的描述,最初对图像的描述是直接利用图片的颜色信息,但是图像的色彩往往随着光强,物体方向等变化而变化,因此鲁棒性很差。现在的方式是在图片中提取能够表征图片全局或局部的特征作为对图像的描述,从而使得得到的图像描述具有光照不变性、旋转不变性、尺度不变性等特性。然而这种直接基于图像底层基础上的特征不含有语义信息,无法完成对图像生成语义的理解。而基于词袋的图像描述则在一定程度上解决了这一问题。
词袋模型最先是由Josef等基于自然语言处理模型而提出的。在这种模型中,文本(段落或者文档)被看作是无序的词汇集合,忽略语法甚至是单词的顺序。词袋模型的原理非常简单,词袋模型是文本的简化描述模型。在此模型中, 文本(x_{1} ,x_{2},x_{3}) 被表达成无序的单词组合,不去考虑语法与词序。以文本为例,如果一个文本(X)表示一连串有顺序的词的排列,那么机器对于(X)的识别其实就是计算出它在所有文本词语中出现的可能,也就是概率为多个词语概率的相乘如(p(X)=p(x_{1})*p(x_{2}|x_{1})*p(x_{3}|x_{2})…p(x_{n}|x_{n-1})),而词袋模型就是这种文本模型的特例,即(x_{k}) 出现的概率与前面的文本无关,故有(p(X)=p(x_{1})*p(x_{2})*…p(x_{n})) 成立。
类比一篇文章由很多文字 (textual words) 组合而成,如果將一張图片表示成由许多 视觉单词(visual words) 组合而成,就能将过去在文本检索(text retrieval)领域的技巧直接利用在图像检索(image retrieval)中,以文字检索系统现在的效率,图像表示的“文字化”也有助于大规模(large-scale)图像检索系统的效率。
词袋模型中关键的一步是要生成词典,对图片来说即是要生成“视觉词典”,而这首先需要提取图片的特征形成图片特征描述子集合,然后通过聚类的方式形成视觉单词,从而形成视觉词典。再统计待分类图片的词频,通过分类器即可实现对图片的分类或高级语义的理解。
基于词袋模型的图片分类基本流程
如引言所述,基于词袋的模型首先需要要在大量的已知类别的训练图片集中提取图片特征形成多个预选词,然后通过聚类形成视觉词典,然后通过词典统计图片的词频从而形成图片的基于视觉词典的特征描述。将得到图片词袋描述及其类别作为输入训练分类器。分类时,首先提取待分类图片的特征,然后形成图片的词袋描述,将描述输入到训练得到的分类器,即可得到待分类图片的类别
特征提取是形成词袋的关键一步,也是一个研究的热点。目前比较著名的特征提取方法主要有HoG,SIFT,LBP等方法。SIFT(Scale-Invariant Feature Transform),即尺度不变特征最早于1999年由David Lowe 提出,并在2004年进一步改进。SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。SIFT特征提取通过尺度空间极值检测、关键点定位、主方向确定、关键点描述四步最终形成128维的具有多种不变特性的特征点,能够很好的表征图片的局部特征。这些不变性使得SIFT成为目前最火的特征提取算法之一。
尽管有计算复杂度高的不足,SIFT算法仍然是性能最好、应用最广泛的基于局部特征的图像特征提取方法。因而本文在特征提取部分选取SIFT算法作简要介绍。
SIFT特征提取通过尺度空间极值检测、关键点定位、主方向确定、关键点描述四步最终形成128维的具有多种不变特性的特征点。
多尺度空间极值点检测
SIFT要查找的点是一些十分突出的点,这些点不会因光照条件改变,尺度变化等环境变化而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。要保证尺度不变性,首先要保证提取出的特征点不因目标的尺度变化而变化。这个可以通过建立尺度空间来完成。
尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。
高斯核是唯一可以产生多尺度空间的核,一个图像的尺度空间(L(x,y,delta )) 定义为原始图像(I(x,y)) 与一个尺度可变的2维高斯函(G(x,y,delta)) 的卷积运算。
]
]
其中((x,y))是尺度空间坐标,({delta}) 代表尺度,决定图像的平滑程度,值越大图像越粗糙(模糊),反之越精细。通过卷积运算,一幅图像可以生成图2所示的高斯金字塔空间,这个空间由几塔(octave)图像组成,一塔图像包括几层(interval)图像。同塔图像大小一致,尺度不同,塔间图片是降采样的关系。
通过上面的操作,得到了塔数为O,塔内层数为S+3的高斯金字塔。LoG(Laplacian of Gaussian) 算子能够很好的找到图像中的兴趣点,但是需要大量的计算。而DoG(Difference of Gaussian)算子与LoG算子由直接关系,且计算量很小,所有可以用来代替LoG来进行兴趣点的查找。DoG:
]
通过DoG可以得到尺度空间的差分高斯金字塔
差分高斯金字塔
关键点查找
生成了DoG高斯金字塔,就可以在该尺度空间检测极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。如图3。
通过上面的步骤,就可以粗略的检测到图像中的关键点。
关键点精确定位
以上极值点的搜索是在离散空间中进行的,检测到的极值点并不是真正意义上的极值点。同时还要去除低对比度和边界响应这些不稳定的关键点。
通过关键点周围点的信息拟合三维二次函数可以精确确定关键点的位置, DoG函数在图像边缘有较强的边缘响应,而一旦特征落在图形的边缘上,这些点就是不稳定的点,因此还需要排除边缘响应。这一点可以通过Hessian矩阵完成。
关键点主方向计算
上一节中确定了每幅图中的特征点,为每个特征点计算一个方向,依照这个方向做进一步的计算, 利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。
首先在与关键点尺度相应的高斯图像(L(x,y,delta)) 上计算关键点领域窗口内像素点的梯度幅度和方向:
]
]
上式中,(m(x,y))和 ( heta(x,y))分别为高斯金字塔((x,y))处梯度的大小和方向。
然后用直方图统计领域像素的梯度方向和幅值,梯度直方图的范围是0~360度,其中,每10度一个柱,共36个柱。直方图的主峰值(最大峰值)代表了关键点处邻域梯度的主方向,即关键点的主方向。
关键点主方向计算
至此,图像的关键点已检测完毕,每个关键点有三个信息:位置、尺度、方向;同时也就使关键点具备平移、缩放、和旋转不变性。
生成描述子
描述的目的是在关键点计算后,用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点。用来作为目标匹配的依据,也可使关键点具有更多的不变特性,如光照变化、3D视点变化等。
描述子生成图示
首先,将坐标轴旋转到关键点的主方向。只有以主方向为零点方向来描述关键点才能使其具有旋转不变性。
其次,以关键点为中心取1616的窗口。然后计算每个44的小块上计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值(高斯加权),即可形成一个种子点。每个种子点有8个方向向量信息。
这样就可以对每个特征点形成一个448=128维的描述子,每一维都可以表示4*4个格子中一个的scale/orientation. 将这个向量归一化之后,就进一步去除了光照的影响。
这个128维的描述向量就可以用于图像匹配等应用中了。
特征词典的生成
上一节得到的SIFT特征点即是预选的“视觉单词”,当提取了若干特征点后,其数量往往巨大,而且特征点是局部特征。但是在庞大的特征数据库中,仅仅几个单一的特征点无法完成图像描述的重大任务。此时,聚类就显得格外重要,它将大量相似的128维特征向量通过一定的规则进行整合,寻找出若干相似的特征点聚为一类作为词典中的一个词,以此来代表一类特征点,方便后期的图像描述,增加描述的可信度,提高描述的速度。
K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。其算法过程如下:
1)从N个文档随机选取K个文档作为质心
2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类
3)重新计算已经得到的各个类的质心
4)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束。
经过K-means聚类,图片中提取出的SIFT特征就形成了对应的视觉词典。
SVM分类器
通过聚类得到的词典,即可将图片的特征转化为对应的词频表(如统计直方图)。这样每幅图片就可以用一个词典向量来表示了,然后将这些向量作为分类器的输入进行训练即可得到分类器。本文中选择的是SVM(支持向量机)进行分类。
支持向量机(英语:Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。
支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。建立方向合适的分隔超平面使两个与之平行的超平面间的距离最大化。其假定为,平行超平面间的距离或差距越大,分类器的总误差越小。支持向量机通过学习已知样本来获得决策边界,来完成对未知样本的分类。这种学习是有监督的学习。
本文中训练时,是将多类问题看作二类问题,即训练某类时以此类为正样本,其它类为负样本。测试时,计算测试样本分作某一类的概率,取最大概率的分类为测试样本的类别。
利用决策边界进行有监督分类
实验结果
测试图片使用corel图片库,选择了其中5个类别各20张图作为训练集训练分类器,并选择同类别各20张作为测试集测试分类的准确性。并且与K阶最近邻分类器作对比(取K为9)。测试平台为T6600CPU,系统为WINDOWS8.1。
训练图片集
表2 测试图片集
测试时通过加大Kmeans聚类的类数可以达到不同的效果,基本上Kmeans类数越大,SVM分类的效果越好。这也很容易理解,K-means聚类个数即代表了生成的词典中词的个数,词数越多,对图像的描述更精确。但随着词数的增加,字典的生成时间会增加。
2者的关系如下表:
由表可以看出,对比KNN分类,SVM在单词个数不太小时,都会好于KNN,并且在单词数较大时,效果远好于KNN的分类,准确率达到了94%。
总结
本文介绍了一个典型的基于词袋和SVM分类器的图片分类方法。基于词袋的图片分析技术由于具有对图片进行语义理解的潜力,因此得到广泛研究。SVM分类器也是目前非常火热的分类方法之一。实验结果表明,二者结合用于图片的有监督分类可以得到很好的效果。但由于词袋没有考虑词的顺序,对于图片也就是没有考虑特征的空间分布信息,因而还有待改进,也有人提出了Spatial pyramid matching方法进行分尺度,分块的处理,得到了一定改善,但仍有待研究。
参考文献
[1] Lowe, David G. “Distinctive image features from scale-invariant keypoints.” International journal of computer vision 60.2 (2004): 91-110.
[2] Wallach, Hanna M. “Topic modeling: beyond bag-of-words.” Proceedings of the 23rd international conference on Machine learning. ACM, 2006.
[3] Dalal, Navneet, and Bill Triggs. “Histograms of oriented gradients for human detection.” Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on. Vol. 1. IEEE, 2005.
[4] Chang, Chih-Chung, and Chih-Jen Lin. “LIBSVM: a library for support vector machines.” ACM Transactions on Intelligent Systems and Technology (TIST) 2.3 (2011): 27.
[5] Tong, Simon, and Edward Chang. “Support vector machine active learning for image retrieval.” Proceedings of the ninth ACM international conference on Multimedia. ACM, 2001.
源码及完整报告:
算法使用C++ MFC实现,基于OpenCV。
https://mbd.pub/o/bread/ZJuTlZ5u
前言
除了本地开发外,还有一种常见的开发方式就是远程开发,一般情况是一台Windows或mac笔记本作为日常使用的电脑,另有一台linux服务器作为开发服务器。开发服务器的性能往往较强,这样远程开发的方式一方面可以让我们在习惯的系统下工作,又能利用强大的服务器,而且linux下开发python往往比win下要方便得多。
现阶段,使用比较广泛的python开发工具是Pycharm和VSCode(Jupyter Notebook/Lab也有一些人用,不过本人还是认为做做验证可以,真的做日常开发还是不太方便),下面就以这2个工具分别介绍他们的远程开发的方式,可以按需选择。
Pycharm
Pycharm应该可以算是最强大的python IDE了,但与它强大的本地开发能力相比,它的远程开发能力一般,特别是以前,它的远程开发实际基于SFTP, 远程目录和本地目录不断进行同步,这种方式使用起来麻烦,严格来说算不上真的远程开发。后来Jetbrains又搞起了Projector,顾名思义就是把远程IDE投射到本地,再后来,Projector停止开发了,转而开发Gateway…才有点向VSCode的远程开发看齐的意思了。
SFTP方式
这个方式的使用可以参考在PyCharm上配置SFTP并使用远程解释器-腾讯云开发者社区-腾讯云 (tencent.com),对于Python来说,基本可以忽略这个方式了。对于使用CLion C++来说,这种方式还有一定作用,就是在目标运行环境是嵌入式设备的时候:CLion远程调试嵌入式开发板程序_CodingInCV的博客-CSDN博客
Projector方式
这一方式是基于RDP(remote display protocol)协议,将IDE运行的画面通过web的形式显式,比较类似于VSCode的web方案CodeServer。
官方文档:JetBrains IDEs – Projector documentation
官方项目:JetBrains/projector-server: Server-side library for running Swing applications remotely (github.com)
这个项目还有一个客户端项目:
个人体验来说,是比较一般的,一个比较严重的问题是这种方式对网速要求高,而且bug较多,有时会闪退。配置起来也比较麻烦。如果使用纯浏览器的话,有一个问题就是浏览器本身有很多快捷键,会导致软件的快捷键和本地使用不一致,比如原本本地使用的F12,在浏览器就需要Ctrl+F12,用起来不太舒服,用客户端会好一些,不过客户端有bug,现在也停止开发了,转而到Gateway了,这一方式也不用再尝试了。
Gateway
GateWay是Jetbrains最新的远程方案了,目标是和VSCode看齐,下面重点介绍这种方式。
官方网站:Remote development overview | PyCharm Documentation (jetbrains.com)
整个过程由Client、Gateway和IDE Backend构成,前2者运行在本地主机,IDE Backend运行在远程linux主机。
安装
这种方式我们只需要在本地主机安装Gateway,而不再需要安装IDE本身。
下载安装包:JetBrains Gateway – JetBrains IDE 的远程开发
Gateway远程开发属于专业版的功能,可以试用或激活后使用。
可参考:https://www.cnblogs.com/haoliuhust/p/17510176.html)
配置远程主机SSH信息
安装完成后打开软件,选择SSH->New Connection新建连接,填入远程主机信息:
如果不想每次都输入密码,则可以指定私钥。
安装IDE Backend
设置好SSH信息后,根据提示选择IDE版本。默认会自动拉取安装包,如果远程主机的网络不好或者不能联网,也可以本地下好,“Installation options”上传。
设置完成后,工具将开始下载IDE到远程主机,等待安装完成。
使用
安装完成后,将打开Pycharm界面,基本上使用和本地开发没有区别。
主要的区别是设置中有一些选项分为client和host,包括插件也会分client和host, 基本和VSCode类似。
另一个区别是关闭软件时,会有几个选项:
Close and Stop就是把远程的IDE Backend也关闭,下次再连接时IDE要重新启动,而Close and Keep Running则只关闭客户端,远程的IDE Backend还继续运行,下次连接速度会更快。
下次再打开Gateway时,会显式我们已有的连接,名称就会连接上,非常的方便。
VSCode
vscode的远程开发就比较方便了,不仅目标主机可以是实际的主机,也可以是docker 容器或者WSL。vscode也有两种方式,一种是SSH, 一种是 The VS Code Server,还处在预览阶段,大部分所说的vscode远程都是指SSH的方式。
这种方式和Jetbrains Gateway一样,远程运行一个VS Code Server。不过这个Code Server相比Jetbrains的IDE Backend,要轻量很多,因此安装起来速度更快。这也能理解,毕竟vscode的很多功能都是通过插件完成的,本体本身是比较小的,而Pycharm是个IDE, 本身就集成了大部分的功能。
官方文档:Developing on Remote Machines using SSH and Visual Studio Code
安装
启用OpenSSH客户端(以win10为例)
- 图形化安装
- 打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能” 。
- 扫描列表,查看是否已安装 OpenSSH。 如果未安装,请在页面顶部选择“添加功能”,然后:
- 查找“OpenSSH 客户端”,再单击“安装”
对于作为开发的本地机来说,我们只需要装客户端就好了。
- 查找“OpenSSH 客户端”,再单击“安装”
- 命令行安装
还可以通过Powershell命令行安装
若要使用 PowerShell 安装 OpenSSH,请先以管理员身份运行 PowerShell。 为了确保 OpenSSH 可用,请运行以下 cmdlet:
如果两者均尚未安装,则此操作应返回以下输出:
然后,根据需要安装服务器或客户端组件:
这两者应该都会返回以下输出:
安装VSCode
Download Visual Studio Code – Mac, Linux, Windows
下载安装VSCode软件,按提示安装即可
安装远程开发插件
在Extensions中搜索Remote – SSH插件安装,安装后侧边栏将会出现Remote Explorer图标:
连接远程服务器
密码登陆
“+”,在弹出的输入框中输入ssh登陆信息,并根据提示输入密码。
第一次连接时VSCode将在远程机上安装VSCode Server。
安装完成后,就可以打开远程主机上的文件或文件夹进行开发了。
为了开发python程序,还需要安装Pylance和Python插件
当我们打开Python项目或文件时,将会提示我们设置Python解释器,或手动在界面切换:
这样就配置完毕了,接下来的开发就像在本地使用VSCode开发python程序一样了。
免密连接
上一步中,可能会需要频繁输入密码,我们可以通过设置免密登录的方式,免去这个过程。
本地电脑生成密钥
在本地命令行执行上述命令,生成私钥和公钥,windows上一般位于
授权远程主机
这样我们就不再需要输入密码了。
进阶:修改VSCode连接配置
有一种情况是我们可能对不同的远程主机有不同的密钥,这时,就需要修改VSCode的连接配置来使用不同的私钥了
Remote Explorer->OpenSSH Config,修改(若没有则添加)配置文件中的IdentityFile为对应公钥的私钥文件。
补充:CodeServer
VSCode还有一个开源社区实现的浏览器版本:coder/code-server: VS Code in the browser (github.com)
不过这种方式就和Jetbrains的Projector一样,基于浏览器不可避免的会出现一些快捷键用不了,需要改变操作习惯,总归不太方便。
总结
对于Python远程开发,可以在在Gateway和VSCode中2选一,如无必要,不应再去折腾Jetbrains曾经的SFTP和Projector方式,基于Web的Jupyter Notebook和Code Server可以作为验证开发,用于正式开发个人觉得还是不便。
Jetbrains Gateway:
优点:Pycharm本身的功能比较强大,对于习惯使用Pycharm开发的来说,远程开发基本没有差异,没有任何学习成本。Pycharm的配置和调试也要比VSCode方便一些,毕竟是专业的Python IDE。
缺点:只有专业版才有这个功能,因此需要收费。IDE Backend的包大小要比VSCode Server大不少,在新的环境上配置的时间会比VSCode长,对于需要频繁切换远程来说就不太方便了(比如远程环境是临时分配的机器,有些公司有深度学习平台,根据请求,每次分配机器用于调试深度学习代码),另一方面,对于连接到容器也没有VSCode方便。
适合场景和人群:基于上面的特点,Jetbrains Gateway适合远程开发机比较固定的情况。
VSCode
优点:免费,VSCode Server比较小,配置时间比较短。插件系统丰富,通过插件,对Jupyter Notebook也有较好的支持。另一方面,通过插件,VSCode对python之外的其他语言也有较好的支持,可以在一个环境内开发不同的语言。
缺点:调试功能没有Pycharm那么强大和方便,相对需要一些学习成本。
适合场景和人群:多语言开发者,远程开发机不固定,(还有缺钱买Pycharm专业版的…)
希望通过上面的介绍,大家能找到适合自己的开发工具。
欢迎去我的面包多主业查看其他项目:面包多
下载地址:
关注公众号获取
1.提取镜像文件,安装,高级选项,选择我有文件安装密钥
2、许可协议,勾选是
3、输入文件安装密钥,下一步。
密钥:05322-36228-06991-12654-51812-34369-14072-44298-22786-36732-05503-35033-50900-29808-05166-12170-05630-02560-02687-62114-45079-42917-06281-13007-19512-18270
4、浏览选择Crack中的license.lic许可证文件
提示:可将crack文件夹单独放置,文件名不要有中文字符。
5、设置安装目录
6、选择要安装的产品
8、安装完成,将crack中的libmwlmgrimpl.dll复制安装目录中,替换
路径:MATLABR2022bbinwin64matlab_startup_pluginslmgrimpl
9、打开软件。
python爬虫之建立代理池(一)_CodingInCV的博客-CSDN博客
python爬虫之建立代理池(二)_CodingInCV的博客-CSDN博客
前面2篇分别介绍了从2个免费代理网站爬取免费代理来构建我们自己的代理池。这一篇我们从实战的角度来将我们的代理池用起来,通过代理的方式访问我们的CSDN博客(CSDN会认为是一次访问,访问量+1),从而实现访问量的增长,仅供学习爬虫使用···
获取博客文章列表和链接
获取博客列表的链接是https://blog.csdn.net/xxx/article/list/, 通过在后面添加页数,获取不同页的博客列表。
通过分析页面的html,我们可以知道文章都在html的“article-item-box”中,因此我们可以通过在返回的html中查找“article-item-box”来得到所有的文章链接。
通过代理访问CSDN文章
通过设置requests接口的proxies参数,即可以代理的方式访问CSDN的博客。为了更像一个真正的浏览器,我们还要经常切换User-Agent,也就是浏览器的头。
进阶
User-Agent
The Latest and Most Common User Agents List (Updated Weekly)
我们可以从这个网站下载User-Agent列表,每次访问时从中随机一个。
代理池管理
前面只是从代理网站爬取了代理,为了有效管理,我们可以在这些代理基础上,进一步开发代理池的持久化功能,比如当有代理增加或者删除时,立即保存到本地;也可以将代理保存到redis, 实时更新,要获取代理时,也从redis中获取。简单起见,这里以保存到本地json为例:
定时爬取最新的代理和文章列表
可以借助apscheduler建立2个定时任务,免去自己手动实现定时任务:
完整代码:
面包多:https://mbd.pub/o/bread/ZJuam5lx
设置
同步设置
我们做的各项设置,不希望再到其他机器的时候还得再重新配置一次。VSCode中我们可以登陆微软账号或者GitHub账号,登陆后我们可以开启同步设置。开启设置同步,根据提示登陆即可。
允许侧边栏水平滑动
在目录层次较深或者文件名比较长时,侧边栏就无法完整显示文件名了。默认情况下,侧边栏是无法水平滑动的,这时我们就不得不拉大侧边栏,十分不方便。其实VSCode中有一个相关的设置:
勾选后,侧边栏就可以水平滑动了
代码格式化
为了提高我们代码的规范性,我们可以通过代码格式化工具来对我们的代码进行格式化(比如运算符两边加空格)。
安装Black Formatter插件。
将DefaultFormater设置为BlackFormatter
Shift+Alt+F触发代码格式化
行内显示变量值
在debug时,如果变量能够直接显示在代码行后,将非常方便。VSCode也支持这样,不过默认并没有打开。
vscode-icons
vscode-icons可以根据文件/文件夹类型显示不同的图标。
在插件市场安装插件后,修改配置:
Path Intellisense
这个插件可以在我们写路径时,自动补全路径
Open file From Path
这个插件可以让我们打开代码中路径
Project Manager
可以保存我们打开的workspace,下次打开时不需要再打开目录
Copilot
大名鼎鼎的AI代码助手,可以极大的减少编码时间(增加摸鱼时间),但是需要收费,可以淘宝购买,强烈建议。
背景
在调试时,我们希望能够直接在代码行显示变量的值,而不是总是去侧边栏查看,如下这种,y=12直接显示在代码行。那么VSCode中如何做呢
设置
VSCode提供了“inline values”设置,但为了速度,默认并没有开启,我们只需修改配置即可开启这个功能。
效果
- 背景
- 效果
- 实现功能
- 系列预计写得一些内容
- 整体框架
- 代码结构
- 软件使用说明
- 注册人员
- 打开输入源
- 打开视频文件
- 打开USB摄像头
- 打开IP摄像头(rtsp)
- 输出说明
- 数据说明
背景
人脸识别已经发展了很多年,随着深度学习发展,开源的模型也有很不错的效果了。我们可以在不需要深入各种算法细节的情况下,就能搭建自己的人脸识别系统了,除了用于学习,还可以将我们自己家的摄像头接入到我们自己搭的系统,真正用起来。这个专栏就基于这样一个设想,从开源的模型中寻找适合的算法,一步步搭建一个实时的人脸识别系统出来。
效果
视频:https://www.bilibili.com/video/BV1Bh4y157f3/
源码:CoderInCV的个人主页 (mbd.pub)
实现功能
- 完全基于开源模型
- 支持输入视频文件、USB摄像头、rtsp视频流
- 注册信息和识别记录存储在sqlite,重启后不消失
- 除了识别人员,还会累计其出现次数
- 对于非注册人员,也会累计其出现次数
- CPU上可实时
系列预计写得一些内容
- 人脸检测
- 人脸跟踪
- 人脸关键点
- 人脸质量
- 人脸特征提取
- 人脸比对
- 动态人脸识别逻辑
计划首先在CSDN更,视情况再看是否转发博客园。
人脸识别_CodingInCV的博客-CSDN博客
整体框架
代码结构
face_recognition_modules
—base_model 模型推理基类
— configs 全局配置
— database sqlite数据库相关炒作
— face_alignment 人脸关键点
— face_detection 人脸检测
—face_quality 人脸质量
— face_search 基于faiss的人脸搜索
— face_recognition 人脸识别,包括识别模型和识别服务
—tracker 人脸跟踪
—common 一些通用结构体和功能函数
models 模型目录
test_images 测试视频和图片
ui 窗口界面
face_detect_task 算法运行的线程
gui.py 程序入口
软件使用说明
在项目目录,运行gui.py
python gui.py
软件界面如下:
注册人员
注册人员按钮,选择导入的文件夹,将注册文件夹下的图片,图片的名称为人员的名字。
注册进度会在日志输出区域显示,在识别过程中也可以执行注册人员的操作。
人员注册信息会存在register.sqlite数据库中。
打开输入源
软件支持3种输入源:视频文件、USB摄像头以及rtsp流。
打开视频文件
“打开文件”按钮,选择要打开的视频文件,视频预览区将开始播放视频,并画人脸框以及名称。
打开USB摄像头
在USB Camera区域输入摄像头的索引,一般为数字0,然后打开摄像头按钮。
打开IP摄像头(rtsp)
在IP Camera区域输入摄像头流地址rtsp://xxxxx,打开IP摄像头。
输出说明
识别结果包含人员姓名(不在底库中的为Unkown), 出现的时间以及出现的次数。
注意该出现次数是从注册这个人开始计算,即使软件重启也不会清零,因为识别记录是存储在数据库中,只有清空记录,才会重新开始计算。
数据说明
人员注册信息以及识别记录存储在sqlite数据库中,关闭软件不会清空。再次打开时,会自动载入人员,无需重复注册。需要清空可以删除数据库文件或者在软件界面相应的按钮。
背景
在开发过程中,会有很多功能性代码、脚本或者就是一句命令是经常使用的,如果不记录下来,时间久了我们也忘了。一种方式是把这些片段记录到笔记软件中去,这种方式有些缺点就是笔记软件不是为代码设计的,对代码格式的支持不一定够好,另外就是用的时候不够方便,毕竟和其他笔记混杂在了一起。因此,代码片段管理也有一些专门的工具:7 Best Code Snippet Apps for Windows and Mac (codiga.io)
这些工具有些是只有Web的,有些只支持mac, 有些是收费的,总体看下来,massCode是其中最适合的一款,一是它是免费的,二是它是本地软件,避免每次要记录都要去打开网页,而且完全本地,也更安全,避免丢失,另一方面是它是多语言的,各类语言都支持,而且软件本身支持中文。而且还有一个无法拒绝他的理由就是vscode中有massCode插件,我们可以在vscode中直接使用massCode中记录号的代码片段,而不需要再去复制粘贴了。
安装及配置
安装
官网:Download | massCode
git: Releases · massCodeIO/massCode (github.com)
下载对应平台的安装包安装
配置
除了设置语言、外观之外,其中比较重要的一个设置是存储路径,我们可以通过把这个路径设置到云盘(比如onedrive)来实现设备之间的同步。
使用
软件的使用就比较直观了,可以创建文件夹来管理不同的语言,还可以通过标签来区分不同的代码片段:
在左上角标签,可以按标签查看:
与VSCode联动
上面说了,VSCode中有插件可以直接使用massCode中的代码片段。
安装插件
在VSCode中安装“massCode assistant”插件
插件使用
Ctrl+Shift+P打开命令面板,输入massCode:
有两个功能,一个是搜索代码片段,一个是新建代码片段。
搜索代码片段
选择massCode Search,会列出所有的代码片段,Enter选择后,代码片段就进入代码文件了。
新建代码片段
选定要保存的代码片段,选择massCode Create Snippet, 输入名称,在massCode中就可以看到了。不过这种方式我觉得没有在massCode中方便,因为没有指定文件夹和tag, 在massCode中还要进行修改。
结语
免费好用的代码片段管理器,赶紧用起来吧。
Unity 如何获取Texture 的内存大小
在Unity中,要获取Texture的内存文件大小,可以使用UnityEditor.TextureUtil类中的一些函数。这些函数提供了获取存储内存大小和运行时内存大小的方法。由于UnityEditor.TextureUtil是一个内部类,我们需要使用反射来访问它。
步骤
- 导入UnityEditor命名空间和System.Reflection命名空间:
- 创建一个函数来获取Texture的内存文件大小:
- 创建一个函数来获取Texture的运行时内存大小:
示例代码
示例 1:获取Texture的存储内存大小
示例 2:获取Texture的运行时内存大小
示例 3:同时获取Texture的存储内存大小和运行时内存大小
注意事项
- 确保在使用反射访问UnityEditor.TextureUtil类之前,已经导入了UnityEditor命名空间和System.Reflection命名空间。
- 使用反射时,需要使用BindingFlags.Static | BindingFlags.Public来获取静态公共方法。
- 在示例代码中,我们使用了Texture2D类型的变量来表示Texture,你可以根据实际情况修改代码以适应不同的Texture类型。
- 一、日志门面说明
- 二、JCL 使用
- JCL 入门
- JCL 原理
- 三、SLF4J 使用
- 配合自身简单日志实现(slf4j-simple)
- 配置logback日志实现
- 配置Log4J日志实现(需适配器)
- 配置JUL日志实现(需适配器)
- 添加slf4j-nop依赖(日志开关)
- 桥接旧的日志实现框架
一、日志门面说明
当我们的系统变的更加复杂的时候,我们的日志就容易发生混乱。随着系统开发的进行,可能会更新不同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。就算我们强制要求所有的模块使用相同的日志框架,系统中也难以避免使用其他类似 spring,mybatis 等其他的第三方框架,它们依赖于我们规定不同的日志框架,而且他们自身的日志系统就有着不一致性,依然会出来日志
体系的混乱。
所以我们需要借鉴 JDBC 的思想,为日志系统也提供一套门面,那么我们就可以面向这些接口规范来开发,避免了直接依赖具体的日志框架。这样我们的系统在日志中,就存在了日志的门面和日志的实现。
常见的日志门面 :
JCL、slf4j
常见的日志实现:
JUL、log4j、logback、log4j2
日志门面和日志实现的关系:
日志框架出现的历史顺序:
log4j –>JUL–>JCL–> slf4j –> logback –> log4j2
我们为什么要使用日志门面:
-
面向接口开发,不再依赖具体的实现类。减少代码的耦合
-
项目通过导入不同的日志实现类,可以灵活的切换日志框架
-
统一 API,方便开发者学习和使用
-
统一配置便于项目日志的管理
二、JCL 使用
全称为 Jakarta Commons Logging,是 Apache 提供的一个通用日志 API。
它是为 “所有的 Java 日志实现”提供一个统一的接口,它自身也提供一个日志的实现,但是功能非常常弱(SimpleLog)。所以一般不会单独使用它。他允许开发人员使用不同的具体日志实现工具: Log4j, Jdk 自带的日志(JUL)
JCL 有两个基本的抽象类:Log(基本记录器)和 LogFactory(负责创建 Log 实例)。
JCL 入门
1、添加依赖
2、入门代码,基于自身的 SimpleLog
3、添加 log4j 依赖
4、添加 log4j.properties
5、基于 log4j 的测试结果
JCL 原理
1、通过 LogFactory 动态加载 Log 实现类
- SimpleLog:JCL 的内置日志实现
- Log4JLogger:log4j 日志框架
- Jdk14Logger:JUL(Java Util Logging)
- Jdk13LumberjackLogger:Jdk 老版本的内置日志实现
2、日志门面支持的日志实现数组
说明:日志工厂其内部有一个加载日志的数组,加载顺序是按照数组顺序来的,这也解释了为什么入门案例中引入了 Log4J,JCL 内部日志框架就从 JUL 切换至 Log4J 了
3、具体实现代码
说明:通过日志数组顺序加载日志框架,如果没有找到,则继续加载下一个,否则直接返回
从原理中我们知道,JCL 是通过一个日志数组顺序加载,日志数组中包含:JCL 的内置日志实现 SimpleLog、log4j 、JUL(Java Util Logging)以及 Jdk 老版本的内置日志实现。
✷ 设计缺陷:如果后期又出现了新的日志实现主流框架,如果你想加载的话,就需要修改 JCL 源代码,实现 Log 接口,放入到日志加载数组中,因此 JCl 已经在 2014 年被 apache 淘汰了
三、SLF4J 使用
简单日志门面(Simple Logging Facade For Java) SLF4J 主要是为了给 Java 日志访问提供一套标准、规范的 API 框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如 log4j 和 logback 等。
当然 slf4j 自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的 Java 项目而言,日志框架会选择 slf4j-api 作为门面,配上具体的实现框架(log4j、logback 等),中间使用桥接器完成桥接。
官方网站:
https://www.slf4j.org/
SLF4J 是目前市面上最流行的日志门面。现在的项目中,基本上都是使用 SLF4J 作为我们的日志系统。
SLF4J 日志门面主要提供两大功能:
-
日志框架的绑定
-
日志框架的桥接
application 下面的 SLF4J API 表示 slf4j 的日志门面,包含三种情况:
-
若是只导入 slf4j 日志门面没有导入对应的日志实现框架,那么日志功能将会是默认关闭的,不会进行日志输出的。
-
蓝色图里 Logback、slf4j-simple、slf4j-nop 出来的比较晚就遵循了 slf4j 的 API 规范,也就是说只要导入对应的实现就默认实现了对应的接口,来实现开发。
-
对于中间两个日志实现框架 log4j(slf4j-log4j12)、JUL(slf4j-jdk14)由于出现的比 slf4j 早,所以就没有遵循 slf4j 的接口规范,所以无法进行直接绑定,中间需要加一个适配层(Adaptationlayer),通过对应的适配器来适配具体的日志实现框架,其对应的适配器其实就间接的实现了 slf4j-api 的接口规范。
注意:在图中对于 logback 需要引入两个 jar 包,不过在 maven 中有一个传递的思想,当配置 logback-classic 时就会默认传递 core 信息,所以我们只需要引入 logback-classic 的 jar 包即可。
配合自身简单日志实现(slf4j-simple)
若想使用自身的日志实现框架,需要引入第三方包(slf4j 自带实现类):
其中该坐标包含了对应的的依赖,可以不用手动导入。
Clion激活2024.1.4
测试
结果
Clion激活2024.1.4
默认日志等级为,能够实现占位符输出,并且可以在日志等级方法中传入异常实例,来打印对应的日志信息。
配置logback日志实现
引入的jar包,其中包含有以及的依赖,所以只需要引入该依赖即可:
Clion激活2024.1.4
配置Log4J日志实现(需适配器)
首先添加日志框架实现依赖
之前介绍,对于、这些比较早出现的日志实现框架需要有对应的适配层,在这里我们引入对应的适配器的依赖坐标:
配置JUL日志实现(需适配器)
添加slf4j-nop依赖(日志开关)
桥接旧的日志实现框架
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/150425.html