簡體   English   中英

Android - 人臉特征檢測

[英]Android - Face feature detection

目前我正在為Android手機開發應用程序。 我們想要檢測臉部的特征。 該程序應該能夠檢測眼睛,鼻子,嘴巴和臉部邊緣的位置。

准確性應該很好,但不一定要完美。 可以放松一些准確性以加快速度。 所有的面都是正面的,我們之前會知道這些特征的大致位置。 我們不需要實時檢測。 應從保存的圖像中提取要素。 檢測時間應該只要不影響用戶體驗。 所以即使2或3秒也可以。

有了這個假設,找到一個能讓我們實現這個目標的庫不應該太難。 但我的問題是,最好的方法是什么? 你的建議是什么? 這是我第一次為Android開發,我不想跑錯方向。 對我們來說這是一個好主意,還是我自己實現一些現有算法更好(更快/更高精度)?

我google了很多,我發現了很多有趣的東西。 Android API中還有面部檢測功能。 但返回的face class( http://developer.android.com/reference/android/media/FaceDetector.Face.html )僅包含眼睛的位置。 這對我們的應用來說更少。 然后還有適用於Android或JavaCV的OpenCV。 您認為合作的好主意是什么? 對於哪個庫有好的文檔,教程?

OpenCV有一個用於此目的的教程 ,不幸的是只有C ++,所以你必須將它轉換為Android。

您也可以在Android中嘗試FaceDetection API,如果您從drawable或SD卡圖像中檢測圖像, 這是一個簡單的示例 或者是最近使用相機圖像的Camera.Face API

如果您希望在動態時間從相機拍攝圖像而不是第一次閱讀如何從相機拍攝照片。 ,但我建議你查看官方的OpenCV Android樣本並使用它們。

更新:

Mad Hatter示例使用Camera with SurfaceView的方法。 它很有希望。 看看Mad Hatter

如果鏈接斷開,相關代碼是:

public class FaceDetectionListener implements Camera.FaceDetectionListener {
    @Override
    public final void onFaceDetection(Face[] faces, Camera camera) {
        if (faces.length > 0) {
            for (Face face : faces) {
                if (face != null) {
                    // do something
                }
            }
        }
    }
}

我正在做一個類似的項目。 我使用FaceDetection API進行了一些測試,可以告訴你,如果你想檢測眼睛,鼻子,嘴巴和邊緣,它不會幫助你。 此API僅允許您檢測眼睛。 如果你想實現面部識別是沒用的,因為在面部檢測部分你需要的功能不僅僅是眼睛。

對你的第一個回復發表評論:你確實需要面部檢測。 查找要素是人臉檢測的一部分,獲取這些功能是人臉識別應用程序的第一步。 使用OpenCV,您可以使用類似Haar的功能來獲取這些功能(眼睛,鼻子,嘴巴等)。

但是我發現將openCV函數與單獨的.cpp文件一起使用有點復雜。 有一個名為JNIEXPORT的東西,它允許您在.cpp文件中編輯帶有OpenCV函數的Android圖庫圖像。 OpenCV有一個類似Haar的特征檢測.cpp文件,可用於人臉檢測(和其他算法的第二步識別)。

你在Windows或Linux上開發? 我正在使用Windows並且沒有設法使用您鏈接的教程來設置OpenCV。 但是我在Eclipse中有一個工作的Windows OpenCV環境,並且從OpenCV 2.3.1開始工作。 也許我們可以互相幫助並分享一些信息/結果? 請告訴我。

我已經找到了這個Microsoft API提供的面部情緒檢測的好解決方案。 此API返回JSON響應和情感圖。 您可以嘗試此API以獲得良好的結果。

Emotion API

情感識別識別圖像中一個或多個人表達的情緒,並返回面部的邊界框。 檢測到的情緒是快樂,悲傷,驚訝,憤怒,恐懼,蔑視,厭惡或中立。

  • 支持的輸入圖像格式包括JPEG,PNG,GIF(第一幀),BMP。 圖像文件大小不應大於4MB。
  • 如果用戶已經調用了Face API,他們可以將面部矩形作為可選輸入提交。 否則,Emotion API將首先計算矩形。
  • 可檢測的面部尺寸范圍是36x36到4096x4096像素。 超出此范圍的面將無法檢測到。
  • 對於每個圖像,檢測到的最大面部數量為64,並且面部按面部矩形大小按降序排列。 如果未檢測到面,將返回空數組。
  • 由於技術挑戰,可能無法檢測到某些面部,例如非常大的面部角度(頭部姿勢),大的遮擋。 正面和近額面都有最好的效果。 - 情緒蔑視和厭惡是實驗性的。

https://www.microsoft.com/cognitive-services/en-us/emotion-api

這是一個很好的查詢。 我想如果你得到眼睛的特征點,那么我們也可以通過知道眼睛中其他點的估計距離來計算其他點。

請參閱本文以了解更多關於我想說的內容: http//klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf

我希望這有幫助。

看一下新的Android face API,其中包括面部地標檢測。 這里有一個教程:

https://developers.google.com/vision/detect-faces-tutorial

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM