1. 程式人生 > >LibFaceDetection開源庫介紹與使用 LibFaceDetection開源庫介紹與使用

LibFaceDetection開源庫介紹與使用 LibFaceDetection開源庫介紹與使用

LibFaceDetection開源庫介紹與使用

2018年06月10日 23:57:26 閱讀數:527
													<span class="tags-box artic-tag-box">
							<span class="label">標籤:</span>
															<a data-track-click="{&quot;mod&quot;:&quot;popu_626&quot;,&quot;con&quot;:&quot;LibFaceDetection&quot;}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=LibFaceDetection&amp;t=blog" target="_blank">LibFaceDetection																</a><a data-track-click="{&quot;mod&quot;:&quot;popu_626&quot;,&quot;con&quot;:&quot;人臉檢測&quot;}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=人臉檢測&amp;t=blog" target="_blank">人臉檢測																</a>
						<span class="article_info_click">更多</span></span>
																				<div class="tags-box space">
							<span class="label">個人分類:</span>
															<a class="tag-link" href="https://blog.csdn.net/m0_37684310/article/category/7727014" target="_blank">LibFaceDetection																</a><a class="tag-link" href="https://blog.csdn.net/m0_37684310/article/category/7156653" target="_blank">c/c++																</a>
						</div>
																							</div>
			<div class="operating">
													</div>
		</div>
	</div>
</div>
<article class="baidu_pl">
	<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
							<div class="article-copyright">
				版權宣告:本文為博主原創文章,歡迎大家轉載,註明出處即可。有問題可留言,會盡快回復,歡迎探討!					https://blog.csdn.net/m0_37684310/article/details/80645953				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f76675cdea.css">
					<div class="htmledit_views">
            <p>Libfacedetection是由作者ShiqiYu釋出在Github上的遵循MIT開源協議的公共庫。Libfacedetection是一個用於影象中人臉檢測和人臉標識(Landmark)檢測的二進位制庫,提供了windows下與arm版本 32位和64位的動態庫檔案。為了達到最好的效能,建議使用64位的DLL動態庫。</p><p></p><p>下載地址:<a href="https://codeload.github.com/ShiqiYu/libfacedetection/zip/master" rel="nofollow" target="_blank">https://codeload.github.com/ShiqiYu/libfacedetection/zip/master</a></p><p>本文僅介紹API的使用,稍後幾篇文章會給出效能測試資料及自己改的demo(可播放檔案及實時流)</p><p>標頭檔案:<span style="font-size:14px;color:#ff0000;">facedetect-dll.h</span></p><p><span style="font-size:14px;color:#ff0000;"><img src="https://img-blog.csdn.net/20180610231053155" alt=""><br></span></p><p><span style="font-size:14px;color:#ff0000;"><img src="https://img-blog.csdn.net/20180610231113422" alt=""><br></span></p><p><span style="font-size:14px;color:#ff0000;">可以看到四個API的引數是一致的,下面介紹下函式含義:</span></p><pre><code class="language-cpp">/*

unsigned char * result_buffer // 緩衝區,大小必須為0x20000個位元組。buffer memory for storing face detection results, !!its size must be 0x20000 Bytes!!
unsigned char * gray_image_data // 單通道灰色影象(YUV資料中的Y)
int width // 單通道灰色影象的寬度
int height // 單通道灰色影象的高度
int step // 單通道灰色影象的step引數,同單通道灰色影象的寬度,input image, it must be gray (single-channel) image!
float scale // 每次縮小影象的比例,不建議修改(default: 1.2f),scale factor for scan windows
int min_neighbors // 檢測出的人臉框屬性,越大表示是人臉可能性越大.小於min_neighbors的人臉框將被過濾掉。
// how many neighbors each candidate rectangle should have to retain it
int min_object_width // 資料來源中近乎最小的人臉大小,若存在人臉大小比此資料還小的人臉則忽略不檢測.
// Minimum possible face size. Faces smaller than that are ignored.
int max_object_width = 0 // 資料來源中近乎最大的人臉大小,若存在人臉大小比此資料還大的則忽略不檢測.若此資料被指定為0, 程式會自動確認可能的最大的人臉大小.
// Maximum possible face size.Faces larger than that are

ignored.It is the largest posible when max_object_width = 0.
int doLandmark = 0 // 是否進行人臉特徵點檢測 0: 不進行人臉特徵點檢測1: 進行人臉特徵點檢測 landmark detection
/

下面介紹一下四個API的不同:

/
正面人臉檢測,無法檢測“側視人臉”和“單面人臉”
int * facedetect_frontal(…)
正面視訊監控人臉檢測,無法檢測“側視人臉”和“單面人臉”,可以檢測光線不好情況下的人臉
int *facedetect_frontal_surveillance(…)
多檢視人臉檢測,無法檢測“單面人臉”,但可以檢測“側視人臉”,可以檢測多張人臉,比facedetect_frontal()檢測時間長
int *facedetect_multiview(…)
多檢視增強人臉檢測,無法檢測“單面人臉”,但可以檢測“側視人臉”, 可以檢測多張人臉;比facedetect_multiview()效果好,但是檢測時間長
int *facedetect_multiview_reinforce(…)
*/

返回值介紹:

比如返回值為int *pResults;

pResults為空代表檢測失敗。如果pResults不為空,*pResults為0,代表檢測成功但未檢測到人臉;如果pResults不為空,*pResults不為0,*pResults代表檢測到的人臉個數。

具體人臉屬性引數請看下面程式碼:

if (NULL == pResults)
{
//printf("—Detect Failed !\n");
}
else
{
if (0 == (*pResults))
{ //No Face
//printf("—Detect success, but no face here.\n");
}
else
{
//Got Face,
//得到每個人臉的位置及寬度高度,眼睛關注角度(左正右負,正臉角度為0),置信度(越大人臉的可能性越大)
for (int i = 0; i < (pResults ? pResults : 0); i++)
{
short * p = ((short
)(pResults + 1)) + 142 * i;
FaceFrame stFaceFrame;
//得到人臉的位置及寬度高度
stFaceFrame.x = p[0];
stFaceFrame.y = p[1];
stFaceFrame.width = p[2];
stFaceFrame.height = p[3];
		//置信度(越大人臉的可能性越大)
		stFaceFrame.neighbors = p[4];
		//眼睛關注角度(左正右負,正臉角度為0)
		stFaceFrame.angle = p[5];

		// 得到人臉的特徵點
		for (int j = 0; j &lt; 68; j++)
		{
			//printf("FaceID : %d, Point No : %d, x = %d, y = %d\n", i, j, 
			//(int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]);
		}
	}
}

}