1. 程式人生 > >OpenCV學習筆記[3]Java Demo人臉識別

OpenCV學習筆記[3]Java Demo人臉識別

OpenCV學習筆記:Java Demo人臉識別

[簡介]

        我記得在很久以前,CSDN似乎搞過一個活動,給一個橘子林的照片,讓程式計算相片裡有多少個橘子。之所以對這個問題記憶猶新,是因為在專業學習初期,相比於排序遍歷搜尋等簡單演算法而言,“影象識別”演算法一直是難以理解的東西,而我偏偏又痴迷於此,不管自己多麼無知,對於令我迷惑的問題總是充滿著解決的渴望。

        通過對OpenCV的初步瞭解,我發現影象識別的很多問題都可以用它方便的解決,本次將是一個來自官方的人臉識別的例項,我們提供影象,使用內建的匹配模式與演算法,得到影象中的人臉位置,這與在騰訊空間中流行的圖片識別過程類似。

[例項:人臉識別]

英文原版程式可以在這裡找到,注意修改版本號和檔案路徑:opencv.org

專案目錄結構如下:


我沒有采用原版中直接按照類的包格式進行資源的引用,而是建立了Data與Result兩個目錄用來存放原與結果,這樣輸出更方便一些。

lbpcascade_frontalface.xml可以從OpenCV庫的解壓路徑下sources\data\lbpcascades找到。

CVMain.java:

public class CVMain {
	public static void main(String[] args) throws InterruptedException {
		System.loadLibrary("opencv_java249");
		new FaceDetector().run();
	}
}
FaceDetector:
public class FaceDetector {
	public void run(){
		CascadeClassifier faceDetector = new CascadeClassifier("./Data/lbpcascade_frontalface.xml");
		Mat image = Highgui.imread("./Data/haha.jpg");
		MatOfRect faceDetections = new MatOfRect();
		faceDetector.detectMultiScale(image, faceDetections);

		System.out.println(String.format("Detected %s faces",
				faceDetections.toArray().length));
		for (Rect rect : faceDetections.toArray()) {
			Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x
					+ rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
		}

		String filename = "./Result/FaceDetect.png";
		System.out.println(String.format("Writing %s", filename));
		Highgui.imwrite(filename, image);
	}
}

我輸入的圖片:


程式輸出結果:


↑對於完整的人臉,識別率非常高,但有時也會出現意外,例如上圖中史密斯先生的耳朵被識別為一張臉(放大一看確實有點像人臉),大家有興趣可以拿自己畢業照之類的合照來測試一下。

[總結]

        這個問題解決的很方便,我們沒有觸及任何識別演算法的事情,只是給出圖片、獲得結果這樣直截了當。我希望以後至少能夠掌握匹配模式設定的一些知識,嘗試使用這套結構去解決先前數橘子的問題。

        還有一個值得注意到的問題,OpenCV的API似乎直接從檔案路徑進行的支援,按照Java開發的原則,流封裝應該優先於檔案,如果直接對檔案路徑進行封裝,那麼將專案打包後對jar中資源的引用將會非常麻煩(但從jar包中獲得流資源卻非常容易)。這個問題以後還要持續關注。

相關推薦

OpenCV學習筆記[3]Java Demo人臉識別

OpenCV學習筆記:Java Demo人臉識別 [簡介]         我記得在很久以前,CSDN似乎搞過一個活動,給一個橘子林的照片,讓程式計算相片裡有多少個橘子。之所以對這個問題記憶猶新,是因為在專業學習初期,相比於排序遍歷搜尋等簡單演算法而言,“影象識別”演算法

OPENCV學習筆記3-4_使用模型-視圖-控制器設計應用程序

main hold sse model getters core tpi sso data   此節介紹的架構模式(MVC),將聯合使用模型-視圖-控制器(Model-View-Controller)三個模式以及其他的類。其清晰地分離程序中的邏輯部分與用戶交互部分。此節將使

OPENCV學習筆記3-7_RGB->YCbCr

digital tor oot ssi ice buffer ica 方案 空間 色彩空間用數學方式來描述顏色集合,常見的2個基本色彩模型是RGB,YUB. ? RGB - Used in computer graphics ? YCbCr - Us

OpenCV學習筆記3:圖像模糊作用和方法

希望 ont 去模糊 image title name 聽說 但是 意義 一、意義和作用: 圖像的模糊處理就是將圖片處理的更加模糊,如下圖,左側是原圖,右側是經過處理之後的圖片。 從主觀意願上說,我們希望看到清晰的圖像,而不是模糊的圖像。所以很多時候我們聽說還有一種專門進

tensorflow學習筆記-3 圖片數字的識別

(1)下載資料集 (2)編寫程式碼 #encoding:utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 獲取資料 mnist = in

JavaSE學習筆記(3.Java類的介紹)

1.類的成員: 類的成員包括:構造器、類成員變數、例項成員變數、類方法、例項方法、類初始化塊、例項初始化塊 2.構造器描述: a.構造器名必須與類名相同,在類的例項化過程中,需要呼叫構造器,如果類沒有構造器,系統會預設提供一個預設的無參構造器。 b.構造器不能定義返回

