14

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

準確性應該很好,但不一定要完美。放鬆一些準確性來加快速度是可以的。所有的面都是正面的,我們會知道以前功能的大概位置。我們不需要實時檢測。這些功能應該從保存的圖像中提取。檢測時間應該只要不影響用戶體驗。所以,甚至2或3秒都可以。

有了這個假設應該不會太難找一個庫,它使我們能夠實現這一目標。但我的問題是,最好的方法是什麼?你有什麼建議?這是我第一次爲Android開發,我不想朝錯誤的方向發展。對我們來說一個圖書館是一個好主意,還是更好(更快/更高的準確性)來自己實現一些現有的算法?

我GOOGLE了很多,我發現了很多有趣的事情。 Android API中還有人臉檢測。但返回的面孔類(http://developer.android.com/reference/android/media/FaceDetector.Face.html)僅包含眼睛的位置。這對於我們的應用來說更少。然後還有Android或JavaCV的OpenCV。你認爲與合作的好主意是什麼?什麼圖書館有很好的文件,教程?

+1

請你在你的研究沒有成功?我正在嘗試做類似的事情。請告訴我! – 2013-02-05 11:16:16

回答

8

OpenCV的a tutorial for this purpose,不幸的是,C++只有那麼你就必須把它轉換到Android。

您也可以嘗試人臉檢測API在Android中,this is a simple example如果你是從一個繪製或SD卡圖像檢測圖像。或者是最近的Camera.Face API,它可以處理相機圖像。

如果你想從你的相機在動態的時間比第一次讀How to take picture from camera.圖像,但我會建議你檢查OpenCV的Android的官方樣片並使用它們。

更新:

瘋帽子實施例使用照相機的方法與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 
       } 
      } 
     } 
    } 
} 
+0

感謝您的快速回復。其實我不需要臉部檢測。我將處理的圖像只包含臉部。最重要的部分是,找到功能。哪裏是眼睛,鼻子,嘴巴和臉部邊緣(哪裏開始背景,頭髮在哪裏)。我只需要將其應用於存儲的圖像,而不是實時在相機上。你知道這個介紹嗎?也許OpenCV或其他算法? – tschoartschi 2012-03-20 11:55:03

+1

FaceDetection API檢測基於距離bw眼睛和其他功能的基礎上的面孔。所以試圖探索。如果沒有找到任何運氣,然後去OpenCV – Sameer 2012-03-20 12:08:14

+0

我在文檔中看到。但是我想如果我知道眼睛的位置是否真的更容易提取其他特徵。 Android 4還爲您提供了飛蛾的座標。所以我正在尋找類似的東西 – tschoartschi 2012-03-20 12:14:43

4

我工作的一個類似的項目。我用FaceDetection API做了一些測試,可以告訴你,如果你想檢測眼睛,鼻子,嘴巴和邊緣,它不會幫助你。這個API只允許你檢測眼睛。如果你想實現人臉識別,這是沒有用的,因爲在人臉檢測部分你需要更多的特徵而不僅僅是眼睛。

你的第一個回覆註釋:你實際上需要面對檢測。尋找特徵是人臉檢測的一部分,獲取這些特徵是人臉識別應用的第一步。使用OpenCV,您可以使用類似Haar的功能獲取這些功能(眼睛,鼻子,嘴巴等)。

但是我發現它有點複雜,有一個單獨的.cpp文件使用OpenCV的功能。有一種叫做JNIEXPORT的東西,它允許你在.cpp文件中用OpenCV函數編輯Android圖庫圖像。 OpenCV有一個樣本Haar特徵檢測.cpp文件,可用於人臉檢測(並將識別作爲其他算法的第二步)。

您是在windows還是linux上開發?我正在使用Windows,並沒有設法使用您鏈接的教程來設置OpenCV。不過,我在Eclipse中確實有一個工作的Windows OpenCV環境,並從OpenCV 2.3.1中獲得了所有示例。也許我們可以互相幫助,分享一些信息/結果?請告訴我。

+0

對於FaceDetection API,它似乎只能檢測到眼睛和距離的中間部分在他們之間,但有可能找到個人的眼睛?或者是否有可能知道臉部是傾斜的? – 2014-07-26 11:27:39

2

我發現這個微軟提供的API用於面部情感檢測一個很好的解決方案。這個API返回一個JSON響應和情感圖。你可以試試這個API來獲得好的結果。

情緒API

情感識別確認對圖像中的一個或更多的人,以及返回 面邊框所表達的情感。檢測到的情緒是快樂,悲傷,驚喜,憤怒,恐懼,鄙視和厭惡或中立。

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

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

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/12160409) – 2016-04-27 07:08:40

+1

Thanks @LucaDetomi – 2016-04-27 07:32:14