金笑雪 張琳琳 高丹 張黎
摘 要: 近年來,圖像識(shí)別技術(shù)正在向更加直觀、可靠的方向發(fā)展,其中人臉識(shí)別技術(shù)具有極高的研究價(jià)值,應(yīng)用得也最為廣泛。通過對(duì)Linux系統(tǒng)下OpenCV的研究,利用OpenCv Python3.4設(shè)計(jì)出一個(gè)圖像識(shí)別系統(tǒng),實(shí)現(xiàn)了圖像處理,人臉檢測的功能。該系統(tǒng)可以作為后續(xù)對(duì)人像分析、人像理解和人臉特征識(shí)別研究的基礎(chǔ)。
關(guān)鍵詞: 計(jì)算機(jī)視覺; Linux; 圖像識(shí)別; OpenCV; 人臉識(shí)別算法; 研究價(jià)值
中圖分類號(hào):TP391.4 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2018)07-64-03
Abstract: In recent years, image recognition technologies are developing to a more intuitive and reliable direction, among them the face recognition technology has a high research value and is used most widely. Through the research on Linux OpenCV, an image recognition system is designed by using OpenCv Python3.4, and the functions of image processing and face detection are realized. The system can be used as the basis for subsequent research on portrait analysis, portrait understanding and face feature recognition.
Key words: computer vision; Linux; image recognition; OpenCV; face recognition algorithm; research value
0 引言
計(jì)算機(jī)視覺技術(shù)日臻成熟,現(xiàn)已成為教育、醫(yī)療、軍事等人工智能領(lǐng)域中不可或缺的一部分,其與圖像處理、模式識(shí)別等多種學(xué)科的研究有十分緊密的聯(lián)系。計(jì)算機(jī)視覺技術(shù)是一種可實(shí)現(xiàn)人機(jī)交互的智能化工具,包括了圖像采集技術(shù)、識(shí)別技術(shù)、處理技術(shù)、恢復(fù)技術(shù)等[2]。通過這些技術(shù)實(shí)現(xiàn)對(duì)目標(biāo)進(jìn)行提取、分類、識(shí)別、追蹤、統(tǒng)計(jì)決策的功能[3]。它還能夠描述多種空間形式、建立幾何模型、實(shí)現(xiàn)圖像理解[4]。圖像是一種可視化的信息,圖像信號(hào)是圖像信息的理論描述方法[5],在這個(gè)信息需求日益增長的時(shí)代,通過識(shí)別圖像的方式可以更加直觀、高效的解決問題。本文提到的人臉識(shí)別過程是利用代碼調(diào)用攝像頭進(jìn)行拍照,即人臉圖像采集,而后進(jìn)行圖像預(yù)處理、圖像特征提取以及匹配與識(shí)別,從而達(dá)到人臉識(shí)別的目的,在圖像識(shí)別方面具有重要的實(shí)用價(jià)值與研究意義。
1 認(rèn)識(shí)Linux系統(tǒng)
Linux操作系統(tǒng)誕生于1991年,是一種由類UNIX操作系統(tǒng)逐步發(fā)展而來的一種克隆系統(tǒng),Linux提供了一個(gè)完整的操作系統(tǒng)當(dāng)中最底層的硬件控制與資源管理的完整架構(gòu)[6],這種架構(gòu)使它的性能更穩(wěn)定。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。Linux是Open Source的操作系統(tǒng),所以它的程序代碼可以被修改后移植到各種機(jī)器上運(yùn)行,因此,Linux以它的高效性和靈活性而被廣大用戶所喜愛,可滿足多位用戶完成多種任務(wù)的需求。
2 走進(jìn)OpenCV
2.1 OpenCV簡介
OpenCV是一個(gè)基于開源發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫,可以在多種常見的操作系統(tǒng)上運(yùn)行[7],該庫包含大量的C/C++、Python、Ruby、Java和MATLAB/OCTAVE接口[8],靈活且高效。OpenCV的結(jié)構(gòu)包含以下幾個(gè)模塊:
它的應(yīng)用領(lǐng)域也十分廣泛,包括產(chǎn)品檢測,醫(yī)學(xué)成像,圖像分區(qū),軌跡跟蹤,機(jī)器人等等,而本文所應(yīng)用的就是它的圖像識(shí)別功能,OpenCv擁有大量的函數(shù)可以應(yīng)用在圖像識(shí)別功能方面。
2.2 基于OpenCV人臉識(shí)別的三種算法
2.2.1 Eigenfaces createEigenFaceRecognizer()
特征臉(Eigenfaces)算法指視覺中進(jìn)行人臉識(shí)別時(shí)使用的特征向量,它是基于PCA用于一般性剛體識(shí)別以及人臉識(shí)別的描述技術(shù)[9],其識(shí)別的過程就是將人臉圖像進(jìn)行編碼,把人臉從像素空間映射到低維子空間上,在另一個(gè)空間中計(jì)算兩幅人臉圖像之間的距離,從而成功實(shí)現(xiàn)人臉識(shí)別。
2.2.2 Fisherfaces createFisherFaceRecognizer()
Fisherface基于線性判別分析[10],它與上文所說的PCA類似,這兩種方法都是將數(shù)據(jù)降至低維度空間處理的方法,具體操作是在Fisher判別準(zhǔn)則函數(shù)取得極值的條件下,求得一個(gè)最佳判別方向,然后再將模式高維特征向量投影到該最佳判別方向上,構(gòu)成一個(gè)一維的判別特征空間,人臉識(shí)別就可以在這個(gè)一維的空間中進(jìn)行。
2.2.3 Local Binary Patterns Histograms createLBPHFaceRecognizer()
LBP(local binary pattern)是局部二值模式,它是一種具有灰度不變性和旋轉(zhuǎn)不變性并且用來描述圖像局部特征的算子。該算子將人臉分成幾個(gè)子圖像然后進(jìn)行LBP變換,求出每個(gè)區(qū)域的LBP直方圖,并將這N個(gè)直方圖拼接成一個(gè)新的直方圖來表示人臉的特征[11]。但是,這種方法易受到噪聲的影響,如果用局部3×3的矩形進(jìn)行變換,點(diǎn)噪聲的問題就變得不明顯,不會(huì)影響檢測的性能。最后求取每個(gè)矩形內(nèi)的圖像像素和作為矩形的特征值,將每個(gè)矩形的特征值與中心矩形的特征值進(jìn)行比較,重新進(jìn)行LBP編碼,并將LBP編碼作為該局部區(qū)域的特征值,再利用分類器便可以進(jìn)行人臉檢測。
3 Linux下OpenCV的識(shí)別應(yīng)用
3.1 在Linux系統(tǒng)下搭建OpenCv環(huán)境
⑴ 使用apt-get更新樹莓派系統(tǒng)及軟件包
sudo apt-get update
sudo apt-get upgrade
⑵ 利用apt-get獲取安裝OpenCv的工具——CMake
sudo apt-get install build-essential cmake pkg-config
使用apt-get獲取OpenCv需要的庫文件和依賴關(guān)系。
sudo apt-get install libjpeg-dev libtiff5-dev
libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev
libswcale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
下載OpenCv源代碼并且使用CMake編譯,使用wget在opencv官網(wǎng)下載源碼。創(chuàng)建Python虛擬環(huán)境,命名為cv,在cv下使用cmake編譯opencv并安裝,然后將安裝好的opencv庫聯(lián)接到cv虛擬環(huán)境中。具體流程如下:
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_
contrib/modules \
-D BUILD_EXAMPLES=ON ..
make j4
sudo make install
sudo ldconfig
3.2 通過Python利用OpenCv實(shí)現(xiàn)人臉識(shí)別
人臉識(shí)別首先通過攝像頭拍攝捕獲圖片,并存儲(chǔ)圖片、定義路徑,然后對(duì)圖像進(jìn)行灰度處理從而提高運(yùn)算速率,程序框圖如圖2所示。
參考代碼:
from picamera import PiCamera
import cv2
from time import sleep
# 在python庫中導(dǎo)入所需的模塊
camera=PiCamera()
# 獲取PiCamera對(duì)象camera
while(1):
sleep(1)
# 程序暫停1秒,即每隔一秒獲取一次人數(shù)
camera.capture('cam.jpg')
# 攝像頭捕獲當(dāng)前圖像,存為cam.jpg
imagepath='/home/pi/cam.jpg'
# 定義圖片路徑為imagepath
face_cascade=cv2.CascadeClassifier(r'/home/pi/Downloads/opencv-master/data/haarcascades/haarcascade_frontalface_default.xml')
# 定義人臉識(shí)別Haar特征分類器所在路徑
image=cv2.imread(imagepath,)
# 根據(jù)路徑讀取該圖片為image
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 將圖片進(jìn)行灰度轉(zhuǎn)換
faces=face_cascade.detectMultiScale(gray,1.15,5)
# 檢測識(shí)別圖中人臉
for(x,y,w,h) in faces:
cv2.circle(image,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('Find Faces!',image)
cv2.waitKey(0)
# 上述注釋為實(shí)現(xiàn)人臉的代碼
4 結(jié)束語
本文基于Linux下OpenCV的人臉識(shí)別模塊,運(yùn)用了許多加載顯示及處理識(shí)別等多種函數(shù),實(shí)現(xiàn)了圖像處理和人臉檢測的功能。OpenCV注重速度和商業(yè)化,代碼優(yōu)化,精度高,具有實(shí)時(shí)性等諸多優(yōu)點(diǎn),可以解決多種領(lǐng)域問題。
用計(jì)算機(jī)模擬人的視覺功能,從圖像中提取信息,對(duì)圖像的處理更加直觀化。它的發(fā)展前景十分廣闊,可以作為后續(xù)對(duì)人像分析、人像理解和人臉特征識(shí)別研究的基礎(chǔ)。這項(xiàng)技術(shù)不僅促進(jìn)了視覺研究的發(fā)展,更使計(jì)算機(jī)視覺技術(shù)開創(chuàng)了全新的紀(jì)元。
參考文獻(xiàn)(References):
[1] 趙榮剛,賀慶民.計(jì)算機(jī)人臉識(shí)別技術(shù)的應(yīng)用[J].電子技術(shù)與軟件工程,2018.4:137
[2] 朱興統(tǒng),習(xí)洋洋.基于C++和OpenCV的人臉識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化與儀器儀表,2014.8:127-128,131
[3] 謝飛.基于計(jì)算機(jī)視覺的自動(dòng)光學(xué)檢測關(guān)鍵技術(shù)與應(yīng)用研究[D].南京大學(xué)碩士學(xué)位,2013.
[4] 王泉枝.基于計(jì)算機(jī)視覺技術(shù)的圖像識(shí)別與復(fù)原[D].天津大學(xué)碩士學(xué)位論文,2011.
[5] 賈小軍,喻擎蒼.基于開源計(jì)算機(jī)視覺庫OpenCV的圖像處理[J].計(jì)算機(jī)應(yīng)用與軟件,2008.4:276-278
[6] 高瑩,孫雋嬋,焦傳陽,任利峰.Linux操作系統(tǒng)的開發(fā)和應(yīng)用探索[J].產(chǎn)業(yè)與科技論壇,2018.17(1):48-89
[7] 秋月.基于OpenCV的人臉識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].吉林大學(xué)碩士學(xué)位論文,2015.
[8] 王慧琴.基于OpenCV的人臉識(shí)別的研究[J].長治學(xué)院報(bào),2016,33(05):42-44.
[9] 趙力莊,高文,陳熙霖.Eigenface的變維分類方法及其在表情識(shí)別中的應(yīng)用[J].計(jì)算機(jī)學(xué)報(bào),1999.6:627-632
[10] 陳高曙,曾慶寧.Eigenface和Fisherface用于人臉識(shí)別的性能比較[J].中國科技信息,2006.9:199-201
[11] 何云,吳懷宇,鐘銳.基于多種LBP特征集成學(xué)習(xí)的人臉識(shí)別[J].計(jì)算機(jī)應(yīng)用研究,2018.35(1):292-295