精华内容
下载资源
问答
  • 官方提醒:收藏满1000次(平台为了保证大家的利益收藏号上限设置为1000个收藏)的小号,无法在平台继续使用,可以添加新小号继续使用,会员严禁删除收藏夹里面所收藏的商品和店铺,一经检测发现封号拉黑处理!...
  • 误警率高是当前许多入侵检测系统难以解决的难题,文章通过模拟引入生物免疫系统,抗体对入侵抗原的动态克隆扩增过程,将传统的入侵检测规则映射为生物抗体,网络数据包中包含的网络传输模式映射为生物抗原,通过抗体对...
  • 这项工作提出了一种基于人工神经网络(ANN)的光伏系统故障诊断新技术。对于给定的一组工作条件 - 太阳能辐照度和光伏(PV)模块温度,使用仿真模型计算PV串的当前电压(IeV)特性中的一些属性,例如电流,电压和...
  • 数据挖掘中的噪声检测算法评价多以UCI真实数据为基准数据集,加入模拟的随机噪声,以除去噪声后对挖掘算法性能的提升作为检测效果的评价指标.真实数据内部结构的未知性、随机噪声水平的不确定性,评价指标的单一性使...
  • 提出了一种基于人工蜂群算法的运动目标检测方法。利用将运动目标检测问题转化为独立成分分析问题的...针对模拟运动物体和实际运动物体图像的仿真实验表明,该方法可以很好地检测出序列图像中运动物体清晰的运动轨迹。
  • 模拟内存计算如何解决边缘人工智能推理的功耗挑战 How analog in-memory computing can solve power challenges of edge AI inference 机器学习和深度学习已经成为生活中不可或缺的一部分。人工智能(AI)应用通过...

    模拟内存计算如何解决边缘人工智能推理的功耗挑战

    How analog in-memory computing can solve power challenges of edge AI inference

    机器学习和深度学习已经成为生活中不可或缺的一部分。人工智能(AI)应用通过自然语言处理(NLP)、图像分类和目标检测深深地嵌入到使用的许多设备中。大多数人工智能应用程序都是通过基于云的引擎提供服务的,这些引擎对用途很好,比如在Gmail中输入电子邮件响应时,可以得到单词预测。

    虽然很享受这些人工智能应用的好处,但这种方法带来了隐私、功耗、延迟和成本挑战。如果有一个本地处理引擎能够在数据本身的原点执行部分或全部计算(推断),那么这些挑战就可以得到解决。这在传统的数字神经网络实现中很难做到,在传统的数字神经网络中,内存成为一个耗电的瓶颈。这个问题可以通过多级存储器和使用模拟内存计算方法来解决,这种方法使处理引擎能够满足在网络边缘执行人工智能推理所需的低得多的毫瓦到微瓦的功率要求。

    云计算的挑战

    当人工智能应用程序通过基于云的引擎提供服务时,用户必须(自愿或不情愿地)上传一些数据到云,在那里计算引擎处理数据,提供预测,并将预测发送到下游用户消费。
    在这里插入图片描述
    图1:从边缘到云的数据传输。

    与此过程相关的挑战概述如下:

    隐私和安全问题:对于始终在线、随时感知的设备,人担心个人数据(和/或机密信息)在上传过程中或在数据中心的有效期内被滥用。

    不必要的功耗:如果每一个数据位都将被云化,那么将消耗来自硬件、无线电、传输以及可能在云中不需要的计算中消耗的能量。

    小批量推断的延迟:如果数据源于边缘,有时可能需要一秒钟或更长时间才能从基于云的系统获得响应。对于人类的感官来说,任何超过100毫秒(ms)的延迟都是显而易见的,并且可能是令人讨厌的。

    数据经济需要有意义:传感器无处不在,而且价格低廉;然而,产生了大量数据。将每一位数据上传到云端并进行处理是不经济的。

    为了使用本地处理引擎解决这些挑战,执行推理操作的神经网络模型必须首先使用给定的数据集针对所需的用例进行训练。通常,这需要高计算(和内存)资源和浮点运算。因此,机器学习解决方案的训练部分仍然需要在公共或私有云(或本地GPU、CPU、FPGA场)上使用数据集来生成最优的神经网络模型。一旦神经网络模型准备好了,由于神经网络模型不需要反向传播来进行推理操作,因此可以用小型计算引擎进一步优化模型。推理机通常需要大量的乘法累加(MAC)引擎,然后是一个激活层,如整流线性单元(ReLU)、sigmoid或tanh,这取决于神经网络模型的复杂度,以及层与层之间的池层。

    大多数神经网络模型需要大量的MAC操作。例如,即使是一个相对较小的“1.0 MobileNet-224”模型也有420万个参数(权重),并且需要5.69亿个MAC操作来执行推理。由于大多数模型都是由MAC操作控制的,这里的重点将放在机器学习计算的这一部分,并探索创建更好解决方案的机会。一个简单的,完全连接的两层网络如下图2所示。
    在这里插入图片描述
    图2:完全连接的两层神经网络。

    输入神经元(数据)用第一层权值进行处理。第一层的输出神经元然后用第二层权重进行处理,并提供预测(比如,模型是否能够在给定的图像中找到猫的脸)。这些神经网络模型使用“a点积”来计算每一层中的每个神经元,如下式所示(为了简化,省略方程中的“偏差”项):
    在这里插入图片描述
    MemoryBottleneck In Digital Computing

    数字计算中的存储瓶颈

    在数字神经网络实现中,权值和输入数据存储在DRAM/SRAM中。权重和输入数据需要转移到MAC引擎进行推理。如下面的图3所示,这种方法在获取模型参数和将数据输入到发生实际MAC操作的ALU时会消耗掉大部分的能量。
    在这里插入图片描述
    图3:机器学习计算中的内存瓶颈。

    从能量的角度来看,一个典型的使用数字逻辑门的MAC操作消耗大约250飞秒焦耳(fJ,或10-15焦耳)的能量,但在数据传输过程中消耗的能量比计算本身多出两个数量级,并且在50微微焦耳(pJ,或10-12焦耳)到100pJ的范围内。公平地说,有许多设计技术可以最大限度地减少从内存到ALU的数据传输;但是,整个数字方案仍然受到Von Neumann架构的限制,因此这为减少功耗提供了很大的机会。如果执行MAC操作的能量可以从~100pJ减少到pJ的一小部分呢?

    Removing Memory Bottleneck with Analog In-Memory Computing

    用模拟内存计算消除内存瓶颈

    当内存本身可用于减少计算所需的功耗时,在边缘执行推理操作变得省电。使用内存计算方法可以最大限度地减少必须移动的数据量。这反过来又消除了数据传输过程中的能量浪费。能量消耗被进一步最小化使用闪光灯电池,可以以超低的活动功耗工作,并且在待机模式下几乎没有能量消耗。

    这种方法的一个例子就是memBrain™ 技术来自硅存储技术公司,一家微芯片技术公司。基于SST的SuperFlash®内存技术,该解决方案包括内存计算架构,可在存储推理模型权重的位置进行计算。这消除了MAC计算中的内存瓶颈,因为权重没有数据移动,只有输入数据需要从输入传感器(如摄像机或麦克风)移动到内存阵列。

    这种存储器的概念基于两个基本原理:(a)晶体管的模拟电流响应基于其阈值电压(Vt)和输入数据,以及(b)基尔霍夫电流定律,即在一个点上相遇的导体网络中电流的代数和为零。

    同样重要的是要了解基本的非易失性存储器(NVM)位单元,在这种多级存储器体系结构中使用。下图(图4)是带有共享擦除门(EG)和源线(SL)的两个ESF3(嵌入式超级闪存第三代)位单元的横截面。每个位单元有五个终端:控制门(CG)、工作线(WL)、擦除门(EG)、源线(SL)和位线(BL)。位单元上的擦除操作是通过在例如上施加高压来完成的。编程操作是通过在WL、CG、BL和SL上施加高/低压偏置信号来完成的。读取操作是通过在WL、CG、BL和SL上施加低压偏置信号来完成的。
    在这里插入图片描述
    图4:SuperFlash ESF3单元。

    利用这种存储器结构,用户可以通过细粒度编程操作在不同的Vt级别上对存储器位单元进行编程。该存储技术利用一种智能算法来调整存储单元的浮栅(FG)Vt,以实现输入电压的特定电流响应。根据终端应用的要求,电池可编程为线性或亚阈值工作区。

    图5演示了在内存单元上存储和读取多个级别的能力。假设试图在内存单元中存储2位整数值。对于这个场景,需要用2位整数值(00、01、10、11)中的四个可能值之一对内存数组中的每个单元进行编程。下面的四条曲线是四种可能状态中的每一种的IV曲线,电池的电流响应取决于施加在CG上的电压。
    在这里插入图片描述
    图5:ESF3单元中的Vt电平编程。

    带内存计算的乘法累加运算

    每个ESF3细胞都可以被建模为可变电导(gm)。ESF3电池的电导取决于编程单元的浮栅电压。将训练模型的权值编程为存储单元的浮栅Vt,因此,单元的gm表示训练模型的权重。当输入电压(Vin)施加在ESF3电池上时,输出电流(Iout)将由方程式Iout=gm*Vin给出,这是输入电压与存储在ESF3电池上的重量之间的乘法运算。

    下面的图6说明了小阵列配置(2×2阵列)中的乘法累加概念,在这种配置中,累加操作是通过增加连接到同一列(例如I1=I11+I21)的单元(来自乘法运算)的输出电流来执行的。根据应用,激活功能可以在ADC块内执行,也可以在存储器块外部用数字实现来实现。
    在这里插入图片描述
    图6:使用ESF3数组(2×2)进行乘法累加运算。

    为了在更高的层次上进一步说明这一概念,来自训练模型的单个权重被编程为存储单元的浮栅Vt,因此来自训练模型每一层的所有权重(假设一个完全连接的层)都可以被编程到一个物理上看起来像权重矩阵的内存阵列上,如图7所示。
    在这里插入图片描述
    图7:用于推理的权重矩阵内存数组。

    对于推理操作,首先使用数模转换器(DAC)将数字输入(比如图像像素)转换为模拟信号并应用于存储器阵列。然后,该阵列对给定的输入向量并行执行数千个MAC操作,并产生输出,这些输出可以进入各个神经元的激活阶段,然后可以使用模数转换器(ADC)将其转换回数字信号。然后,数字信号在进入下一层之前被处理为池。

    这种类型的内存结构非常模块化和灵活。许多memBrain瓦片可以缝合在一起,用权重矩阵和神经元混合构建各种大模型,如图8所示。在这个例子中,一个3×4的磁贴配置被缝合在一起,并且数据可以通过共享总线从一个磁贴移动到另一个磁贴。
    在这里插入图片描述
    图8:memBrain™ 是模块化的。

    到目前为止,主要讨论了这种架构的硅实现。软件开发工具包(SDK)(图9)的可用性有助于解决方案的部署。除了硅之外,SDK还有助于推理引擎的部署。
    在这里插入图片描述
    图9:memBrain™ SDK流。

    SDK流与训练框架无关。用户可以在任何可用的框架中创建神经网络模型,如TensorFlow、Pythorch或其框架,根据需要使用浮点计算。一旦建立了一个模型,SDK将帮助量化训练过的神经网络模型,并将其映射到内存阵列中,在那里可以使用来自传感器或计算机的输入向量执行向量矩阵乘法。

    结论

    这种多级内存方法及其内存计算能力的优点包括:

    极低功耗:该技术专为低功耗应用而设计。第一级功耗优势来自于这样一个事实,即解决方案是内存计算,因此在计算过程中,SRAM/DRAM的数据和权重传输不会浪费能量。第二个能量优势源于这样一个事实:闪光电池在亚阈值模式下工作,电流值非常低,所以有源功耗非常低。第三个优点是,在待机模式下几乎没有能量消耗,因为非易失性存储单元不需要任何电源来保存数据,以备永远在线。该方法也非常适合于利用权重和输入数据的稀疏性。如果输入数据或权重为零,则内存位单元不会被激活。

    较低的封装尺寸:该技术使用分离门(1.5T)单元架构,而数字实现中的SRAM单元基于6T架构。此外,与6T SRAM单元相比,该单元是更小的比特单元。另外,一个单元单元可以存储整个4位整数值,而SRAM单元需要4×6=24个晶体管来存储。这提供了一个大大更小的片上占用空间。

    较低的开发成本:由于内存性能瓶颈和von Neumann架构的限制,许多专用设备(如Nvidia的Jetsen或Google的TPU)倾向于使用更小的几何结构来获得每瓦的性能,这是解决边缘人工智能计算挑战的一种昂贵方法。随着使用模拟内存计算方法的多级存储器方法,计算在闪存单元中在芯片上进行,因此可以使用更大的几何结构,并减少掩模成本和交付周期。

    边缘计算应用前景广阔。然而,在边缘计算能够起飞之前,还需要解决电力和成本方面的挑战。一个主要的障碍可以通过使用在flash单元中执行片上计算的存储器方法来消除。这种方法利用了一种经过生产验证、事实上是标准类型的多级内存技术解决方案,该解决方案针对机器学习应用程序进行了优化。

    展开全文
  • 赫尔辛基大学的研究人员开发了一种技术,其中计算机通过检测人脑信号来模拟视觉感知。从某种意义上讲,就像计算机试图想象人类在想什么。这种想象的结果是,计算机能够产生全新的信息,例如从未见过的虚构图像。 ...

    赫尔辛基大学的研究人员开发了一种技术,其中计算机通过检测人脑信号来模拟视觉感知。从某种意义上讲,就像计算机试图想象人类在想什么。这种想象的结果是,计算机能够产生全新的信息,例如从未见过的虚构图像。

    参与者对计算机生成的图像进行了评估。它们几乎与参与者所想的功能完全匹配。


    该技术基于一种新颖的大脑 - 计算机界面。以前,类似的脑机接口已经能够执行从脑到计算机的单向通信,例如拼写单个字母或移动光标。

    据了解,这项新研究是首次使用人工智能方法同时对计算机的信息表示和大脑信号进行建模的研究。与参与者关注的视觉特征相匹配的图像是通过人脑反应与生成神经网络之间的相互作用而生成的。

    神经自适应生成模型

    研究人员称这种方法为神经自适应生成模型。共有31名志愿者参加了一项评估该技术有效性的研究。记录参与者的脑电图时,向他们展示了数百张AI生成的,外貌各异的人的图像。

    要求受试者集中注意某些特征,例如看起来老旧或微笑的脸。在查看一系列快速呈现的脸部图像时,将对象的EEG馈入神经网络,该神经网络推断出大脑是否检测到任何图像与对象所寻找的内容相匹配。


    基于此信息,神经网络将其估计值调整为人们正在思考的面孔类型。最终,计算机对生成的图像进行了评估,使其与参与者所想的功能几乎完全匹配。实验的准确性为83%。

    “这项技术将人类的自然反应与计算机创建新信息的能力结合在一起。在实验中,只要求参与者查看计算机生成的图像。计算机反过来对显示的图像和人类对图像的反应进行建模。通过使用人类的大脑反应来生成图像。由此,计算机可以创建出与用户意图相匹配的全新图像。”芬兰赫尔辛基大学芬兰学院研究员,哥本哈根大学副教授Tuukka Ruotsalo说。
    无意识的态度可能会暴露出来

    生成人脸图像只是该技术潜在用途的一个例子。该研究的一个实际好处可能是计算机可以增强人类的创造力。

    Ruotsalo说:“如果您想绘制或说明某事,但无法做到,则计算机可能会帮助您实现目标。它可以观察注意力的焦点并预测您想要创建的内容。”研究人员认为,该技术可用于获得对感知和我们脑海中潜在过程的理解。

    “这项技术不能识别思想,而是对我们与精神类别的联系做出反应。因此,尽管我们无法找出参与者想出的特定' 老人 ' 的身份,但我们可能会了解他们相信与老年有关。因此,我们相信这可能为了解社会,认知和情感过程提供一种新途径。”高级研究员MichielSpapé说。

    从心理学角度来看,这也很有趣。

    “一个人对老人的想法可能与另一个人的想法大不相同。我们目前正在发现我们的技术是否可能暴露无意识的联想,例如,通过观察计算机是否总是将老年人渲染成微笑的男人。”

    展开全文
  • 为了识别复杂的探地雷达图像,建立铁路路基病害图像数据库,针对各种常见的路基...开挖一个人工道碴陷槽,用探地雷达实测,并进行正演模拟。实测结果和模拟结果一致,表明了该模拟方法用于实际复杂路基检测的可行性。
  • 本文提出一种新的针对移动镜头下的运动目标检测仿生算法,通过模拟人眼的视觉感知实现移动镜头下的目标检测,首先用3DGabor滤波器组提取目标的运动能量,接着用大尺度的环绕消除大量的背景信息,然后提取目标的运动和...
  • 叶面面积的减少会导致普通豆类作物的减产。... 检测到开花和豆荚形成的下降幅度最大。 通过回归分析,出苗后42天进行100%的脱叶处理,可大大降低产量。 表现出与产量更好关系的评估参数是每株豆荚的数量。
  • 为了验证所构建的损伤指标的有效性,通过人工切除截面质量来模拟不同损伤程度、不同损伤位置和双损伤的情景。结果表明:损伤识别指标对不同损伤程度、不同损伤位置和双损伤均能准确定位,并可对损伤轻重程度进行定性...
  • 有关小波神经网络的文章-根据植物茎叶图像模拟根系图像的人工神经网络算法.pdf 我收集的最新的几篇小波神经网络的文章,大家共享 小波神经网络初始值的选择.pdf 【摘要】小波神经网络参数初始值影响着网络收敛速度...
  • 在低质量模拟中训练CNN以检测现实世界中的障碍 该存储库包含在CRV 2020上展示的用于本文的数据集和模型的代码以及链接: 目录 介绍 图1:训练和使用带有人工光流(OF)的CNN避免碰撞的过程的简化流程图。 抽象的 ...
  • 视频监控安防平台-AI人工智能分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度) 可以模拟分析

             AI人工智能分析-人脸识别和分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度)

           

    人工智能(Artificial Intelligence),英文缩写为AI。它是研究开发用于模拟延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
    人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。
    人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。
    人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。
            可以模拟分析大部分物体,识别率在97%左右,下面简单粘贴下头文件和使用方式,如果感兴趣的朋友可以联系我拿库和demo使用。提供的接口包含了:人脸检测跟踪接口、获取特征长度、提取用于人脸特征、比较相似度

     头文件:

    #ifndef ADFACESDK_H
    #define ADFACESDK_H
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #define AD_FACE_API __attribute__((visibility("default")))
    
    // 通用错误码
    typedef enum ad_errcode
    {
        AD_OK = 0,							// 成功 or 合法
    
        AD_EMPTY_FRAME_ERR = 20000,		    // 空图像
        AD_UNSUPPORT_FORMAT_ERR,			// 图像格式不支持
        AD_ROI_ERR,						    // ROI设置失败
        AD_MINMAX_ERR,						// 最小最大人脸设置失败
        AD_OUTOF_RANGE_ERR,                 // 数据范围错误
    
        AD_UNAUTHORIZED_ERR,				// 未授权
        AD_UNINITIALIZED_ERR,				// 尚未初始化
        AD_BUILDIN_MODEL_ABSENCE,			// 没有内置模型
        AD_PARAM_INVALID,                   // 参数无效
        AD_DETECT_MODEL_ERR,				// 加载检测模型失败
        AD_KEYPT_MODEL_ERR,				    // 加载关键点模型失败
        AD_QUALITY_MODEL_ERR,				// 加载质量评估模型失败
        AD_EXCEEDMAXHANDLE_ERR,		        // 超过授权最大句柄数
        AD_DET_ERR,						    // 检测失败
        AD_TRACK_ERR,						// 跟踪失败
        AD_KEYPT_ERR,						// 提取关键点失败
        AD_ALIGN_ERR,						// 对齐人脸失败
        AD_QUALITY_ERR,					    // 质量评估失败
    
        AD_RECOG_FEATURE_MODEL_ERR,		    // 加载特征识别模型失败
        AD_RECOG_ALIGNEDFACE_ERR,		    // 对齐图片数据错误
        AD_RECOG_MALLOCMEMORY_ERR,          // 预分配特征空间不足
        AD_RECOG_FILEDDATA_ERR,		        // 用于注册的特征数据错误
        AD_RECOG_PROBEDATA_ERR,		        // 用于检索的特征数据错误
        AD_RECOG_EXCEEDMAXFEASPEED,		    // 超过授权最大提特征速度
        AD_RECOG_EXCEEDMAXCOMSPEED,		    // 超过授权最大比对速度
    
        AD_ATTRI_AGEGENDER_MODEL_ERR,       // 加载年龄性别模型失败
        AD_ATTRI_EVAL_AGEGENDER_ERR,        // 年龄性别识别失败
        AD_ATTRI_NATIONALITY_MODEL_ERR,     // 加载国籍年龄段模型失败
        AD_ATTRI_EVAL_NATIONALITY_ERR,      // 国籍年龄段识别失败
    } ad_errcode_t;
    
    // 图像
    typedef struct
    {
        char* data;								// 图像数据
        int   width;							// 宽, JPG等二进制图可不设
        int   height;							// 高, JPG等二进制图可不设
    } ad_img_t;
    
    // 人脸框
    typedef struct
    {
        int    x;
        int    y;
        int    width;
        int    height;
    } ad_facepos_rect_t;
    
    // 对齐人脸
    #define AD_ALIGNED_SIZE 128
    typedef struct
    {
        char   data[AD_ALIGNED_SIZE * AD_ALIGNED_SIZE];		     // 图像数据
        int    width;											 // 宽
        int    height;											 // 高
        int    nChannels;										 // 图像通道
    } ad_aligned_face_t;
    
    // 关键点
    #define AD_MAX_KEYPT_NUM 5
    typedef struct
    {
        float x;
        float y;
    } ad_point_t;
    
    typedef struct
    {
        ad_point_t	    points[AD_MAX_KEYPT_NUM];					        // 关键点
        int				nkeypt;											// 关键点个数
    } ad_keypt_t;
    
    // 人脸综合结构
    typedef struct AD_face_res
    {
        int					 trackId;			// 人脸ID(ID<0表示没有进入跟踪)
        ad_facepos_rect_t	 faceRect;			// 人脸框
        ad_keypt_t		     keypt;             // 关键点
        ad_aligned_face_t	 faceAligned;		// 对齐人脸
        float                score;
    } ad_face_res_t;
    
    // 接口参数
    typedef struct
    {
        int roiX;								// roi, 默认整帧图像0, 0, 0, 0
        int roiY;
        int roiWidth;
        int roiHeight;
    
        int maxFaceNumPerImg;					// 每帧最大人脸数,默认20
        int minSize;							// 人脸尺寸范围, pc端默认(30 ~ 1000);移动端默认(100 ~ 400)
        int maxSize;
        int nMinNeighbors;						// 一般1-10,越大检出率越低,但误检越小,默认3
        int globleDetFreq;						// 全局检测频率, 默认10
    
        int b_track;							// 是否开启单目标跟踪, 默认开启. 0关闭,非0开启
        int det_frame_for_new;					// 预跟踪帧数,默认3
        int max_frame_since_lost;				// 跟丢到退出跟踪的帧数,默认150
    }ad_det_param_t;
    
    
    /**
     * 功能:从模型文件创建检测器
     * 输入:
     *		pFaceModelFile      - 人脸检测模型文件
     *      pLicence            - 授权码
     * 输出:
     *      errCode             - 成功返回AD_OK,失败返回其他
     * 返回值:
     *		检测器句柄          - 成功返回句柄,失败返回0
     */
    AD_FACE_API
    void* adCreateFaceHandle(ad_errcode_t* errCode,
                            const char* pFaceModelFile,
                            const char* pLicence,
                            int bGpu);
    
    /**
     * 功能:释放检测器
     * 输入:
     *		pDetector - 检测器句柄
     * 输出:
     *      无
     * 返回值:
     *		无
     */
    AD_FACE_API
    void adReleaseFaceHandle(void* pDetector);
    
    
    /**
     * 功能:获取检测器参数
     * 输入:
     *		pDetector    - 检测器句柄
     * 输出:
     *      param        - 检测器参数
     * 返回值:
     *		ad_errcode_t - 成功返回AD_OK,失败返回其他
     */
    AD_FACE_API
    ad_errcode_t adGetFaceParam(void* pDetector, ad_det_param_t* param);
    
    
    /**
     * 功能:设置检测器参数(必须先调用ADGetFaceParam再使用此函数)
     * 输入:
     *      pDetector - 检测器句柄
     *		param     - 参数
     * 输出:
     *      无
     * 返回值:
     *		ad_errcode_t - 成功返回AD_OK,失败返回其他
     */
    AD_FACE_API
    ad_errcode_t adSetFaceParam(void* pDetector, const ad_det_param_t* param);
    
    
    
    /**
     * 功能:人脸检测跟踪接口
     * 输入:
     *      pDetector    - 检测器句柄
     *		filePath    -  图片路径
     *		pFrameImg     - ad_img_t 信息,内存需要外部释放
     * 输出:
     *		pFaceBuffer  - 存放检测结果的数组
     *		nFaceNum     - 实际被检测到的人脸数
     * 返回值:
     *		ad_errcode_t - 成功返回AD_OK,失败返回其他
     */
    AD_FACE_API
    ad_errcode_t adParseImage(void*          pDetector,
                              char *         filePath,
                              ad_img_t*      pFrameImg);
    
    AD_FACE_API
    ad_errcode_t adReleaseImage(void*          pDetector,
                               ad_img_t*      pFrameImg);
    
    /**
     * 功能:人脸检测跟踪接口
     * 输入:
     *      pDetector    - 检测器句柄
     *		pFrameImg    - 被检测图像
     *		iBuffLen     - 存放检测结果pFaceBuffer数组的元素个数
     * 输出:
     *		pFaceBuffer  - 存放检测结果的数组
     *		nFaceNum     - 实际被检测到的人脸数
     * 返回值:
     *		ad_errcode_t - 成功返回AD_OK,失败返回其他
     */
    AD_FACE_API
    ad_errcode_t adFaceDetection(void*          pDetector,
                             ad_img_t*      pFrameImg,
                             ad_face_res_t* pFaceBuffer,
                             int            iBuffLen,
                             int*           nFaceNum);
    
    /**
     * 功能:获取特征长度
     * 输入:
     *		pRecogHandle - 识别句柄
     * 输出:
     *      无
     * 返回值:
     *		int          - 特征长度
     */
    AD_FACE_API
    int adGetFeatureLength(void* pDetector);
    
    
    /**
     * 功能:提取用于人脸特征
     * 输入:
     *		pRecogHandle  - 识别句柄
     *      alignedFaces  - 对齐的人脸数组
     *      iAlignFaceNum - 对齐的人脸数组个数
     * 输出:
     *      pFeatueData    - 返回的特征数据,需要预先分配足够空间
     *      nFeatureLength - 传入pFeatueData的长度,输出实际使用的长度
     * 返回值:
     *		ad_errcode_t   - 成功返回AD_OK,失败返回其他
     */
    AD_FACE_API
    ad_errcode_t adGetFeature(void*              pDetector,
                               ad_aligned_face_t* alignedFace,
                               void*              pFeatueData,
                               int                nFeatureLength);
    
    /**
     * 功能:比较相似度
     * 输入:
     *		pRecogHandle  - 识别句柄
     *      pFirstFeature    - 第一个特征
     *      pSecondFeature  - 第二个特征
     *      nFeatureLength  - 用于注册的特征长度
     * 输出:
     *      pScores       - 返回的相似度分数
     * 返回值:
     *		ad_errcode_t  - 成功返回AD_OK,失败返回其他
     */
    AD_FACE_API
    ad_errcode_t adComputeMatchScore(void*   pDetector,
                                     const void* pFirstFeature,
                                     const void* pSecondFeature,
                                     int         nFeatureLength,
                                     float*      pScores);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif // ADFACESDK_H
    

    使用方法:

    #include <iostream>
    #include <stdlib.h>
    #include <assert.h>
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <time.h>
    #include "adfacesdk.h"
    
    using namespace std;
    
    #define MAX_FACES 200
    
    #define DGB printf
    
    
    int unit_test(int argc,char *argv[])
    {
        ad_errcode_t    errCode;
        ad_img_t        stFrameImg;
        ad_face_res_t   FaceBuffer[MAX_FACES];
        int             nFaceNum=0;
        float           Scores;
    
        if(argc!=4)
        {
            printf("%s modelfile image1 image2\n",argv[0]);
            return -1;
        }
    
        int off=0;
        int counter=0;
    
        while(true)
        {
            if(off>1)
                off=0;
    
            void* pDetector=adCreateFaceHandle(&errCode,argv[1],NULL,off++);
            assert(pDetector);
    
            int nFeatureLength=adGetFeatureLength(pDetector);
            assert(nFeatureLength>0);
            char *pFeatueData[2]={new char[nFeatureLength],new char[nFeatureLength]};
    
            DGB("nFeatureLength:%d\n",nFeatureLength);
    
            clock_t start,finish;
            double totaltime;
            start=clock();
    
            assert(AD_OK==adParseImage(pDetector,argv[2],&stFrameImg));
            assert(AD_OK==adFaceDetection(pDetector,
                                          &stFrameImg,
                                          FaceBuffer,
                                          MAX_FACES,
                                          &nFaceNum));
            free(stFrameImg.data);
            assert(nFaceNum==1);
            assert(AD_OK==adGetFeature(pDetector,&FaceBuffer[0].faceAligned,pFeatueData[0],nFeatureLength));
    
    
            assert(AD_OK==adParseImage(pDetector,argv[3],&stFrameImg));
            assert(AD_OK==adFaceDetection(pDetector,
                                          &stFrameImg,
                                          FaceBuffer,
                                          MAX_FACES,
                                          &nFaceNum));
            free(stFrameImg.data);
            assert(nFaceNum==1);
            assert(AD_OK==adGetFeature(pDetector,&FaceBuffer[0].faceAligned,pFeatueData[1],nFeatureLength));
    
    
            assert(AD_OK==adComputeMatchScore(pDetector,pFeatueData[0],pFeatueData[1],nFeatureLength,&Scores));
    
            DGB("Scores:%0.2f\n",Scores);
    
            finish=clock();
            totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
            DGB("%d usetime:%f (sec)\n",counter,totaltime);
    
            adReleaseFaceHandle(pDetector);
    
            if(counter++%100==0)
                printf("counter:%d\n",counter);
    		break;
        }
    
        return 0;
    }
    
    int unit_test_list(int argc,char *argv[])
    {
    
        if(argc!=2)
        {
            printf("%s modelfile\n",argv[0]);
            return -1;
        }
        ad_errcode_t    errCode;
        ad_img_t        stFrameImg;
        ad_face_res_t   FaceBuffer[MAX_FACES];
        int             nFaceNum=0;
    
        void* pDetector=adCreateFaceHandle(&errCode,argv[1],NULL,1);
        assert(pDetector);
    
        int nFeatureLength=adGetFeatureLength(pDetector);
        assert(nFeatureLength>0);
        char *pFeatueData[2]={new char[nFeatureLength],new char[nFeatureLength]};
    
        DGB("nFeatureLength:%d\n",nFeatureLength);
    
        std::ifstream fin("test_images_list.txt", std::ios::in);
        char line[8192] = { 0 };
        int counter=0;
        while (fin.getline(line, sizeof(line)))
        {
            nFaceNum=0;
            clock_t start,finish;
            double totaltime;
            start=clock();
            assert(AD_OK==adParseImage(pDetector,line,&stFrameImg));
            assert(AD_OK==adFaceDetection(pDetector,
                                          &stFrameImg,
                                          FaceBuffer,
                                          MAX_FACES,
                                          &nFaceNum));
            free(stFrameImg.data);
            for(int i=0;i<nFaceNum;i++)
            {
                assert(AD_OK==adGetFeature(pDetector,&FaceBuffer[i].faceAligned,pFeatueData[0],nFeatureLength));
            }
            finish=clock();
            totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
            DGB("[%08d] Count:%04d usetime:%0.2f (sec) %s\n",counter++,nFaceNum,totaltime,line);
        }
        fin.clear();
        fin.close();
        return true;
    }
    
    
    int main(int argc,char *argv[])
    {
        unit_test(argc,argv);
        //unit_test_list(argc,argv);
    }
    




    展开全文
  • 子域名检测大师(自由博客)专版是通过模拟人工手动操作,实现自扫描的高效子域名扫描爆破检测工具。扫描模式支持:服务器接口扫描、暴力检测、同服务器下检测、跨服务器检测
  • 人工智能与认知过程 摘要 人工智能是研究设计和应用智能机器或智能系统来模拟人类智能活动的能 力以延伸人类智能的科学而认知过程是指人们认识活动的过程即个体对感 觉信号接收检测转换简约合成编码储存提取重建概念...
  • 针对目前确定采煤机滚筒截割状态主要靠人工观察和手动动作调整的情况,基于MEMS双轴加速度传感器与单片机配合,研制了一种智能型异常冲击负荷检测装置。采用此检测装置能对采煤机摇臂滚筒的振动状态进行自动监测,采煤...
  • 文章目录一....涉及到的一些技术点三....6s)、模拟人工操作进行滑动等) 4.可能需要的一些其他功能,例如文章点赞 5.点击“后退(&amp;lt;)”按钮 6.点击停止阅读按钮 7.如果需要做群控类设备的...

    安卓模拟点击方案调研


    一.模拟点击需求


    1.点击"开始阅读"
    2.进入目标页面进行浏览
    3.此处可能需要加入防作弊检测手段,例如随机停留时长(>6s)、模拟人工操作进行滑动等)
    4.可能需要的一些其他功能,例如文章点赞
    5.点击“后退(<)”按钮
    6.点击停止阅读按钮
    7.如果需要做群控类设备的话此处可能需要提取一些其他信息进行上报,如成功阅读数、
      今日阅读积分,用户ID等信息
    8.点击开始阅读执行新一轮操作
    

    二.涉及到的一些技术点


    1.模拟点击方案
    2.控件的识别
    3.页面数据文字的提取		
    4.后台通信数据上传等
    5.可能需要规避的一些作弊检测方案(如时间、IP、设备指纹信息,行为检测等)	
    

    三.常用模拟点击方案


    1.按键精灵类方案(图色识别+UI布局文件解析)
    2.一些APP自动化测试框架如Instrumentation、UIAutomato等(基于UI布局文件解析)
    3.基于安卓的无障碍模式(AccessibilityService),早期微信抢红包类外挂多基于此,
      包括一些应用商店APP的自动安装功能
    

    四.模拟点击方案分析

    方案 技术原理 权限 是否支持webview页面 联网权限
    按键精灵类 图色识别+UI布局文件解析 root 可配置
    UIAutomator UI布局文件解析 shell
    AccessibilityService UI布局文件解析 需主控进程开启无障碍模式 可配置
    ADB+PC PC调用ADB进行发送操作命令+截图本地识别 shell

    五.方案选型

    1.如果需要操作webview类界面,目前只能使用按键精灵类方案,且需要设备具有ROOT权限,ADB+PC需要使用电脑进行控制,基本原理就是通过ADB进行截图,电脑端进行图片识别计算坐标,通用性不强.
    2.如果不需要操作webview类界面,最好的方案就是基于无障碍模式进行处理,该方案不需要特殊权限,只需要安装后在系统设置里开启应用的辅助功能即可

    此前开发过的项目是基于UIAutomator进行实现的,主要涉及到应用自动安装,设置开机激活添加白名单等操作,实现原理是通过一台基于linux的装机盒子后台以shell权限执行模拟点击进程,最新的UIAutomator2已经支持操作webview但是必须要手机与电脑进行连接,且需要被操作应用本身配置清单文件,通用性不强

    展开全文
  • 人工智能与认知过程 摘要 人工智能是研究设计和应用智能机器或智能系统来模拟人类智能活动的能力以延伸人类智能的科学而认知过程是指人们认识活动的过程即个体对感觉信号接收检测转换简约合成编码储存提取重建概念...
  • 大家看到这个题目时,也许不知道这个东西有什么用,为...三是人工智能,要让机器人模拟人去看所有东西,这样才会感觉到人的注意力思维。其实应用的领域还有很多,比如用手机照相时,就可以动态地提示当前照片最显...
  • 产品表缺陷检测属于机器视觉技术的一种,就是利用机器视觉模拟人类视觉的功能,从具体的实物进行图像的采集处理、计算、最终进行实际检测、控制和应用。 当今消费类电子产品的费者们都期待开箱看到完美无瑕的产品。...
  • [人工智能]AI移动自动化测试

    千次阅读 2017-03-28 17:14:20
    1. 实现的效果开发者通过上传移动端软件(apk,pkg等)到云端,点击云端自动化测试来对上传的软件进行自动化测试,分析和bug定位,最终输出bug检测结果.2.实现的步骤这里先列出大致的一个实现步骤,然后对每一步如何做,在列...
  • 环境“产品环境适应性实验”是指把产品、材料或样品暴露于自然典型环境、实际使用环境或人工模拟环境中经受环境应力的作用,从而检验其在实际中遇到的使用、运输和存储条件下各种功能、性能的变化,并做出相应的评价...
  • 在图灵的时代,科学家就试图通过模拟人的意识和思维来处理人类才能完成的复杂任务,并提出图灵测试检测机器是否具有真正的“智慧”。随着计算机被发明,信息存储和处理问题被解决,人工智能有了落地的可能。1956年在...
  • 遗传学概述 达尔文进化论物竞天择适者生存 遗传学认为遗传信息封装在...遗传算法Genetic Algorithm, GA 遗传算法模拟自然界中的生命进化机制是具有生存检测的迭代过程的搜索算法 遗传算法尤其适用于传统方法难以实
  • 机器视觉主要用计算机来模拟人的视觉功能,但并不仅仅是人眼的简单延伸,更重要的是具有人脑的一部分功能一一从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制。将机器视觉技术应用于...
  • 人工智能发展与模型定制化趋势

    千次阅读 2020-12-28 11:18:13
    在图灵的时代,科学家就试图通过模拟人的意识和思维来处理人类才能完成的复杂任务,并提出图灵测试检测机器是否具有真正的“智慧”。随着计算机被发明,信息存储和处理问题被解决,人工智能有了落地的可能。1956年在...
  • 分析了用MFL法检测管道缺陷时缺陷漏磁信号分辨率的特征,设计计算机控制的管道漏磁场分布测试系统检测分析管道内漏磁场,优化设计用于小管径、厚管壁海底管道(ф73×...实验验证了机器人对人工模拟缺陷的检测能力。
  • CSDN 学院人工智能工程师课程大纲 第一阶段 机器... 机器学习任务监督学习分类回归 数据集探索单特征分布模拟及 学习环境配置常用软件环境配 非监督学习聚类降维半监督学习 可视化离群点检测多特征相 置及机器学习库a

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

检测模拟人工