EdgerOS 中的 AI 图像引擎,让开发者实现 AI 视觉开发自由!

leecactus0 2022-08-05 17:17:58

AI 视觉是为了让计算机利用摄像机来替代人眼对目标进行识别,跟踪并进一步完成一些更加复杂的图像处理。这一领域的学术研究已经存在了很长时间,但直到 20 世纪 70 年代后期,当计算机的性能提高到足以处理图片这样大规模的数据时,计算机视觉才得到了正式的关注和发展。

 

现在 AI 视觉已经在我们的生活中无处不在,从日常使用的二维码到人脸识别直至更专业的病理分析。AI 视觉的应用所渗透到的领域远比我们想象的更加广泛。虽然 AI 视觉的应用已经随处可见,但如果想要自己去开发一套属于自己的 AI 视觉应用,对于一个非专业领域的开发者还是非常复杂的,单从最基础的算法训练就要消耗掉大量的精力与时间。

 

EdgerOS 系统则内置了多种不同方向的 AI 引擎,使开发者可以实现快速实现 AI 视觉领域的开发,极大的降低了开发周期。开发者可以根据自己的需求对不同 AI 引擎进行组合达到自己想要的业务实现。本文将带领大家一起了解 EdgerOS 中常用的两款 AI 引擎。

 

FaceNN

FaceNN 是 EdgerOS 所提供的一个针对人脸识别的 AI 处理引擎,它可以从视频流或者图片中捕捉到人脸的具体位置,还可以根据人脸的特征来分析出对应人物的特征信息如:年龄、性别、情感等一些具体信息。

 

FaceNN 引擎封装在 “facenn” 模块中,我们可以通过以下方式来导入


const facenn= require('facenn');

FaceNN 引擎提供了极简的接口,这使得开发者可以更加快速的实现关于人脸的 AI 处理,同时也降低了巨大的学习成本,接下来我们就一起来看看。

 

首先我们需要明确一下被识别的图像格式。目前 FaceNN 引擎支持如下格式:

 

facenn.detect(videoBuf, attribute[, quick])

  • attribute {Object} 图像格式

    • width {Integer} 图像宽度

    • height {Integer} 图像高度

    • pixelFormat {Integer} 图像格式

  • quick {Boolean}  是否启用快速模式

