1. 程式人生 > >OpenCV人臉識別(正臉、左右側臉)----GPU版使用

OpenCV人臉識別(正臉、左右側臉)----GPU版使用

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/gpu/gpu.hpp>
#include<iostream>
#include<time.h>


using namespace std;
using namespace cv;

string front_face_cascade_name = "../haarcascades_GPU/haarcascade_frontalface_alt2.xml";//正臉
string left_face_cascade_name = "../haarcascades_GPU/haarcascade_profileface.xml";//左臉

gpu::CascadeClassifier_GPU front_face_cascade;
gpu::CascadeClassifier_GPU left_face_cascade;



int main()
{


	Mat img;
	
	if (!front_face_cascade.load(front_face_cascade_name)){
		cout << "cascade load error" << endl;
		return -1;
	}
	if (!left_face_cascade.load(left_face_cascade_name)){
		cout << "cascade load error" << endl;
		return -1;
	}
	gpu::GpuMat GpuGray, GpuObj;
	VideoCapture cap(1);
		while (cap.isOpened()){
			cap >> img;

			gpu::GpuMat GpuImg;
			GpuImg.upload(img);
			clock_t start = clock();
			gpu::cvtColor(GpuImg, GpuGray, CV_BGR2GRAY);
			gpu::equalizeHist(GpuGray, GpuGray);

			gpu::GpuMat GpuGrayRight;//右臉
			gpu::flip(GpuGray, GpuGrayRight, 1);

			Mat obj_host;// 把儲存在GpuMat中的Rect存到Cpu Mat中  

			 //區別於CPU版,返回的人臉檢測區域Rect儲存在GpuMat中
			//正臉
			int detections_number_front = front_face_cascade.detectMultiScale(GpuGray, GpuObj);		
			// download only detected number of rectangles
			GpuObj.colRange(0, detections_number_front).download(obj_host);	
			Rect* faces = obj_host.ptr<Rect>();
			//這裡就比較清楚了,利用ptr,每次讀一個Rect,共detections_number個檢測區域
			for (int i = 0; i < detections_number_front; ++i)
				cv::rectangle(img, faces[i], Scalar(255),3);
			//左臉
			int detections_number_feft = left_face_cascade.detectMultiScale(GpuGray, GpuObj);
			// download only detected number of rectangles
			GpuObj.colRange(0, detections_number_feft).download(obj_host);
			faces = obj_host.ptr<Rect>();
			for (int i = 0; i < detections_number_feft; ++i)
				cv::rectangle(img, faces[i], Scalar(0,0,255), 3);

			//右臉
			int detections_number_right = left_face_cascade.detectMultiScale(GpuGrayRight, GpuObj);
			// download only detected number of rectangles
			GpuObj.colRange(0, detections_number_right).download(obj_host);
			faces = obj_host.ptr<Rect>();
			for (int i = 0; i < detections_number_right; ++i)
				cv::rectangle(img, Rect(img.cols - faces[i].x - faces[i].width, faces[i].y, faces[i].width, faces[i].height), Scalar(0, 255, 0), 3);


			clock_t end = clock();
			double duration = (end - start) / CLOCKS_PER_SEC;
			cout << "一幀耗時:" << duration << endl;
			imshow("Faces", img);
			char ch = waitKey(33);
			if (ch == 'q')
				break;
		}	
}

效果如下,完全的側臉還是檢測不到。

相關推薦

OpenCV人臉識別右側----GPU使用

#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/gpu/gpu.hpp> #include<

人臉識別稀疏表示人工神經網路

1. 稀疏表示 對於一個訊號 x,如果 x 中大部分的元素都為 0,只有少部分元素不為0,則稱訊號 x 為稀疏的。或者 x 中大部分元素都為較小值,接近於 0,只有少部分元素為較大值,也可以稱訊號 x 為稀疏的(例如,影象傅立葉變換之後,或者小波變換之後)。

基於Python3.7和opencv人臉識別含資料收集,模型訓練

前言 第一次寫部落格,有點緊張和興奮。廢話不多說,直接進入正題。如果你渴望使你的電腦能夠進行人臉識別;如果你不想了解什麼c++、底層演算法;如果你也不想買什麼樹莓派,安裝什麼幾個G的opencv;如果你和我一樣是個還沒入門的小白,但是想體驗一下人臉識別的魅力。那麼恭喜你,這篇文章就是為你準備的。讓我們開始吧

java實現opencv人臉識別

Java下使用opencv進行人臉檢測 工作需要,研究下人臉識別,發現opencv比較常用,儘管能檢測人臉,但識別率不高,多數是用來獲取攝像頭的視訊流的,提取裡面的視訊幀,實現人臉識別時通常會和其他框架搭配使用,比如face_recognition、SeetaFace En

【2018.12.24】python3.7+OpenCV 人臉識別圖片+攝像頭

一、識別影象中的人臉個數。註釋寫的很好(\(^o^)/恩) #!/practice/Study_Test python # -*- coding: utf-8 -*- # @Time : 2018/12/23 21:19 # @Author : yb.w # @File : ima

