2013-05-21 88 views
0

我本守則工作面:搜索發現從數據庫的OpenCV

Program sample

上面的鏈接已被編程與此頁面的幫助: Servo Magazine

這個代碼可以做提取物面對面,學習面孔並將學習面保存在帶有標籤的數據庫中(例如:chris_laughing.bmp或chris_sad.bmp)。它可以識別用戶保存在數據庫中的臉部。

如果人員不在數據庫中,我的項目將向用戶發送電子郵件。

  • 我包括一個函數發送電子郵件給用戶。

所以我保存了2個不同的圖片從2星chris和john。當我點擊確認時,他們會向我顯示數據庫中正確的星標(例如:chris_laughing.bmp)。

問題是如果我從其他明星或人(也不是克里斯不是約翰)提取(檢測)一張臉,該代碼顯示我從數據庫中的最近星。

我想要的是,該程序給我一個消息框,說:這個人不在數據庫中。

這個程序(代碼)可能嗎?

+1

你,或許,明白跨越某個閾值(或設定閾值)後的人可以成爲認定「不在數據庫中」而不是被確定爲「最近」。問題是根據算法和可用數據的精度正確設置閾值。 – SChepurin

回答

0

該程序的工作原理是假設每個人的臉部圖像位於與其他人不同的子空間中。這個想法在某些情況下可以很好地工作。該程序爲每個人學習一個子空間,當你輸入一個新圖像時,它會測量它先前學習的所有子空間的距離,並選擇最近的一個子空間。

該程序似乎沒有任何形式的檢查,圖像離所有學習子空間太遠。但是,嘗試添加該功能將是一個有趣的練習。

下面是一些關於該軟件的主要思想信息:http://en.wikipedia.org/wiki/Eigenface

+0

謝謝你。你有什麼想法,我怎麼能釋放與使用OpenCV? –

+0

最好的想法是閱讀我提到的wiki頁面上的一些參考資料?你確實意識到該程序已經大量使用OpenCV?在沒有OpenCV的情況下重寫它將是一項艱鉅的任務,我不確定爲什麼會這麼做。在findNearestNeighbor()中,如果distSq太大(需要測試或機器學習來確定「太大」是什麼),則返回-1而不是iNearest。那麼當然,如果返回-1,則需要更改find​​NearestNeighbor()被調用的地方。 – Bull

+0

謝謝我也這麼認爲。程序而不是最低位的低通輸出一個錯誤。 或者我這樣做,所以給一個消息,如果任何面部檢測:) –