tag 标签: luxand

相关博文
  • 热度 23
    2013-1-26 10:39
    3772 次阅读|
    0 个评论
      Luxand是一个简便易用的人脸识别的开放API,如果你需要在你的程序中加入识别的类似功能,你可以尝试使用它,但是有一点需要引起注意,在我实际的使用过程中,发现Luxand的驱动下占用的内存较多,或者说,不是很容易将进行优化。如果你仔细观察示例程序,你会发现你的电脑的CPU仪表上的内存占用基本上是不变的占用,而如果是自己去使用API编程加入识别功能,你会发现其实占用的内存还是挺多的,当然,这也不是没有办法,所以,在使用的时候,需要对此加以注意。   让我们开始吧,在使用之前,最好阅读以下相关的文档,以对Luxand有一个大概的了解,Luxand的使用并不是完全的免费的,其使用方式是经过一层签名认证,这个签名,也就是相当于系统注册码一样的东西,是需要通过在Luxand上进行注册来使用的,不过这一步并不复杂,就是申请一个邮箱然后获取分配的号码,这是很长的一串号码,这里不提供号码,如果有需要,你可以自己申请一个。   Luxand的原理就是人脸识别的一些基本的算法,其特点在于抓住了人脸上的一些不变的特征点,这些特征点是不易被识别错误的,普通的一些算法中需要学习,这样可以进行特定的场合下的适应,但是如果是平常的应用其实不必这么复杂,人脸的不变的特征就可以帮助摄像头找到需要的图案的位置,当然,这样做也导致其对于人脸的旋转等的判断大打折扣,不过在普通的应用中,你是不需要这些的,这里开始介绍具体的使用方法了。   好了,先介绍一下具体的使用到的一些参量,使用Luxand的时候,如果是识别指定的照片中的人脸,那么你就不需要使用到摄像头,不用怀疑,Luxand提供了能力,后面会详细的提到这件事,这里面还是有很多好玩的应用可以制作的。但是还是把和摄像头有关的参量一并给出:   这里是以java的标准给出的,TCameras CameraList = new TCameras();这是摄像头的列表,你的电脑上可能有不同的类型,不止一个数量的摄像头,TCameras CameraNameList = new TCameras();  TCameras CameraDevicePathList = new TCameras();  HCamera CameraHandle = new HCamera();  这些也都是,基本上可以顾名思义,另外,在Luxand的官网上,也就是注册使用序列号(可以使用一年)的地方,有Luxand Document,也就是相当于API的说明。而就图像来说,在java中最重要的是HImage Image = new HImage();指示需要识别的图像。   另外,在准备阶段中,序列号和硬盘号也是需要的,所以可以这样定义,String HardwareID ;       }     这里是使用到摄像头的代码初始化部分,所以如果不适用摄像头,那么和摄像头相关的几个函数就不用了,也就是在函数名中带有camera的,其实这也是值得学习的,在命名的时候,需要让这些参量变得易于理解和使用。   在Luxand中,提供了打开图像的函数,其实在摄像头的连续识别中,道理是一样的,不过做了很多的优化,也是连续的得到图像,然后送入识别函数,仅此而已。   具体的函数是:   int FSDK.LoadImageFromFile(HImage Image, String FileName);    得到了图片,在之前我们的HImage参量中,然后,该函数FSDK.DetectFacialFeatures出场了, 首先看看照片中是否存在人脸:  if(FSDK.FSDKE_OK==FSDK.DetectFacialFeatures(for_detect,feature_for_me)),你可不恩能够蒙我,既然有人脸,就把人脸的位置信息识别出来: if(FSDK.FSDKE_OK==FSDK.DetectFacialFeatures(detect,feature)),进行识别后,可以使用脸部特征存储的参量中的信息了,feature.features .y是第一个特征的y坐标,其他就同理了,不再赘述。不过你需要有一张特征的“地图”,嗯,就在附件中,或者你可以在Luxand帮助手册中找到。   那么,再加一些摄像头识别的东西:  if(FSDK.FSDKE_OK == FSDKCam.OpenVideoCamera(camera_name,CameraHandle)),先打开摄像头,当打开成功后,可以从摄像头中一幅一幅图像的拿出来:  if(FSDK.FSDKE_OK == FSDKCam.GrabFrame(CameraHandle,Image)) 这里的Image是一个HImage类型的参量,下面的步骤基本上和图像识别无异了,那么,利用这个我们可以做啥呢?嗯,很多的有意思的东西都变得可能了。   比如,寒冷的冬天,你在电脑上读一份资料,手还得放在外面滑动鼠标,多么的不惬意啊,让Luxand帮助你吧,首先做一个简易的阅读器,可以读取鼠标的滑动信息,从摄像头中读取你的眼睛的“一举一动”,并读取你的眼部的运动,好了,然后模拟你的鼠标的移动,代码也是容易找到的:   void mouseWheelSetup2() {     addMouseWheelListener( // the rest of of this is acutally the argument list for the function call             new java.awt.event.MouseWheelListener()              {                  public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt)                   {                     viewadjust -= 9*evt.getWheelRotation();   // 调节当前页面的移动                  }             }    ) // this is the end of the argument list    ;    // this single semicolon is the entire, complete function body }    你的双手就不需要再忍受寒冷的侵袭啦!当然,创意是无止境的,你还可以想出更多的应用来。