C 攝像頭實時 4執行緒人臉識別demo

2022-07-21 20:18:23 字數 2465 閱讀 4694

效率有點低,大家看看**開可以節省時間?

源**:

整個專案使用虹軟技術完成開發

說實話,為了提高識別效率,我也是竭盡所能,幹了不少自認為的優化,如有興趣聽我說說。

第一部分 單執行緒時候的各種折騰

一、折騰lpasvloffscreen

話說這個lpasvloffscreen的結果文件裡面沒有說明,或者是我沒找到。

我也不知道從**複製來的,主要折騰的是ppu8plane[0]位址,一般操作是

1、鎖定記憶體

2、ppu8plane[0]分配制定長度的記憶體

3、把記憶體中的位元組複製到乙個臨時陣列

4、然後用marshal.copy複製到指定的位址

5、解鎖記憶體

我改成:

1、鎖定記憶體

2、ppu8plane[0]指向位址

3、等不需要lpasvloffscreen時(人臉檢測、獲取特徵值、性別判斷、年齡估算等結束後)解鎖記憶體

就晚一點解鎖,省了好多事情,耗時由4毫秒沒成2微妙。當時就發了個帖:c# bitmap轉asvloffscreen的最佳方式?

後來覺得這名字實在記不住,也不c#,改成了imagedata,整個轉換過程如下:

ar bmpdata = bitmap.lockbits(new rectangle(0, 0, bitmap.width, bitmap.height), imagelockmode.readonly, pixelformat.format24bpprgb);

var imagedata = new imagedata

,ppu8plane = new intptr[4]

};bitmap.unlockbits(bmpdata);

二、單執行緒時將獲取到的facemodel直接做人臉比對的引數

extractfeature(_facematchengine, ref imagedata, ref facefeatureinput, out var facemodel);

facepairmatch(_facematchengine, ref fm, ref facemodel, out float score);

一般操作是facemodel裡面的位元組複製到臨時位元組陣列,然後建立新的facemodel,分配記憶體,在將臨時位元組陣列複製到facemodel。

三、人臉庫直接用facemodel

/// /// 人臉庫

///

public class facelib

= new list();

public class item

/// /// 檔名作為id

///

public string id

/// /// 人臉模型

///

public facemodel facemodel

}}

四、比對結果》0.5就算成功

五、人臉庫增加orderid

識別成功後再次比對就很快,應該是首發命中。

人臉比對

task.factory.startnew(() =>

}, _cancellationtokensource.token);

結果顯示

private void videoplayer_paint(object sender, painteventargs e)

一、確定4執行緒為最佳

各種測試後得出的結論,也不知道對不對,也不知道為什麼,哎。

因網友的要求,同步到了github

二、刪除了單執行緒

有了更快的,就不要慢的了。

三、n張臉如何分配給4個執行緒獲取特徵值?

動了不少腦筋,interlocked.increment是關鍵。

最終有改了下面的內容

如果只有一張臉(竊以為一張臉的概率比較高),也用task,影響效率,增加了 if (detectresult.facecount ==

1)intptr之間複製位元組用copymemory比較快

兩三張臉的時候開4個執行緒不好,改成 new task[tasknum < detectresult.facecount ?

tasknum : detectresult.facecount]

四、識別結果(集)的折騰

(想來條分割線,居然只有華麗的分割線,算了。順便吐槽一下,這個論壇的編輯器實在是讓人無語_)

各種折騰後,黔驢技窮了,10,000人臉的庫得出10張不認識的臉的結論,需要10秒鐘。當然,換好一點的電腦可以提高效率,如我的台式電腦(i5-7500),輸入只有1張臉的時候,遍歷

1萬張人臉僅需390毫秒

5萬張人臉也就1525毫秒

10萬張人臉說我記憶體不夠,可能是我的程式是32位的緣故,換成64位的sdk估計3秒鐘也能搞定(太麻煩,不折騰了)

結論是:虹軟中型sdk用於考勤、小區門禁、寫字樓門禁等場所完全沒問題。

人臉識別2 1 利用opencv開啟攝像頭

前面 人臉識別1 系列講了很多相關環境的配置,折騰了那麼久,環境也全部都配置好了,現在開始正式寫 了。要知道,所有不寫 的程式猿都是流氓。既然人臉識別,我們先明確幾個目標 如何利用opencv開啟攝像頭 直接上 import cv2 引入cv2,也就是引入opencv的一些包和處理類,不然下面的一些...

用Python獲取攝像頭並實時控制人臉

實現流程 建立乙個鍵盤事件監聽,按下 d 鍵,則開始執行面部匹配,並進行面具載入 這個過程是動態的,你可以隨時移動 面部匹配使用dlib中的人臉檢測演算法來檢視是否有人臉存在。如果有,它將為每個人臉建立乙個結束位置,眼鏡和煙捲會移動到那裡結束。然後我們需要縮放和旋轉我們的眼鏡以適合每個人的臉。我們將...

樹莓派 攝像頭 深度學習實現人臉口罩識別

現在是2021年,新冠疫情整整持續一年多了,國內沉寂了幾個月後又開始蔓延起來,人臉口罩識別還得用。想著去年上半年沒時間研究基於深度學習的人臉識別技術,趁著年底的機會好好研究一下。網上搜尋了一番,發現有個現成的開源專案facemaskdetection可用,於是就搗鼓一下看能否用起來。期間主要遇到乙個...