返回信息:

  • score {Number} 人脸的覆盖率

  • x0 {Integer} 左上角 x 的位置

  • y0 {Integer} 左上角 y 的位置

  • x1 {Integer} 右下角 x 的位置

  • y1 {Integer} 右下角 y 的位置

  • area {Number} Area,非快速模式

  • regreCoord {Array} RegreCoord,非快速模式

  • landmark {Array} Landmark,非快速模式

    facenn.detect 可以识别出一帧图像数据中的人脸个数以及人脸所在图像中的位置。

     

    facenn.feature(videoBuf, attribute, faceInfo[, extra])

    • videoBuf {Buffer} 图像格式

    • attribute {Object} 图像属性

      • width {Integer} 图像宽度

      • height {Integer} 图像高度

      • pixelFormat {Integer} 图像格式

    • extra {Object} 需要扩展的人脸信息 default: undefined

     

    返回信息:

    • keys {Array} Face keys

    • male {Boolean} 性别, 需要在扩展中选择

    • age {Integer} Age, 需要在扩展中选择

    • emotion {String} Emotion, 需要在扩展中选择

      • emotion 可分辨情绪包括: angry,disgust,fear,happy,sad,surprise,neutral

    • live {Number} 存活率,需要在扩展中选择

    facenn.feature 可以识别出一张人像的具体信息,例如性别,情绪年龄等等。

     

    facenn.compare(faceKeys1, faceKeys2)

    faceKey1 {Object} Face keys 1

    faceKey2 {Object} Face keys 2

     

    返回信息:

    • 相似值 0.0 ~ 1.0

    facenn.compare 可以比对出两张人脸信息的相似值。

     

    接下来我们用一下两张图片来尝试使用 FaceNN 引擎。读取其中的特征信息

     image1.png

     image2.png

    const imagecodec = require('imagecodec'); // 图片解析模块
    const facenn = require('facenn'); 
    
    
    function facennHandel(imagePath, imagePath2) {
        const image1 = imagecodec.decode(imagePath, imagecodec.COMPONENTS_RGB)
        const imageInfo1 = imagecodec.info(imagePath)
        const videoAttrFacenn = { width: imageInfo1.width, height: imageInfo1.height, pixelFormat: facenn.PIX_FMT_RGB24 }
    
        const faceInfos = facenn.detect(image1.buffer, videoAttrFacenn);
        const facennFeature = facenn.feature(image1.buffer, videoAttrFacenn, faceInfos[0], {
            male: true,
            age: true,
            emotion: true,
            live: true
        })
        console.log(`image1.png  male:${facennFeature.male} age:${facennFeature.age} emotion:${facennFeature.emotion} live:${facennFeature.live}`)
    
        const image2 = imagecodec.decode(imagePath2, imagecodec.COMPONENTS_RGB)
        const imageInfo2 = imagecodec.info(imagePath2)
        const videoAttrFacenn2 = { width: imageInfo2.width, height: imageInfo2.height, pixelFormat: facenn.PIX_FMT_RGB24 }
        const faceInfos2 = facenn.detect(image2.buffer, videoAttrFacenn2);
        const facennFeature2 = facenn.feature(image2.buffer, videoAttrFacenn2, faceInfos2[0], {
            male: true,
            age: true,
            emotion: true,
            live: true
        })
        console.log(`image2.png  male:${facennFeature2.male} age:${facennFeature2.age} emotion:${facennFeature2.emotion} live:${facennFeature2.live}`)
        
        const compareNum = facenn.compare(facennFeature.keys, facennFeature2.keys)
        console.log(compareNum)
    }
    
    facennHandel('/image/image1.png', '/image/image2.png')
    
    // 输出如下:
    // [JSRE-CON]image1.png  male:false age:21 emotion:neutral live:0.9843575954437256
    // [JSRE-CON]image2.png  male:true age:58 emotion:sad live:0.33667701482772827
    // [JSRE-CON]-0.1453045904636383
    
     

    ThingNN

     

    ThingNN 是 EdgerOS 可以从视频流或者图片中捕捉到具体事物,分别标记事务所在图片中的具体位置。

     

    ThingNN 引擎封装在 “thingnn” 模块中,我们可以通过以下方式来导入

    
    const facenn= require('thingnn');

      同样我们也需要明确一下被识别的图像格式。目前 ThingNN 引擎支持如下格式: 

       

      接下来我们看看 ThingNN 接口提供了那些接口:

      thingnn.detect(videoBuf, attribute)

      • videoBuf {Buffer} 图像格式

      • attribute {Object} 图像属性

        • width {Integer} 图像宽度

        • height {Integer} 图像高度

        • pixelFormat {Integer} 图像格式

      返回信息:

      • className{Array} Face keys

      • prob{Boolean} 性别, 需要在扩展中选择

      • x0 {Integer} 左上角 x 的位置

      • y0 {Integer} 左上角 y 的位置

      • x1 {Integer} 右下角 x 的位置

      • y1 {Integer} 右下角 y 的位置

       

      目前 ThingNN 模块所支持可识别的类型都有:

      background, aeroplane, bicycle, bird, boat,bottle, bus, car, cat, chair,cow, diningtable, dog, horse,motorbike,person, pottedplant,sheep, sofa, train, tvmonitor

       

      thingnn.detect  可以获取到图片中事物的类别以及所在图像中的位置。

       

      thingnn.identify(videoBuf, attribute, thingInfo)

      • videoBuf {Buffer} 图像格式

      • attribute {Object} 图像属性

        • width {Integer} 图像宽度

        • height {Integer} 图像高度

        • pixelFormat {Integer} 图像格式

      • thingInfo {Object} 事务对象

       

      返回信息:

      具体事物的名称

      thingnn.identify 可以获取到具体 thinginfo  的类型名称。

       

      接下来我们具体看看代码实现,我们以下图为例子作为演示:

       dog.png

      
      const imagecodec = require('imagecodec'); // 图片解析模块
      const facenn = require('facenn'); 
      
      
      function licplatennHandel(imagePath) {
      const imageInfo = imagecodec.info(imagePath)
      const imageBuf= imagecodec.decode(imagePath, imagecodec.COMPONENTS_RGB).buffer
      let videoAttrThingnn = { width: imageInfo.width, height: imageInfo.height, pixelFormat: thingnn.PIX_FMT_BGR24 }
          const thingInfos = thingnn.detect(imageBuf, videoAttrThingnn);
          thingInfos.forEach((thingInfo, index) => {
              const thingName = thingnn.identify(imageBuf, videoAttrThingnn, thingInfo);
              console.log(index,thingInfo.className, thingName)
          })
      }
      
      licplatennHandel('/image/dog.png')
      
      // 输出如下:
      // [JSRE-CON]0 dog Labrador retriever

      篇幅有限,只能暂且先介绍 EdgerOS 中这两种 AI 图像引擎。除此之外 EdgerOS 中还涵盖了手势识别引擎,车牌识别引擎,以及一个强大的神经网络推理框架。这些就靠大家自己去 EdgerOS 中探索啦,希望本篇文章对各位有所帮助。

       

      文档链接:

      EdgerOS AI Engine 官方文档 【NCC】

      EdgerOS AI Engine 官方文档 【FaceNN】

      EdgerOS AI Engine 官方文档 【HandNN】

      EdgerOS AI Engine 官方文档 【ThingNN】

      EdgerOS AI Engine 官方文档 【LicPlateNN】

       

      ...全文
      254 回复 打赏 收藏 举报
      写回复
      用AI写文章
      回复
      切换为时间正序
      请发表友善的回复…
      发表回复
      内容概要:本文围绕内置式永磁同步电机(IPMSM)的宽速域控制问题,提出了一种最大转矩电流比(MTPA)与基于解析法的弱磁控制协同策略,旨在实现电机在全速域范围内的高效、稳定运行。研究基于电压饱和判据,设计了精确的分区切换机制,确保在不同转速区间内MTPA与弱磁控制策略的无缝衔接与平滑过渡。通过Simulink搭建了完整的电机控制系统模型,对所提出的协同控制策略进行了详细的仿真验证,重点分析了其在动态加速、减速及负载突变等工况下的宽速域动态特性,证明了该方法在提升系统响应速度、抑制转矩脉动和维持电压稳定方面的优越性能。; 适合人群:从事电机控制、电力电子、新能源汽车或自动化领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握永磁同步电机在全速域范围内的先进控制策略;② 学习如何设计基于物理约束(如电压饱和)的多模式控制切换逻辑;③ 利用Simulink进行电机控制系统的建模、仿真与性能验证; 其他说明:该资源不仅提供了完整的理论分析和控制框图,还包含了可直接运行的Simulink仿真模型,便于读者复现结果、修改参数并进行二次开发,是深入理解电机高性能控制算法的理想实践材料。
      内容概要:本研究聚焦于永磁同步电机(PMSM)在无位置传感器控制下的启动性能优化,提出了一种将模型预测控制(MPC)与模型参考自适应系统(MRAS)相融合的观测器设计方案。该融合观测器充分利用MPC的多步前瞻预测能力和MRAS的强鲁棒性,构建协同机制,旨在解决电机在零速和极低速工况下因反电动势微弱而导致的传统观测器收敛困难、稳定性差的问题。研究通过Simulink仿真实验,深入分析了融合观测器的动态响应特性、收敛速度及其在零速启动过程中的稳定性,验证了该方案相较于单一观测器在提升系统收敛性和平滑启动方面的优越性。; 适合人群:具备电机控制理论基础和Simulink仿真经验,从事电机驱动、电力电子或自动化领域研发工作的工程师及研究生。; 使用场景及目标:① 解决永磁同步电机在零低速区的精确转子位置观测难题;② 设计并验证融合型观测器以提升系统在启动阶段的动态性能和鲁棒性;③ 为高性能无传感器驱动系统的设计提供仿真依据和技术参考。; 阅读建议:此资源以Simulink仿真实现为核心,读者应在理解MPC和MRAS基本原理的基础上,重点学习其融合架构的设计思路与协同机制的实现方法,并通过动手复现仿真模型来深入掌握观测器的参数整定、性能评估与优化技巧。

      1,589

      社区成员

      发帖
      与我相关
      我的任务
      社区描述
      爱智开发者平台是一个开放的物联网平台,通过爱智世界,应用开发者可以把自己的应用分发到亿万用户的设备上,硬件开发者能够把设备能力开放给海量的开发者,让优质的应用脱颖而出,为用户提供更优秀的使用体验。
      边缘计算物联网javascript 企业社区
      社区管理员
      • EdgerOS
      • Lumos_zbj
      • dayinfinite
      加入社区
      • 近7日
      • 近30日
      • 至今
      社区公告
      暂无公告

      试试用AI创作助手写篇文章吧