-
Consistency-based Semi-supervised Learning for Object Detection, NeurIPS 19CSD 这篇文章是比较早期的半监督目标检测方法,非常简单,该文章提出了一个 Consistency-based 半监督目标检测算法,可以同时在单阶段和双阶段检测器上工作。.图二 CSD 半监督目标检测算法结构图CSD 的结构如图二所示,以单阶段目标检测器为例,训练的损失函数主要包括两个部分,labeled sample 的监督损失和 unlabeled samples 的 Consistency loss。针对 unlabeled samples,首先将图像水平翻转,然后分别送入网络当中,得到对应的 Feature map,由于两张翻转的图像的空间位置是可以一一对应的,因此可以在对应的位置计算一致性损失。分类部分,利用 JS 散度作为 consistency loss;定位部分,利用 L2 loss 作为 consistency loss。双阶段检测器的部分与单阶段检测器类似,差别主要在于 RPN(Region Proposal Network) 对于不同的输入可能产生不同的 proposals,因此在计算 consistency loss 时无法一一对应。解决此问题也很简单,两张图像使用同一个 RPN 生成同一组 RoI (Region of Interest) 来提取特征得到 proposals。作者还提出了一个 Background elimination 方法来消除大量背景部分的损失主导训练过程的问题,因此作者定义了一个 mask 来过滤大量的背景样本:其中,当该实例的类别不等于背景类时等于1,否则为 0。
-
文章转载自 小白学视觉什么是半监督目标检测?传统机器学习根据训练数据集中的标注情况,有着不同的场景,主要包括:监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性,在介绍半监督目标检测方法之前,我们查看一下目标检测在这四个方向下的具体设定,如下图所示(不包括无监督学习):图一 目标检测的不同的 setting总而言之,我们可以讲目标检测的 setting 分为四个部分:有监督目标检测: 拥有大规模带标签的数据,包括完整的实例级别的标注,即包含坐标和类别信息;弱监督目标检测: 数据集中的标注仅包含类别信息,不包含坐标信息,如图一 b 所示;弱半监督目标检测: 数据集中拥有部分实例级别的标注,大量弱标注数据,模型希望利用大规模的弱标注数据提升模型的检测能力;半监督目标检测: 数据集中拥有部分实例级别的标注,大量未标注数据,模型希望利用大规模的无标注的数据提升模型的检测能力;半监督目标检测方法的核心在于,如何充分利用大量未标注、多样性的数据提升模型在测试集上的性能,目前的半监督目标检测方法主要有两个方向:一致性学习(Consistency based Learning)伪标签(Pseudo-label based Learning)前者利用两个深度卷积神经网络学习同一张 unlabeled 图像不同扰动(比如水平翻转,不同的对比度,亮度等)之间的一致性,充分利用 unlabeled data的信息。后者利用在 labeled data 上学习的预训练模型对 unlabeled data 进行推理,经过 NMS 后减少大量冗余框后,利用一个阈值去挑选伪标签,最后利用伪标签训练模型。个人认为这两种方法没有本质的区别,本身都是伪标签技术,一致性学习可以认为是一种 soft pseudo label,而后者是一种 hard pseudo label。
-
文章来源于深度学习与计算机视觉 ,作者磐怼怼边缘检测是非常常见和广泛使用的图像处理,对于许多不同的计算机视觉应用非常必要,如数据提取,图像分割,在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量,但保留了图像的结构。Python中的Canny边缘检测是计算机视觉中最流行的边缘检测方法之一。以下是Canny边缘检测的步骤:1.使用高斯平滑来减少噪声2.计算梯度3.应用非极大值抑制以减少噪声4.找到上下阈值5.应用阈值。幸运的是,OpenCV库有cv2.canny()函数,可为我们执行Canny边缘检测。在本文中,我们将直接使用OpenCV执行边缘检测。import cv2 import matplotlib.pyplot as plt 我们将使用以下图片进行今天的教程Canny边缘检测的第一步是应用高斯模糊。在模糊之前,将图像转换为灰度也很重要:image = cv2.imread("meter.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0)现在,我们可以直接将cv2.Canny()方法应用于这个模糊的图像。很简单。它需要三个参数:图像本身,较低的阈值和较高的阈值。选择这些阈值是棘手的。对于每个图像,这些阈值都将是不同的。对于此图像,我们将尝试三个不同的范围并观察发生了什么:wide = cv2.Canny(blurred, 50, 200) mid = cv2.Canny(blurred, 30, 150) tight = cv2.Canny(blurred, 210, 250)在这里,我使用了三种不同类型的范围。在wide中,阈值的值具有宽范围。在mid中,阈值的值在中间范围内,在tight中,阈值的值具有紧密的范围,仅为210到250,非常接近。为了检查图像,我只保存了这三个图像(wide,mid和tight)。以下是wide的结果:记住,你不能一概而论这些范围。对于不同的图像,可能需要使用不同的范围。这就是为什么这么棘手的原因。好消息是,有一些可用的统计技巧可以用来找到下限和上限阈值,而不需要像我们之前看到的试错方法那样。这是自动边缘检测的函数:def auto_canny_edge_detection(image, sigma=0.33): md = np.median(image) lower_value = int(max(0, (1.0-sigma) * md)) upper_value = int(min(255, (1.0+sigma) * md)) return cv2.Canny(image, lower_value, upper_value)在上面的函数中,首先找到图像数组中的中位像素值。然后使用这个中位数和一个常数sigma值,可以找到下限和上限阈值。这里使用了一个sigma值为0.33。在大多数应用程序中,0.33作为sigma值是有效的。但在某些情况下,如果它不能给出好的结果,请尝试一些其他的sigma值。这是我们之前创建的模糊图像上使用auto_canny_edge_detection方法的结果:auto_edge = auto_canny_edge_detection(blurred) cv2.imwrite("auto.jpg", auto_edge)这就是auto.jpg的样子:正如你所看到的,边缘在这里很清晰地出现了,而不需要尝试太多的阈值。
-
三角函数和对数函数Numpy中包含了一些最常用的三角函数包括Numpy .sin()、Numpy .cos()、Numpy .tan()、Numpy .arcsin()、Numpy .arccos()、Numpy .arctan()或Numpy .log()。numpy.sin()的例子: import numpy as np a = np.array([0, 30, 45, 60, 90]) b = np.sin(a) print(b) # Output: [ 0. 0.5 0.70710678 0.8660254 1. ]numpy.log计算自然对数是指数函数的倒数,因此log(exp(x)) = x。自然对数是以e为底的对数。 import numpy as np np.log([1, np.e, np.e**2, 0]) #array([ 0., 1., 2., -Inf])以上就是Numpy中常用的数学函数的总结。,另外就是Numpy的文档非常详尽,如果你想寻找什么函数,可以直接进行查询:https://numpy.org/doc/
-
线性代数函数最常见的是线性代数函数有点积numpy.dot()函数可用于计算两个数组的点积。例如,要计算两个1-D数组a和b的点积,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.dot(a, b) print(c) # Output: 32或者直接使用@操作符 c = a @ b print(c) # Output: 32矩阵乘法numpy.matmul()函数可用于执行两个数组的矩阵乘法。例如,要执行两个2-D数组a和b的矩阵乘法,可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.matmul(a, b) print(c) # Output: # [[19 22] # [43 50]]可以使用@运算符来执行矩阵乘法: c = a @ b print(c) # Output: # [[19 22] # [43 50]]转置numpy.transpose()函数可用于转置数组。例如,要转置一个2-D数组a,你可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.transpose(a) print(b) # Output: # [[1 3] # [2 4]]也可以直接使用.T属性来转置数组: b = a.T print(b) # Output: # [[1 3] # [2 4]]行列式numpy.linalg.det()函数可用于计算正方形数组的行列式。例如,要计算二维数组a的行列式,可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) d = np.linalg.det(a) print(d) # Output: -2.000000000000000注意,输入数组必须是正方形数组,即它必须有相同的行数和列数。逆numpy.linalg.inv()函数可用于计算正方形数组的逆inverse 。例如,要计算一个2-D数组a的逆,你可以使用以下代码: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.linalg.inv(a) print(b) # Output: # [[-2. 1. ] # [ 1.5 -0.5]]需要注意的是,输入数组必须是方阵,而且行列式必须非零。否则,numpy将引发LinAlgError。以上就是我们常用的线性代数函数,还有更多函数来计算矩阵和数组上的线性代数运算,可以查看Numpy文档。
-
我们将介绍基本的数学运算:加法使用numpy.add()逐个添加两个数组元素。例如,要添加两个数组a和b,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.add(a, b) print(c) # Output: [5, 7, 9]也可以使用+运算符: c = a + b print(c) # Output: [5, 7, 9]减法numpy.subtract()可用于从另一个元素中减去一个数组。例如,要从数组a中减去数组b,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.subtract(a, b) print(c) # Output: [-3, -3, -3]也可以使用-运算符: c = a - b print(c) # Output: [-3, -3, -3]乘法numpy.multiply()函数可用于按元素将两个数组相乘。例如,要将两个数组a和b相乘,可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.multiply(a, b) print(c) # Output: [4, 10, 18]也可以使用*运算符: c = a * b print(c) # Output: [4, 10, 18]要说明的一点是,这个是逐元素乘法,点积乘法使用dot,在后面会介绍。所以这个操作要求两个变量的维度相同,如果不同则会首先进行广播操作。除法numpy.divide()函数可用于将一个数组除以另一个元素。例如,要用数组a除以数组b,你可以使用以下代码: import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.divide(a, b) print(c) # Output: [0.25, 0.4, 0.5]也可以使用/运算符: c = a / b print(c) # Output: [0.25, 0.4, 0.5]再次说明:上述所有函数都是在输入数组上以element wise的方式应用的,也就是逐元素方式,所以它们返回一个与输入形状相同的数组。
-
文章转载自小白学视觉Numpy 是一个强大的 Python 计算库。它提供了广泛的数学函数,可以对数组和矩阵执行各种操作。本文中将整理一些基本和常用的数学操作。基本数学运算:Numpy 提供了许多基本数学函数,用于对数组执行加、减、乘、除等运算。这些函数包括 numpy.add()、numpy.subtract()、numpy.multiply() 和 numpy.divide()。线性代数函数:Numpy 还提供了许多线性代数函数,用于执行矩阵乘法、行列式和求逆等运算。这些函数包括 numpy.dot()、numpy.linalg.det() 和 numpy.linalg.inv()。统计和概率函数:Numpy 提供了许多统计和概率函数,用于执行均值、中位数、标准差和相关性等操作。这些函数包括 numpy.mean()、numpy.median()、numpy.std() 和 numpy.corrcoef()。三角函数和对数函数:Numpy 还提供了许多三角函数和对数函数,用于执行正弦、余弦、正切和对数等运算。这些函数包括 numpy.sin()、numpy.cos()、numpy.tan() 和 numpy.log()。
-
文章来源于计算机视觉研究院 ,作者计算机视觉研究院项目落地效果项目中,我们使用Ubuntu 20.04作为操作系统,Python 3.8、PyTorch 1.16.0和Cuda 11.6作为软件环境。实验采用NVIDIA 3080ti图形卡作为硬件。神经网络的实现代码是在Ultralytics 8.0.105版本的基础上修改的。在项目中的训练、测试和验证过程中使用的超参数保持一致。训练epoch被设置为300,并且输入到网络中的图像被重新缩放到640×640。在下面列出的一些结果中,所有YOLOv8和我们提出的Drone-YOLO网络都具有来自我们检测结果。在这些落地中,这些网络都没有使用预训练参数。在嵌入式应用实验中,我们使用NVIDIA Tegra TX2作为实验环境,该环境具有256核NVIDIA Pascal架构GPU,提供1.33 TFLOPS的峰值计算性能和8GB的内存。软件环境为Ubuntu 18.04 LTS操作系统、NVIDIA JetPack 4.4.1、CUDA 10.2和cuDNN 8.0.0。在VisDrone2019-test测试效果左边是Yolov8的结果,可以看出红色框中大部分目标没有检测出来
-
文章来源于计算机视觉研究院 ,作者计算机视觉研究院新框架设计介绍下图显示了我们提出的Drone-YOLO(L)网络模型的架构。该网络结构是对YOLOv8-l模型的改进。在网络的主干部分,我们使用RepVGG结构的重新参数化卷积模块作为下采样层。在训练过程中,这种卷积结构同时训练3×3和1×1卷积。在推理过程中,两个卷积核被合并为一个3×3卷积层。这种机制使网络能够在不影响推理速度或扩大模型大小的情况下学习更稳健的特征。在颈部,我们将PAFPN结构扩展到三层,并附加了一个小尺寸的物体检测头。通过结合所提出的三明治融合模块,从网络主干的三个不同层特征图中提取空间和信道特征。这种优化增强了多尺度检测头收集待检测对象的空间定位信息的能力。如下图所示,我们提出了sandwich-fusion(SF),这是一种三尺寸特征图的新融合模块,它优化了目标的空间和语义信息,用于检测头。该模块应用于颈部自上而下的层。该模块的灵感来自YOLOv6 3.0【YOLOv6 v3.0: A Full-Scale Reloading】中提出的BiC模型。SF的输入如图所示,包括主干较低阶段、相应阶段和较高阶段的特征图。目标是平衡低级特征的空间信息和高级特征的语义信息,以优化网络头部对目标位置的识别和分类。
-
文章来源于计算机视觉研究院 ,作者计算机视觉研究院背景在过去的15年里,随着无人机控制技术的逐渐成熟,无人机遥感图像以其成本效益和易获取性成为低空遥感研究领域的重要数据源。在此期间,深度神经网络方法得到了广泛的研究,并逐渐成为图像分类、目标检测和图像分割等任务的最佳方法。然而,目前应用的大多数深度神经网络模型,如VGG、RESNET、U-NET、PSPNET,主要是使用手动收集的图像数据集开发和验证的,如VOC2007、VOC2012、MS-COCO,如下图所示。与人工拍摄的真是图像相比,从无人机获得的图像显示出显著差异。这些无人机拍摄的图像如下:除了这些图像数据特征外,无人机遥感目标检测方法还有两种常见的应用场景。第一个涉及使用大型台式计算机进行飞行后数据处理。无人机飞行后,捕获的数据在台式计算机上进行处理。第二个涉及飞行过程中的实时处理,无人机上的嵌入式计算机实时同步处理航空图像数据。该应用程序通常用于无人机飞行期间的避障和自动任务规划。因此,应用神经网络的目标检测方法需要满足每个场景的不同要求。对于适用于台式计算机环境的方法,需要高检测精度。对于适用于嵌入式环境的方法,模型参数需要在一定范围内才能满足嵌入式硬件的操作要求。在满足操作条件后,该方法的检测精度也需要尽可能高。因此,无人机遥感图像中目标检测的神经网络方法需要能够适应这些数据的特定特征。它们的设计应满足飞行后数据处理的要求,可以提供高精度和召回率的结果,或者它们应设计为具有较小规模参数的模型,可以部署在嵌入式硬件环境中,用于无人机上的实时处理。
-
文章来源于计算机视觉研究院 ,作者计算机视觉研究院前景概要今天分享中,我们提出了Drone-YOLO,这是一系列基于YOLOv8模型的多尺度无人机图像目标检测算法,旨在克服与无人机图像目标检测相关的特定挑战。为了解决大场景大小和小检测对象的问题,我们对YOLOv8模型的颈部组件进行了改进。具体而言,我们采用了三层PAFPN结构,并结合了一个使用大规模特征图为小型目标量身定制的检测头,显著增强了算法检测小型目标的能力。此外,我们将夹层融合模块集成到颈部上下分支的每一层中。这种融合机制将网络特征与低级特征相结合,提供了关于不同层检测头处物体的丰富空间信息。我们使用深度可分离进化来实现这种融合,它平衡了参数成本和大的感受野。在网络主干中,我们使用RepVGG模块作为下采样层,增强了网络学习多尺度特征的能力,并优于传统的卷积层。所提出的Drone-YOLO方法已在消融实验中进行了评估,并在VisDrone2019数据集上与其他最先进的方法进行了比较。结果表明,我们的Drone-YOLO(L)在目标检测的准确性方面优于其他基线方法。与YOLOv8相比,我们的方法在mAP0.5指标上实现了显著改进,VisDrone2019测试增加了13.4%,VisDrone 2019-val.增加了17.40%。此外,只有5.25M参数的参数高效Drone-YOLO(tiny)在数据集上的性能与9.66M参数的基线方法相当或更好。这些实验验证了Drone-YOLO方法在无人机图像中目标检测任务中的有效性。
-
10月份,关于人工智能相关的问题整理如下,其中涉及模型、调优等等问题,未解决问题(已有回答,待采纳相关解决方法或者意见)1.如何有效地进行模型微调以提高性能?2. 如何有效地利用多GPU进行模型训练?3. 如何利用无监督学习进行知识蒸馏?4. 如何设计有效的数据增强方法以改善模型的泛化能力?5.如何利用迁移学习来加速模型训练和提高性能?6.如何设计有效的多任务学习算法?7.如何利用迁移学习来加速模型训练和提高性能?8.如何设计有效的多任务学习算法?9.如何处理不平衡数据集对分类算法的影响?10.如何提高人工智能系统的解释性和透明度?11.modelarts在华为云里的项目开发demo都有哪些12.华为云的图像识别规模是多大?13.modelarts和昇腾有什么区别 14. 华为图像内容审核中文本检测的词库是哪里的? 已解决问题(题主已采纳相关问题的回答)1.如何有效地利用剪枝技术进行模型压缩?2. 如何有效地进行分布式训练以提高训练速度?对于未解决或者未采纳答案的提问,欢迎大家参与讨论3.如何有效地进行模型优化以减少内存和计算资源的使用?4.如何有效地利用混合精度训练来加速模型训练? 5.如何解决过拟合问题以提高模型的泛化能力?
-
大模型技术通过多种方式提高泛化能力。以下是其中一些主要方法:增加数据量:大模型需要大量的数据进行训练,这样可以增加模型的泛化能力。通过使用更多的数据,模型可以学习到更多的模式和特征,从而更好地适应新的任务和数据。深度学习结构:大模型通常采用深度学习结构,具有多个隐藏层和大量的神经元。这种结构可以学习到更复杂的特征和模式,从而提高泛化能力。正则化:正则化是一种方法,用于约束模型的复杂度和过拟合。通过在损失函数中添加正则项,可以惩罚模型的复杂度,从而避免模型在训练过程中过拟合。这可以帮助模型更好地适应新的数据。数据增强:数据增强是一种通过对训练数据进行一系列变换来扩增数据集的方法。通过增加数据集的多样性,可以增加模型的泛化能力。例如,在图像分类任务中,可以通过旋转、平移、缩放等方式对图像进行变换,从而增加数据集的多样性。集成方法:集成方法是一种将多个模型或多个模型的不同部分组合起来形成新模型的方法。通过集成方法,可以综合多个模型的优势,从而提高泛化能力。例如,随机森林就是一种集成方法,它将多个决策树组合起来进行预测。早停法:早停法是一种在训练过程中提前停止训练的方法。通过在验证集上观察模型的性能,可以提前停止训练,从而避免过拟合。这可以帮助模型更好地泛化到新的数据。批量标准化:批量标准化是一种在训练过程中对每一层激活值进行标准化的方法。它可以加速训练并提高模型的泛化能力。这些方法可以单独或结合使用,以提高大模型的泛化能力。然而,需要注意的是,大模型虽然可以提高泛化能力,但也需要更多的计算资源和存储空间,并且可能存在过拟合的风险。因此,在使用大模型时需要进行合理的权衡和选择。
-
大模型技术具有以下关键特点:巨大的参数量:大模型的参数量通常在千万甚至亿级别以上,这使得它们能够处理更加复杂和细致的任务。强大的泛化能力:由于大模型能够从大量数据中学习,它们通常具有更强的泛化能力,能够更好地适应新任务和数据。深度结构:大模型通常采用深度学习结构,具有多个隐藏层和大量的神经元,这使得它们能够更好地处理复杂和抽象的任务。强大的学习能力和计算能力:大模型通常需要大量的计算资源和存储空间,但它们具备强大的学习和计算能力,能够处理大规模的数据集并快速收敛。自我学习和自我优化能力:大模型能够通过自我学习不断优化自身的性能,提高预测准确率和泛化能力。鲁棒性更好:由于大模型能够从大量数据中学习,它们通常具有更好的鲁棒性,能够抵抗噪声和干扰。能够处理多模态数据:大模型能够处理多种类型的数据,如文本、图像、音频等,这使得它们在多模态学习和跨模态生成方面具有优势。能够自动化许多任务:大模型能够自动化许多复杂的任务,如自动编程、自动翻译、自动摘要等,提高工作效率和准确性。能够生成创新性内容:大模型能够生成创新性的内容,如艺术作品、音乐、故事等,有助于推动创意产业的发展。能够实现个性化服务和定制化推荐:大模型能够根据用户的需求和偏好生成个性化的内容和推荐,提供更符合用户期望的服务。
-
静默活体检测是基于人脸图片中可能存在的畸变、摩尔纹、反光、倒影、边框等信息,判断图片中的人脸是否来自于真人活体,进行实人检测,有效抵御纸质翻拍照、电子翻拍照以及视频翻拍等各种攻击方式。静默活体检测支持单张图片,不支持多人脸图片。新老用户均可用该接口。 前提条件: 请确保已开通人脸识别服务 约束限制: 只支持识别JPG、PNG、JPEG、BMP格式的图片。 application/json请求的body中,请使用标准Json格式。 Base64编码中请勿使用回车换行。 系统不保存用户图片。 图片大小小于2MB,由于过大图片会导致时延较长,并且图片信息量不大,建议小于1MB。 图片分辨率小于4096*2160,图片中人脸像素大于40*40,建议120*120以上。 为保证识别效果,人脸图片建议要求如下: 光照大于200lux、无反光强光阴影现象。 人脸无遮挡、整体清晰无拖尾抖动等运动模糊。 侧脸不超过30°、俯仰角小于15°、偏转角小于15°、图片中人脸保持竖置正脸。 其他的约束限制信息请参见1.4 约束限制章节。 建议: 由于过大图片对识别算法精度无明显提升,同时会导致时延较长,建议传入图片小于1MB,一般500KB左右足够。 OBS上存储的图片也建议小于1MB。 图片中人脸像素建议120*120以上。 调试 您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。 请求示例 通过传入图片的BASE64编码,判断图片中的人脸是否来自于真人活体 POST https://{endpoint}/v1/{project_id}/live-detect-face Request Header: Content-Type: application/json X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDT... Request Body: { "image_base64": "/9j/4AAQSkZJRgABAgEASABIAAD" } 通过传入图片文件,判断图片中的人脸是否来自于真人活体 POST https://{endpoint}/v1/{project_id}/live-detect-face Request Header: X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDT... Request Body: image_file: File(图片文件) 通过传入图片URL,判断图片中的人脸是否来自于真人活体 POST https://{endpoint}/v1/{project_id}/live-detect-face Request Header: Content-Type: application/json X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDT... Request Body: { "image_url": "https://<bucket-name>.<endpoint>/<object-name>" } 使用Python3语言读取本地图片,判断图片中的人脸是否来自于真人活体 # -*- coding:utf-8 -*- import requests import base64 endpoint = '开通服务所在region的人脸识别服务域名' project_id = '开通服务所在region的用户项目ID' token = "用户获取得到的实际token值" headers = {'Content-Type': 'application/json', 'X-Auth-Token': token} url = "https://{endpoint}/v1/{project_id}/live-detect-face".format(endpoint=endpoint, project_id=project_id) image_file_path = r'./data/face-demo.png' with open(image_file_path, "rb") as bin_data: image_data = bin_data.read() image_base64 = base64.b64encode(image_data).decode("utf-8") body = {"image_base64": image_base64} response = requests.post(url, headers=headers, json=body, verify=False) print(response.text) 使用Java语言读取图片base64编码,判断图片中的人脸是否来自于真人活体 import com.huawei.trace.http.apache.httpclient.TraceApacheHttpClientBuilder; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpPost; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.TrustStrategy; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.concurrent.TimeUnit; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; /** * 此demo仅供测试使用,强烈建议使用SDK * 使用前需已配置HttpClient jar包。jar包可通过下载SDK获取 */ public class LiveDetectFace { protected static HttpClientBuilder buildClient(HttpClientBuilder httpClientBuilder) { SSLContext sslContext = null; try { sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { return true; } }).build(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e.getMessage()); } catch (KeyManagementException e) { throw new RuntimeException(e.getMessage()); } catch (KeyStoreException e) { throw new RuntimeException(e.getMessage()); } httpClientBuilder.setSSLContext(sslContext); httpClientBuilder.setConnectionTimeToLive(30, TimeUnit.SECONDS); HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.getSocketFactory()).register("https", sslSocketFactory).build(); PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry); connMgr.setMaxTotal(200); connMgr.setDefaultMaxPerRoute(100); httpClientBuilder.setConnectionManager(connMgr); return httpClientBuilder; } public static String doPost(String url, String jsonStr, String token, CloseableHttpClient client) { HttpPost post = new HttpPost(url); StringEntity entity = new StringEntity(jsonStr, ContentType.APPLICATION_JSON); post.setEntity(entity); post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); //time unit is milliseconds RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(3000).setSocketTimeout(3000).build(); post.setConfig(requestConfig); post.setHeader("X-Auth-Token", token); HttpResponse response = null; String result = ""; try { response = client.execute(post); HttpEntity responseBody = response.getEntity(); if (responseBody == null) { System.out.println("the response body is null."); return result; } else { byte[] byteStream = EntityUtils.toByteArray(responseBody); System.arraycopy(byteStream, 0, new byte[byteStream.length], 0, byteStream.length); result = new String(byteStream, StandardCharsets.UTF_8); } } catch (IOException e) { e.printStackTrace(); } return result; } public static void main(String[] args) { CloseableHttpClient client = buildClient(TraceApacheHttpClientBuilder.create()).build(); // endpoint和project_id需要替换成实际信息。 String url = "https://{{endpoint}}/v1/{{project_id}}/live-detect-face"; String jsonStr = "{ \"image_base64\": \"/9j/4AAQSkZJRgABAgEASABIAAD...\" }"; String token = "对应region的token"; String result = doPost(url, jsonStr, token, client); System.out.println(result); } } 成功响应样例 { "result":{ "alive": true, "confidence": 0.823, "picture": "/9j/4AAQSkZJRgABAQEAYABgAAD/2w..." }, "warning-list": [] } 状态码:200 失败响应样例 { "error_code": "FRS.0707", "error_msg": "Detect no face, check out your picture." } 状态码:400
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签