【问题标题】:Face tracking software on mac (in build camera)mac 上的人脸跟踪软件(内置相机)
【发布时间】:2012-06-03 16:34:26
【问题描述】:

我想要一种方法来跟踪用户在一段时间内查看屏幕的情况。

例如在正常使用中,用户在一天中的确切秒数中查看屏幕。

我想知道有哪些创新想法或预先存在的软件可以让我做到这一点。

因此,对于我看到的更多细节,会有一些容忍水平,例如与屏幕的距离,被认为与显示器“接合”的头到屏幕的角度。如果相机上的一个mac book pro被用来跟踪这个,那么它会在一个文本文件/键值存储中记录程序打开的每一秒的时间戳和布尔值。

有没有人遇到过这种情况?

【问题讨论】:

    标签: macos opencv camera


    【解决方案1】:

    Face.com 提供了重新识别人脸的解决方案。所以我猜只是抓住相机输入并将其发送到他们的服务器?

    【讨论】:

    • 似乎暗示它只接受照片而不是视频。现在我确实意识到视频只是一系列照片,但看起来可能需要做很多工作才能随着时间的推移将其剥离并发送到那里的 API 以获得结果。
    【解决方案2】:

    您可以在这里找到一个很好的起点:http://code.google.com/p/ehci/

    这是一个基于 OpenCV 的软件,可以跟踪头部并检测其方向。它是开源的。

    【讨论】:

    • 不幸的是,这似乎还没有为 mac 准备好。当然可以尝试在 iOS 上工作,但理想情况下我想避免这种情况。
    • 但它确实可以准确记录我的需要。
    • 您可以根据需要查看代码。它的代码有点混乱(一种弗兰肯斯坦软件),但应该可以在 iOS 上使用一些工作。
    【解决方案3】:

    已经实现了面部跟踪器(并且已经使用标记进行了训练),例如在 OpenCV 中。我建议您首先从跟踪面部开始。一旦你有了一个强大的面部跟踪器,你就可以生成输出,告诉你一张脸已经盯着屏幕多久了,等等。

    稍后您可以添加改进。检测到人脸后,您可以尝试通过分析人脸像素来识别人。

    另一行是识别面部的各个部分,例如嘴巴、眼睛、鼻子、眉毛……

    如果您可以跟踪面部和面部的某些部分,您可以尝试识别面部表情模式,例如快乐、悲伤等。

    【讨论】:

      【解决方案4】:

      我已经建立了一个人脸检测系统,用 OpenCV 做一次这样的事情,你可以看到结果here

      我当时使用的方法是使用内置 OpenCV 分类器标准的 haarTraining 两次单独使用。我使用名为 haarcascade_frontalface_default.xml 的分类器来查看用户是否正在观看屏幕,并使用 haarcascade_profileface.xml 来查看用户是否正在移开视线。以下代码应该可以帮助您开始使用 openCV 和 C++。

      CvHaarClassifierCascade *cascade_face;
      CvMemStorage            *storage_face;
      CvHaarClassifierCascade *cascade_profile;
      CvMemStorage            *storage_profile;
      
      //profile face
      storage_profile = cvCreateMemStorage( 0 );
      cascade_profile = ( CvHaarClassifierCascade* )cvLoad( "haarcascade_profileface.xml", 0, 0, 0 );
      cvHaarDetectObjects( frm, cascade_profile, storage_profile, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING);
      
      //frontal face
      storage_face = cvCreateMemStorage( 0 );
      cascade_face = ( CvHaarClassifierCascade* )cvLoad( "haarcascade_frontalface_default.xml", 0, 0, 0 );
      cvHaarDetectObjects( frm, cascade_face, storage_face, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING);
      
      //detect profiles
      CvSeq *profile = cvHaarDetectObjects(img,cascade_profile, storage_profile, 1.1,3,0,cvSize( 20, 20 ));
      
      for( i = 0 ; i < ( profile ? profile->total : 0 ) ; i++ ) {
          CvRect *r = ( CvRect* )cvGetSeqElem( profile, i );
          //draw rectangle here, or do other stuff
      }
      
      //detect front
      CvSeq *faces = cvHaarDetectObjects(img,cascade_face, storage_face, 1.1,3,0,cvSize( 20,20 ));
      
      for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
          CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
          //draw rectangle here, or do other stuff
      }
      

      【讨论】:

        猜你喜欢
        • 2020-11-05
        • 2012-05-17
        • 2017-06-26
        • 1970-01-01
        • 2015-02-28
        • 2011-09-15
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多