iOS開發之opencv學習筆記四:使用feature2d識別圖片

使用過vuforia或者亮風臺的朋友應該知道,這兩個平臺對圖片的跟蹤的準備工作是很簡單的,只需要幾張樣本圖片就可以做了。 但是按照上篇的介紹,如果用CascadeClassifier進行物體跟蹤就需要非常非常多的樣本,那麼,要對圖片進行識別跟蹤就沒有像上面說的兩個平臺那樣

android 結合 opencv專案(NDK、OpenCV、android,官方Demo人臉識別

第一個android結合 opencv專案(NDK、OpenCV、android人臉識別) (2017.5.16更改,見綠色) 前提條件:已經搭建好jdk 和eclipse 開發android 和外掛CDT (eclipse c++)的環境 在命令列視窗輸入:java –v

OpenCV 學習筆記07 目標檢測與識別

數據 屬於 不能 說明 其余 目標識別 通過 窗口 htm 目標檢測與識別是計算機視覺中最常見的挑戰之一。屬於高級主題。 本章節將擴展目標檢測的概念,首先探討人臉識別技術,然後將該技術應用到顯示生活中的各種目標檢測。 1 目標檢測與識別技術 為了與OpenCV 學習筆

openCV學習筆記(十四) —— 人臉識別演算法(3/3)—— 區域性二值模式LBP

LBP(Local Binary Patterns,區域性二值模式)是提取區域性特徵作為判別依據的。LBP方法顯著的優點是對光照不敏感,但是依然沒有解決姿態和表情的問題。不過相比於特徵臉方法,LBP的識別率已經有了很大的提升。在[1]的文章裡,有些人臉庫的識別率已經達到了

openCV學習筆記(十二) —— 人臉識別演算法(1/3)—— 特徵臉 EigenFaces

一、原理 opencv支援3種人臉識別的演算法,分別是: 1.    Eigen Faces    PCA(特徵臉方法) 2.    Fisher Faces    LDA(線性判別分析) 3.    Local Binary Pattern Histograms(LB

opencv學習筆記六十五:人臉識別演算法之EigenFace

簡要: 特徵臉演算法是將影象每一個畫素當作一維特徵,然後用SVM或其它機器學習演算法進行訓練。但這樣維數太多,根本無法計算。我這裡用的是ORL人臉資料庫,英國劍橋實驗室拍攝的,有40位志願者的人臉,在不同表情不同光照下每位志願者拍攝10張,共有400張圖片,大小為112*9

opencv學習筆記——自己訓練人臉識別分類器

       在使用opencv自帶的分類器haarcascade_frontalface_alt.xml進行人臉識別的基礎認識後,決定自己訓練一個分類器看一下效果。該過程大致可分為三個階段:樣本採集、分類器訓練和運用訓練好的分類器進行人臉檢測。1、樣本的採集       在

OpenCV學習筆記(五十五)——用OpenCV人臉識別和性別識別contrib

人臉識別的故事說也說不完,調研的事還是交給大家吧。這裡說的是用OpenCV做人臉識別。 因為是真正的人臉識別,不是搞笑娛樂的東西,所以資料庫一定要強大的,推薦個網站http://www.face-rec.org/databases/。這裡有最全的人臉庫的概述,希望大家能找到

java學習筆記(3)

決定 ati 開始 詳細講解 調用 數據 寄存器 art 筆記 java基礎知識 1:方法 (1)方法:就是完成特定功能的代碼塊。 註意:在很多語言裏面有函數的定義,而在Java中,函數被稱為方法。 (2)格式: 修飾符 返回值類型 方法名(參數類型 參數名1

JAVA並發實戰學習筆記——3,4章

enc 方法 不變 設定 cti 保護 () col 約束 JAVA並發實戰學習筆記 第三章 對象的共享 失效數據: java程序實際運行中會出現①程序執行順序對打亂;②數據對其它線程不可見——兩種情況 上述兩種情況導致在缺乏同步的程序中出現失效數據這一現象,且“失效

C# OpenCV 3- 使用EigenFaceRecognizer人臉識別

... public void TrainRecognizer()         {             var allFaces = new FRService().All(); &nbs

Python+opencv學習筆記人臉視訊採集及實時檢測(樹莓派3B+下檢測)

實驗目標: 1.首先通過opencv程式設計寫一個可以呼叫攝像頭並且能將攝像頭捕捉到的內容進行儲存。 2.將視訊檔案傳送到我們的樹莓派上,然後再利用Python編寫程式對視訊進行人臉識別處理,最後將人臉識別後的視訊儲存。 3.對某一張圖片進行處理,讓其具有毛玻璃效果,並將處理後的圖片儲存。

opencv 學習3)幾何圖形的簡單識別

找到圖形的’極點‘,然後根據圖形的幾何關係便可以得到結果。程式碼如下。(如有錯誤還請指出) /******************************************************************** ** 文 件 名:幾何圖形的簡

opencv學習筆記五十二:基於Haar或LBP級聯分類器的實時人臉人眼檢測

#include<opencv2\opencv.hpp> using namespace cv; using namespace std; int main(int arc, char** argv) { namedWindow("output",