opencv 人臉識別 訓練樣本的處理

本文實現基於eigenface的人臉檢測與識別。給定一個影象資料庫,進行以下步驟:進行人臉檢測,將檢測出的人臉存入資料庫2對資料庫2進行人臉建模在測試集上進行recognition本篇實現第一步:進行人臉檢測,將檢測出的人臉存入資料庫2環境:vs2010+opencv 2.4

opencv 人臉識別 訓練和識別

上一篇中我們對訓練資料做了一些預處理,檢測出人臉並儲存在\pic\color\x資料夾下(x=1,2,3,...類別號),本文做訓練和識別。為了識別,首先將人臉訓練資料 轉為灰度、對齊、歸一化,再放入分類器(EigenFaceRecognizer),最後用訓練出的model進

性能測試五:jmeter進階之後置處理器json提取器

性能測試 post 提取 bubuko 測試 sample 通過 ima 圖片 如,從get返回的json中提取stock的值 作為post的請求參數 1、JSON提取器 專門對json數據進行提取的後置處理器 Debug Sampler:記錄之前的

效能測試五:jmeter進階之後置處理器json提取器

  如,從get返回的json中提取stock的值 作為post的請求引數   1、JSON提取器 專門對json資料進行提取的後置處理器   Debug Sampler:記錄之前的請求的所有引數及資料     &n

OpenCV人臉識別實驗——特徵Eigenfaces及其重構的原始碼詳解

1、介紹Introduction 從OpenCV2.4開始,加入了新的類FaceRecognizer,我們可以使用它便捷地進行人臉識別實驗。 本實驗採用的程式設計環境為:opencv3.0+VS2013。人臉識別的實驗已經轉移到face模組中, face模組在我這裡的路徑為

利用pythontensorflowopencv實現人臉識別包會

一,前言 本人是機械專業在讀碩士,在完成暑假實踐的時候接觸到了人臉識別,對這一實現很感興趣,所以花了大概十天時間做出了自己的人臉識別。這篇文章應該是很詳細的了所以幫你實現人臉識別應該沒什麼問題。 先說本博文的最終要達到的效果:通過一系列操作,在攝像頭的視訊流中識別特定

OpenCV——人臉識別模型訓練2

在之前的部落格OpenCV——人臉識別資料處理(1)之中,已經下載了ORL人臉資料庫,並且為了識別自己的人臉寫了一個拍照程式自拍。之後對拍的照片進行人臉識別和提取,最後我們得到了一個包含自己的人臉照片的資料夾s41。在部落格的最後我們提到了一個非常重要的檔案——

openCV人臉識別三種演算法實現官網翻譯

 怎樣使用OpenCV進行人臉識別 友情提示,要看懂程式碼前,你得先知道OpenCV的安裝和配置,會用C++,用過一些OpenCV函式。基本的影象處理和矩陣知識也是需要的。[gm:我是簫鳴的註釋]由於我僅僅是翻譯,對於六級才過的我,肯定有一些翻譯錯的或

OpenCV人臉識別的原理 原文完整版

http://www.educity.cn/wenda/358439.html “人臉識別”是一個在計算機視覺和生物特徵識別領域十分活躍的話題。這個主題已經被給力地研究了25年,並且最終在安全、機器人學、人機互動、數碼攝像機、遊戲和娛樂領域得到了廣泛應用。   “人臉

人臉識別初學篇-VS2015+opencv3.2的配置

logs 點擊 環境變量 安裝 details 接下來 安裝包 png 應該 初學人臉識別,感覺安裝也是一個很大的麻煩。 寫在這裏記錄一下吧 一:先安裝好我們需要的軟件 首先安裝Vs2015,在官網或者csdn搜一下應該找的到。 安裝步驟沒有太多講究。 點擊exe文件,

2018-06-04筆記grepsedawk工具

linux9.1 正則介紹 正則表達式,又稱規則表達式,計算機科學的一個概念,正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯,在很多文本編輯器或其他工具裏,正則表達式通常被用來檢索和/或替換

OpenCV人臉識別

com show wait window alt imp bsp src import import cv2 filename = ‘pic.jpg‘ def detect(filename): face_cascade = cv2.Cascade

OpenCV環境搭建採用官方已經編譯好的

一、下載OpenCV安裝包: 到OpenCV的官網(http://opencv.org/)下載最新版本的OpenCV安裝包,由於OpenCV針對不同平臺都有安裝程式,所以我們只需要根據當前開發環境選擇合適的平臺版本即可,這裡我們是在win7 64bit作業系統下進行開發,所以應該下載Open

深度學習——deepNN模型實現攝像頭實時識別人臉表情C++和python3.6混合程式設計

一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

送你9個常用的人臉資料庫附連結報告

本文主要介紹以下幾種常用的人臉資料庫: 1. FERET人臉資料庫 http://www.nist.gov/itl/iad/ig/colorferet.cfm 由FERET專案建立,此影象集包含大量的人臉影象,並且每幅圖中均只有一個人臉。該集中,同一個人的照片有不同表情、光照、姿態和年齡的變化。包含1萬