Neural Networks for Fingerprint Recognition
Neural Computation ( IF 3.278 )
摘要:
在采集指纹图像数据库后,设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时,算法输出两个图像来自同一手指的概率估计值。在一个实验中,神经网络使用几百对图像进行训练,随后使用来自数据库中对应20个人的子集的几千对图像来测试其性能。目前实现的错误率小于0.5%。还简要讨论了其他结果、扩展和可能的应用。
1、介绍
指纹图像的快速、可靠和计算机化分类和匹配是模式识别中的一个显著问题,但到目前为止,还没有得到完整的解决方案。自动指纹识别系统原则上可以有非常广泛的应用,远远超出传统的刑事司法领域,例如,使锁和身份证的使用过时。我们在这里的目的是简要介绍我们在神经网络思想应用于指纹匹配问题上的初步结果。特别地,我们将描述一个神经网络算法的架构、训练和测试,当给出两张指纹图像时,输出两张图像来自同一根手指的概率p。有几个理由怀疑神经网络方法可能非常适合指纹问题。首先,指纹形成了一类非常特殊的图案,具有非常独特的味道和统计特征。因此,相应的模式识别问题似乎有很好的限制和约束,甚至可能比其他模式识别问题,如识别在这些领域中,神经网络已经取得了一定的成功(参见Le Cun et al. 1990)。其次,神经网络可以避免其他更传统的方法所固有的一些陷阱。一个多世纪以来(参见Moenssens 1971年的有趣总结),人类操作员可以根据细节和/或脊向来匹配成对的指纹图像。细部是脊状图中特殊类型的不连续,如分叉、岛状和末端。在完整的指纹图像上,通常有50到150分钟的顺序(图2a)。通常估计10个左右的匹配细节就足以可靠地建立身份。事实上,正是这种基于细节检测和匹配的策略,在以前大多数寻找自动化解决方案的尝试中都采用了这种策略。基于细节的方法有两个明显的弱点:它对噪声很敏感(特别是对于墨水指纹,小的扰动可以产生人为的细节或掩盖现有的细节),并且计算成本很高,因为它本质上是一个图匹配问题。第三,神经网络具有鲁棒性、自适应性和可训练性。这一点尤其重要,因为指纹图像可能包括几种不同的变形和噪声来源,从手指及其在收集设备上的位置(平移、滚动、旋转、压力、皮肤状况)到收集设备本身(墨水/光学)。此外,重要的是要注意速度、计算能力、错误接受和错误拒绝的概率、内存和数据库大小等方面的需求可能会根据所考虑的应用程序而有很大差异。要进入私人住宅或私家车,需要一个小型经济系统,该系统具有少数人的小型可修改数据库,响应时间最多只有几秒钟。另一方面,法医应用程序可能需要使用大型计算机快速搜索包含数百万条记录的大型数据库,并且响应时间可能更长。神经网络可以进行不同的定制和训练,以适应特定应用的特定要求。从技术角度来看,指纹分析领域存在两个不同的问题:分类和匹配。将指纹分类为子类有助于加快大型数据库的搜索速度。值得关注的是,神经网络是否可以用于实现一些传统的分类方案,例如将指纹模式划分为螺旋、拱门和循环(“模式级分类”),或者创建新的分类边界。然而,分类问题将在别处讨论。在这里,我们将专门关注匹配问题。实际上,在任何自动指纹系统的核心,无论是用于识别还是验证,无论是用于大型还是小型数据库环境,都应该有一个结构,当呈现两个指纹图像时,该结构可以决定它们是否来自同一根手指。因此,我们的目标是设计和测试这样一个神经算法。因为神经网络本质上是自适应的,需要从例子中训练,我们接下来描述我们的训练和测试例子的数据库,以及它是如何构建的。然后,我们考虑匹配算法包括两个阶段:预处理阶段和决策阶段。预处理阶段基本上是对齐两幅图像,并从中提取一个中心区域。这两个中心区域被馈送到决策阶段,这是算法的适当神经网络部分,并从示例中进行训练。尽管预处理阶段是相当标准的,但决策阶段是新颖的,并且基于实现概率贝叶斯方法来估计匹配概率p的神经网络。在主要实验中,网络通过梯度下降训练,使用来自5个手指的300对图像的训练集,每个手指5张图像。然后用另外15个手指的4650对图像来验证它的性能,每个手指也有5张图像。经过训练,该网络的总体错误率为0.5%。最后讨论了其他结果和可能的扩展。
2、数据库
尽管世界上有许多指纹数据库,但这些数据库通常不能供公众使用。此外,这是连接主义方法的一个关键问题,大多数数据库每个手指只包含一个图像或模板,而训练神经网络识别指纹图像需要同一记录的几个噪声版本可供训练。因此,要训练和测试神经网络,首先必须构建一个数字化指纹图像数据库。这些图像可以通过多种方式获得,例如通过带有墨水指纹的数字扫描仪或更复杂的全息技术(Igaki et al. 1990)。我们决定用一个简单的原理建造我们自己的收集装置。设备基本上由一个棱镜放置在CCD(电荷耦合装置)前摄像头连接到一个抓帧器板安装在个人电脑(图1)。当一个手指定位棱镜对角线脸上,入射光线从一个广场边的棱镜折射不同取决于他们遇到手指的接触点与棱镜(对应于一个脊)或非接触点。这在折射光束中产生了一种明暗条纹的图案,可以很容易地用镜头在CCD相机上聚焦,然后数字化并存储在计算机中。我们得到的图像大小为512 x 464像素,每像素有8位灰度。在相应的尺度上,脊的厚度相当于6个像素左右。这当然不是一种非常经济的格式,用于存储包含有用的信息少得多。但是,这种格式至少在开发阶段是必要的,特别是为了对预处理进行微调。通过这种方式,我们建立了一个数据库,其中包含了来自30个不同人的200多张指纹图像。为了解决匹配问题,数据库必须包含同一手指在不同时间拍摄的几张不同图像。因此,对于下面的内容,数据库中最重要的部分由100张图像的子集组成。这些是20个不同的人的食指图像,每个食指在不同的时间拍摄了5张不同的图像。在每次采集的时候,我们都没有给这个人任何关于手指在棱镜上的位置的特殊指示,只是“以一种自然的方式”这样做。一般来说,我们故意不去尝试减少现实环境中可能出现的噪音和可变性。例如,每次收集后,我们都没有清洁棱镜表面。事实上,我们确实观察到了来自同一根手指的图像之间的显著差异。这种可变性来自多个来源,主要是在手指水平(定位,压力,皮肤状况)和收集设备(亮度,焦点,棱镜表面状况)。我们已经使用这个数据库进行了几个学习实验,用来自7个人的图像对训练网络并在剩下的配对上测试算法。在这里,我们将主要报告我们最大的一个实验的典型结果,其中,在这个数据库中的rr) = 4950个图像对中,E) = 300个图像对来自5个不同的人,用于通过梯度下降来训练网络。余下的4650对图像用于测试算法的泛化能力。给定两张指纹图像A和B,它们匹配(或不匹配)的命题将用M(A, B)[或M(A, B)]表示。然后,目的是设计一种神经网络算法,当给出一对(a, B)指纹图像时,输出一个数字p = p(M) = p[M(a, B)],介于0和1之间,对应于一个置信度(Cox 1946)或两个指纹匹配的概率。在这里,正如在本文的其余部分一样,除了第一次引入新符号外,我们将倾向于在表示法中省略对(A, B)的显式依赖关系。
3、预处理阶段
任何用于指纹识别的算法都可能从几个标准预处理阶段开始,在这些阶段中,原始图像可能被旋转、平移、缩放、对比度增强、分割、压缩或用一些合适的过滤器进行卷积。在我们的应用程序中,预处理阶段的目的是从两个输入图像中每个提取一个称为中心区域的中心补丁,并对齐两个中心区域。只有两个对齐的中心区域依次被馈送到决策阶段。预处理本身包括几个步骤,首先过滤掉高频噪声,然后补偿图像中存在的平移效应,并分割它们,最后对齐和压缩中心区域。为了便于描述,其中一个输入图像将被称为参考图像,另一个被称为测试图像,尽管两者之间没有本质上的区别。
3.1、低通滤波
为了去除原始图像中似乎存在的大量高频尖峰,我们将每个显著偏离其四个相邻值的像素替换为相应的平均值。
3.2、细分
对于每张图像,我们首先使用边缘检测算法在每个指纹周围绘制一个紧密的矩形框,并确定框的几何中心。然后,将参考图像的中心区域定义为位于前面描述的中心下方的65 x 65中心方形斑块。对于测试图像,我们选择一个相似但更大的尺寸为105 x 105的补丁(在每个方向上将前一个补丁扩展20个像素)。这个较大的补丁被称为窗口。
3.3、校准
我们一个像素一个像素地滑动参考图像的中心区域,穿过测试图像的窗口(上下左右各滑动20个像素),并在每一步计算相应的相关性,直到找到相关性最大的位置。除了训练阶段,这是整个算法中计算成本最高的部分。然后通过选择相关性最大位置对应的中心65 x 65 patch来确定测试图像的中心区域(图2b)。
3.4、压缩与归一化
最后,两个65 x 65的中心区域中的每一个都通过5 x 5的截断高斯函数进行离散卷积,简化为32 x 32的数组。这个32 x 32压缩的中心区域包含一个低分辨率的图像,大致相当于原始图像中的10个脊线。得到的像素值在0到1之间被方便地归一化。在我们的实现中,所有的参数,特别是各种矩形框的大小都是可调的。这里给出的值是在以下模拟中使用的值,从经验上看,似乎产生了良好的结果。为了避免边界效果,通常在各种矩形框周围添加2像素宽的框架,这就解释了一些奇怪的大小。在这个阶段,人们也很自然地想知道,关于两个输入的匹配的决定是否已经仅仅基于在对齐步骤(3.3)中通过阈值确定的最大相关性的值。这是一个关键的经验观察,这种最大的相关性,部分由于噪声效应,是不够的。特别是匹配指纹图像和不匹配指纹图像的相关性通常都很高(在0.9以上),我们通常会观察到不匹配对的相关性高于匹配对的相关性。因此,在预处理之后有一个非线性决策阶段是非常必要的。最后,需要注意的是,在训练和测试过程中,预处理只需要对每对图像应用一次。特别地,在训练阶段,只有中心区域需要在神经网络中循环。虽然预处理不受训练,但它可以以与整个算法的全局神经体系结构兼容的并行方式实现。
4、神经网络决策阶段
决策阶段是算法的神经网络部分。与其他相关应用一样(参见Le Cun et al. 19901),该网络具有金字塔结构,两个对齐和压缩的中心区域作为输入,并具有单个输出p。金字塔的底层对应于中心的卷积具有多个滤波器或特征检测器的区域。随后的层次是新颖的。基于卷积滤波器的输出,他们实现的最终决策结果来自于用于估计p的概率贝叶斯模型。网络的过滤部分和决策部分都是可适应的,同时进行训练。
4.1、卷积
两个中心区域首先用一组可调滤波器进行卷积。在这个实现中只使用了两种不同的过滤器类型,但是扩展到更多类型的过滤器是很简单的。在这里,每个滤波器都有一个7 x 7的接受场,并且两个相邻的同类型滤波器的接受场有2个像素的重叠,以近似一个连续的卷积操作。给定类型的所有过滤器的输出组成一个6 x 6的数组。因此,每个32 × 32的核心被转换成几个6 × 6的数组,每个数组对应一个滤波器类型。过滤器类型j在其中一个数组中的位置(x, y)的输出为(例如对于A)
其中I,s(A)是图像A的压缩中心区域在(r,s)位置的像素强度,f是常见的sigmoids之一[f(x) (1 +e-)-, wxy,r,s是从压缩中心区域的(r,s)位置到滤波器输出数组中(x, y)位置的连接权值,t是偏置。在(x, y)位置对应滤波器接收野的7 x 7 patch上取4.1中的和。阈值和7x7的权值模式是滤波器类型的特征(所谓的“权值共享”),因此它们也可以被视为平移不变卷积核的参数。它们在一个图像中共享,但也在图像A和b之间共享。因此,wyrs w(x -r,y - s),在这个实现中,每种过滤器类型由7 x 7 +1 50个可学习参数表征。在接下来的内容中,我们简化了过滤器输出位置的符号,让(x,y) i。对于每个过滤器类型j,我们现在可以形成一个数组Az (A, B),由所有的平方差组成
令Az = Az(A, B)表示所有位置i和滤波器类型j的所有aa和B)的数组(图3)。
4.2、决策
网络决策部分的目的是估计A和B之间匹配的概率p = p[M(A, B)/Az(A, B)] = p(M/Az),给定卷积滤波器提供的证据Az。决策部分可以看作是一个二元贝叶斯分类器。我们提出的决策网络有四个关键要素。1. 由于网络的输出被解释为概率,大多数反向传播网络中通常使用的最小均方误差似乎并不是衡量网络性能的合适指标。对于概率分布,估计概率输出p和真实概率p之间的交叉熵,求和
5、结果与结论
我们使用来自数据库的300对图像和两种不同的滤波器类型(图5)训练了前几节中描述的网络。然后在4650对新图像上测试网络性能。网络通常能很好地学习训练数据库。然而,当只使用一种筛选器类型时,情况就不同了。由于99%的匹配(或不匹配)对产生高于0.8(或低于0.2)的输出,因此在整个种群的输出单元中,匹配和不匹配对之间的分离是良好的。泛化集的错误率通常为0.5%,其中大约一半的错误是由于错误的拒绝,一半是由于错误的接受。在许多应用程序中,这两种类型的错误并不是对称的。例如,通常情况下,错误的接受比错误的拒绝更具灾难性。如果通过改变p上的决策阈值,我们强制错误接受率为0%,则错误拒绝率增加到4%。这个错误率当然需要减少,但即使如此,对于某些应用来说,它也几乎是可以接受的。与其他相关应用一样,网络在学习过程中发现的过滤器类型的解释并不总是直接的(图5和图6)。我们在较小的数据库上使用多达四种过滤器类型进行了各种实验。通常,滤波器类型中至少有一种总是显示为边缘或脊方向检测器。在各种实验过程中发现的其他一些过滤器类型可以用微小探测器来解释,尽管这可能更有争议。在训练阶段结束时,决策阶段滤波器的输出接近二进制0或1。由于网络的最终决定完全基于这些输出,这些输出提供了原始包含在512 x 464 x 8位图像中的所有相关匹配信息的非常压缩和呈现。因此,在这篇文章中在实现过程中,每张图像被大致减少到36 x 2 = 72位,这与理论下限的粗略估计(过去和现在的人类数量大约是
在应用中,算法不会像在训练阶段那样被使用。特别地,只有参考图像的中心区域需要存储在数据库中。由于前向传播通过决策阶段的算法是很快,人们实际上可以设想算法的一种变化,其中预处理中的对齐步骤被修改,参考图像仅以决策阶段滤波器相应输出给出的最压缩形式存储在数据库中。在这种变化中,测试图像的105 x 105窗口中包含的所有可能的65 x 65方形补丁,在经过通常的压缩和归一化预处理步骤后,通过卷积滤波器阵列发送,然后通过神经网络与参考图像的相应输出进行匹配。最后的决定将基于对p值的结果曲面的检查。这种算法是否也能带来更好的决策,还需要进一步研究。为了降低错误率,可以尝试以下几种方法。一种可能是在4.7和4.8中使用更通用的指数模型,而不是二项分布。或者,可以增加过滤器类型的数量或自由参数的数量(例如,通过让pi和qj也依赖于位置)以及训练和验证集的大小。另一种可能性是在比较中使用更大的窗口,或者,例如,使用两个小窗口而不是一个,第二个窗口由第一个窗口的对齐自动对齐。我们所拥有的残余假排斥的很大一部分似乎是由于旋转效应,也就是说,手指有时在收集设备上处于不同的角度。我们所描述的网络似乎能够处理大角度的旋转。较大的旋转可以很容易地在预处理阶段处理。也可以在收集系统中加入引导装置,以完全避免旋转问题。在这项研究中,我们试图找到一个通用的神经网络匹配器,原则上能够解决整个种群的匹配问题。在这方面,值得注意的是,这个网络只训练了与五个不同的人有关的图像对,但它很好地推广到与20人有关的更大的数据库。显然,通用网络还需要在更大的人口样本上进行测试。然而,与分类问题不同的是,匹配问题对训练集和测试集的大小应该不那么敏感。例如,在classifymg轮式分类中,有必要将网络暴露给整个种群中具有所有细微统计变化的轮式模式的大样本。在我们的匹配器中,我们基本上是从另一个图像中减去一个图像,因此只有差异的可变性才是真正重要的。特定的应用程序,特别是那些涉及小型数据库的应用程序,具有在网络的结构和训练方面都可以有利地利用的特定特征,并提出一些特定的问题。例如,对于汽车锁应用程序,只有与少数人的小数据库相关联的一对指纹才会出现阳性匹配。指纹匹配正确与数据库以外的人都无关。他们可能不需要培训。可以想象,在小型数据库应用程序中,可以训练不同的网络分别识别数据库中的每条记录,以防止可能的冒名顶替者。最后,我们所描述的方法,特别是带有概率解释的贝叶斯决策阶段,并不专门用于指纹识别问题。它是一个通用的框架,可以应用于需要建立同一性或同源性的其他模式匹配问题。相应的神经网络可以很容易地体现在硬件中,特别是在离线学习的情况下。正如已经指出的,预处理和决策阶段中的大多数步骤实际上是卷积的,并且可以并行实现。在工作站上,目前完全处理一对图像大约需要10秒。使用专门的硬件,这个时间可以减少几个数量级。
相关文章:
Neural Networks for Fingerprint Recognition
Neural Computation ( IF 3.278 ) 摘要: 在采集指纹图像数据库后,设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时,算法输出两个图像来自同一手指的概率估计值。在一个实验中,神经网络使用几百对图像进行训练&…...
ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯
人工智能AI科技企业OpenAI公司25日宣布,其聊天应用程序ChatGPT如今具备「看、听、说」能力,至少能够理解口语、用合成语音回应并且处理图像;但专家忧心,以假乱真与深度伪造的乱象可能变本加厉。 国家广播公司新闻网(NBC News)报导…...
Java 实现遍历一个文件夹,文件夹有100万数据,获取到修改时间在2天之内的数据
目录 1 需求2 实现1(第一种方法)2 实现2 (推荐使用这个,快)3 实现3(推荐) 1 需求 现在有一个文件夹,里面会一直存数据,动态的存数据,之后可能会达到100万&am…...
持续集成部署-k8s-命令行工具:基础命令的使用
持续集成部署-k8s-命令行工具:基础命令的使用 1. 资源类型与别名2. 资源操作2.1 创建对象2.2 显示和查找资源2.3 更新资源2.4 修补资源2.5 编辑资源2.6 scale 资源2.7 删除资源3. 格式化输出1. 资源类型与别名 资源类型缩写别名clusterscomponentstatusescsconfigmapscmdaemon…...
使用python脚本的时间盲注完整步骤
文章目录 一、获取数据库名称长度二、获取数据库名称三、获取表名总长度四、获取表名五、获取指定表列名总长度六、获取指定表列名七、获取指定表指定列的表内数据总长度八、获取指定表指定列的表内数据 一、获取数据库名称长度 测试环境是bwapp靶场 SQL Injection - Blind - …...
C++项目:仿mudou库one thread one loop式并发服务器实现
目录 1.实现目标 2.HTTP服务器 3.Reactor模型 3.1分类 4.功能模块划分: 4.1SERVER模块: 4.2HTTP协议模块: 5.简单的秒级定时任务实现 5.1Linux提供给我们的定时器 5.2时间轮思想: 6.正则库的简单使用 7.通用类型any类型的实现 8.日志宏的实现 9.缓冲区…...
【算法训练-贪心算法 一】买卖股票的最佳时机II
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【贪心算法】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...
单阶段目标检测与双阶段目标检测的联系与区别
🚀 作者 :“码上有钱” 🚀 文章简介 :AI-目标检测算法 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬简介 双阶段目标检测算法与单阶段目标检测算法在工作原理和性能方面存在一些相似与差异之处。下…...
Mysql技术文档--设计表规范式-一次性扫盲
阿丹: 在设计表的时候经常出现一些问题,其实自己很清楚就是因为在设计表的时候没有规范。导致后期加表的时候出现了问题。所以趁着这个假期卷一卷。同时只有在开始的时候 几大范式 在关系型数据库中,数据表设计的基本原则、规则就称为范式。…...
python socket 传输opencv读取的图像
python socket网络编程 将ros机器人摄像头捕捉的画面在上位机实时显示,需要用到socket网络编程,提供了TCP和UDP两种方式 TCP服务器端代码: 创建TCP套接字: s socket(AF_INET, SOCK_STREAM) 创建了一个TCP套接字。SOCK_STREAM 表示这是一个TCP套接字&…...
APACHE NIFI学习之—UpdateAttribute
UpdateAttribute 描述: 通过设置属性表达式来更新属性,也可以基于属性正则匹配来删除属性 标签: attributes, modification, update, delete, Attribute Expression Language, state, 属性, 修改, 更新, 删除, 表达式 参数: 如下列表中,必填参数则…...
BIT-7文件操作和程序环境(16000字详解)
一:文件 1.1 文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明…...
冥想第九百二十八天
1.今天周三,今天晚上日语课上了好久,天气也不好, 2.项目上全力以赴的一天。 3.感谢父母,感谢朋友感谢家人,感谢不断进步的自己。...
深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)
目录 前言 环境配置 Quartz 什么是Quartz? 应用场景 核心组件 Job JobDetail Trigger CronTrigger SimpleTrigger Scheduler 任务存储 RAM JDBC 导入依赖 定时任务 销量统计 Redis检测 使用 编辑 注意事项 前言 在悦享校园1.0中引入了Quart…...
Lucene-MergePolicy详解
简介 该文章基于业务需求背景,因场景需求进行参数调优,下文会尽可能针对段合并策略(SegmentMergePolicy)的全参数进行说明。 主要介绍TieredMergePolicy,它是Lucene4以后的默认段的合并策略,之前采用的合并…...
数据的加解密
文章目录 分类特点业务的使用补充 分类 对称加密算法非对称加密算法 特点 对称加密算法 : 加密效率高 !加密和解密都使用同一款密钥 但是有一个问题 : 密钥如何从服务端发给客户端? (假如你直接先将密钥发给对方,要是在过程中被黑客技术破解了,那后面的消息也就泄漏了) (后…...
【Spring】更简单的读取和存储对象
更简单的读取和存储对象 一. 存储 Bean 对象1. 前置工作:配置扫描路径2. 添加注解存储 Bean 对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储&…...
【LeetCode热题100】--108.将有序数组转换为二叉搜索树
108.将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二叉搜索树的中序遍历是升序…...
Redis学习笔记(下):持久化RDB、AOF+主从复制(薪火相传,反客为主,一主多从,哨兵模式)+Redis集群
十一、持久化RDB和AOF 持久化:将数据存入硬盘 11.1 RDB(Redis Database) RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。 备份…...
【智能家居项目】裸机版本——设备子系统(LED Display 风扇)
🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言:你只管努力,剩下的交给时间! 输入子系统中目前仅实现了按键输入,剩下的网络输入和标准输入在以后会逐步实现&am…...
[Linux]记录plasma-wayland下无法找到HDMI接口显示器的问题解决方案
内核:Linux 6.5.5-arch1-1 Plasma 版本:5.27.8 窗口系统:Wayland 1 问题 在前些时候置入了一块显示器,接口较多,有 HDMI 接口,type-C 接口。在 X11 中可以找到外接显示器,但是卡顿明显…...
【计算机网络】高级IO之select
文章目录 1. 什么是IO?什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误?对错误码的进一步判断检测数据没有就绪时,返回做一些其他事情完整代码myt…...
如何设计一个高效的应用缓冲区【一个动态扩容的buffer类】
文章目录 前言一、为什么需要设计应用层缓冲区必须要有 output buffer目的问题output buffer的解决方案: 必须要有 input buffer总结 二、设计要点三、buffer设计思路基础函数关于iovec与readv readfd如何实现动态扩容 问题 前言 在上一个博客,我们介绍…...
图像处理初学者导引---OpenCV 方法演示项目
OpenCV 方法演示项目 项目地址:https://github.com/WangQvQ/opencv-tutorial 项目简介 这个开源项目是一个用于演示 OpenCV 方法的工具,旨在帮助初学者快速理解和掌握 OpenCV 图像处理技术。通过这个项目,你可以轻松地对图像进行各种处理&a…...
管道-匿名管道
一、管道介绍 管道(Pipe)是一种在UNIX和类UNIX系统中用于进程间通信的机制。它允许一个进程的输出直接成为另一个进程的输入,从而实现数据的流动。管道是一种轻量级的通信方式,用于协调不同进程的工作。 1. 创建和使用管道&#…...
【JavaEE基础学习打卡08】JSP之初次认识say hello!
目录 前言一、JSP技术初识1.动态页面2.JSP是什么3.JSP特点有哪些 二、JSP运行环境配置1.JDK安装2.Tomcat安装 三、编写JSP1.我的第一个JSP2.JSP执行过程3.在IDEA中开发JSP 总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好者,小白白。我们的天赋并不高…...
使用序列到序列深度学习方法自动睡眠阶段评分
深度学习方法,用于使用单通道脑电图进行自动睡眠阶段评分。 def build_firstPart_model(input_var,keep_prob_0.5):# List to store the output of each CNNsoutput_conns []######### CNNs with small filter size at the first layer ########## Convolutionnetw…...
【算法】排序——选择排序和交换排序(快速排序)
主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法头疼记:算法专栏…...
Docker 容器监控 - Weave Scope
Author:rab 目录 前言一、环境二、部署三、监控3.1 容器监控 - 单 Host3.2 容器监控 - 多 Host 总结 前言 Docker 容器的监控方式有很多,如 cAdvisor、Prometheus 等。今天我们来看看其另一种监控方式 —— Weave Scope,此监控方法似乎用的人…...
Spring Boot集成redis集群拓扑动态刷新
项目场景: Spring Boot集成Redis集群,使用lettuce连接Cluster集群实例。 问题描述 redis其中一个节点挂了之后,springboot集成redis集群配置信息没有及时刷新,出现读取操作报错。 java.lang.IllegalArgumentException: Connec…...
网站备案需要年检吗/新闻稿发布
写在前面今天带给大家一个突破点选验证码的案例,利用爬虫模拟登陆哔哩哔哩,并且把一些采坑的地方给大家强调一下!一、需求分析模拟登陆哔哩哔哩网站链接: https://passport.bilibili.com/login效果图如下:验证成功后会自动跳转B站…...
中英文网站用同域名/网站建设seo
内容摘要多租户容器数据库是Oracle 12c 版本比较重要的一个新特性,也是Oracle 12c OCM认证考试官方考试大纲中的重要考点 。本次课程带大家一起学习Oracle 12c 多租户容器数据库基本结构,介绍容器数据库CDB和PDB的连接访问方式,了解Oracle 12…...
腾讯建站平台官网/百度竞价培训
如何打开文件Stud.txt,然后用"Orange"替换任何出现的"A"? 请(一如既往)遵循一般问题指南,说明任何特殊限制,显示您迄今为止尝试过的内容,并询问具体让您感到困惑的内容。 另外,请用[ho…...
义乌做网站/重庆网站关键词排名优化
椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效…...
百度网站推广找谁做/seo建站优化推广
如何避免子图中重复的图例标签?我要在matplotlib中进行处理的一种方法是将自定义图例标签传递给图例对象.我找不到有关等效选项的任何文档.有任何想法吗?traces []colors {Iris-setosa: rgb(31, 119, 180),Iris-versicolor: rgb(255, 127, 14),Iris-vi…...
临沂住房和城乡建设局网站/网络营销策划方案
本文记载了如何在微信小程序里面实现下拉刷新,上拉加载更多 先开看一下界面 大致如此的界面吧。 这个Demo使用了微信的几个Api和事件,我先列出来。 1.wx.request (获取远程服务器的数据,可以理解成$.ajax) 2. scroll-v…...