APP下载

基于Linux下OpenCV的人脸识别模块设计

2018-09-17金笑雪张琳琳高丹张黎

计算机时代 2018年7期
关键词:研究价值计算机视觉图像识别

金笑雪 张琳琳 高丹 张黎

摘 要: 近年来,图像识别技术正在向更加直观、可靠的方向发展,其中人脸识别技术具有极高的研究价值,应用得也最为广泛。通过对Linux系统下OpenCV的研究,利用OpenCv Python3.4设计出一个图像识别系统,实现了图像处理,人脸检测的功能。该系统可以作为后续对人像分析、人像理解和人脸特征识别研究的基础。

关键词: 计算机视觉; Linux; 图像识别; OpenCV; 人脸识别算法; 研究价值

中图分类号:TP391.4 文献标志码:A 文章编号: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 引言

計算机视觉技术日臻成熟,现已成为教育、医疗、军事等人工智能领域中不可或缺的一部分,其与图像处理、模式识别等多种学科的研究有十分紧密的联系。计算机视觉技术是一种可实现人机交互的智能化工具,包括了图像采集技术、识别技术、处理技术、恢复技术等[2]。通过这些技术实现对目标进行提取、分类、识别、追踪、统计决策的功能[3]。它还能够描述多种空间形式、建立几何模型、实现图像理解[4]。图像是一种可视化的信息,图像信号是图像信息的理论描述方法[5],在这个信息需求日益增长的时代,通过识别图像的方式可以更加直观、高效的解决问题。本文提到的人脸识别过程是利用代码调用摄像头进行拍照,即人脸图像采集,而后进行图像预处理、图像特征提取以及匹配与识别,从而达到人脸识别的目的,在图像识别方面具有重要的实用价值与研究意义。

1 认识Linux系统

Linux操作系统诞生于1991年,是一种由类UNIX操作系统逐步发展而来的一种克隆系统,Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构[6],这种架构使它的性能更稳定。它能运行主要的UNIX工具软件、应用程序和网络协议。Linux是Open Source的操作系统,所以它的程序代码可以被修改后移植到各种机器上运行,因此,Linux以它的高效性和灵活性而被广大用户所喜爱,可满足多位用户完成多种任务的需求。

2 走进OpenCV

2.1 OpenCV简介

OpenCV是一个基于开源发行的跨平台计算机视觉库,可以在多种常见的操作系统上运行[7],该库包含大量的C/C++、Python、Ruby、Java和MATLAB/OCTAVE接口[8],灵活且高效。OpenCV的结构包含以下几个模块:

它的应用领域也十分广泛,包括产品检测,医学成像,图像分区,轨迹跟踪,机器人等等,而本文所应用的就是它的图像识别功能,OpenCv拥有大量的函数可以应用在图像识别功能方面。

2.2 基于OpenCV人脸识别的三种算法

2.2.1 Eigenfaces createEigenFaceRecognizer()

特征脸(Eigenfaces)算法指视觉中进行人脸识别时使用的特征向量,它是基于PCA用于一般性刚体识别以及人脸识别的描述技术[9],其识别的过程就是将人脸图像进行编码,把人脸从像素空间映射到低维子空间上,在另一个空间中计算两幅人脸图像之间的距离,从而成功实现人脸识别。

2.2.2 Fisherfaces createFisherFaceRecognizer()

Fisherface基于线性判别分析[10],它与上文所说的PCA类似,这两种方法都是将数据降至低维度空间处理的方法,具体操作是在Fisher判别准则函数取得极值的条件下,求得一个最佳判别方向,然后再将模式高维特征向量投影到该最佳判别方向上,构成一个一维的判别特征空间,人脸识别就可以在这个一维的空间中进行。

2.2.3 Local Binary Patterns Histograms createLBPHFaceRecognizer()

LBP(local binary pattern)是局部二值模式,它是一种具有灰度不变性和旋转不变性并且用来描述图像局部特征的算子。该算子将人脸分成几个子图像然后进行LBP变换,求出每个区域的LBP直方图,并将这N个直方图拼接成一个新的直方图来表示人脸的特征[11]。但是,这种方法易受到噪声的影响,如果用局部3×3的矩形进行变换,点噪声的问题就变得不明显,不会影响检测的性能。最后求取每个矩形内的图像像素和作为矩形的特征值,将每个矩形的特征值与中心矩形的特征值进行比较,重新进行LBP编码,并将LBP编码作为该局部区域的特征值,再利用分类器便可以进行人脸检测。

3 Linux下OpenCV的识别应用

3.1 在Linux系统下搭建OpenCv环境

⑴ 使用apt-get更新树莓派系统及软件包

sudo apt-get update

sudo apt-get upgrade

⑵ 利用apt-get获取安装OpenCv的工具——CMake

sudo apt-get install build-essential cmake pkg-config

使用apt-get获取OpenCv需要的库文件和依赖关系。

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官网下载源码。创建Python虚拟环境,命名为cv,在cv下使用cmake编译opencv并安装,然后将安装好的opencv库联接到cv虚拟环境中。具体流程如下:

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实现人脸识别

人脸识别首先通过摄像头拍摄捕获图片,并存储图片、定义路径,然后对图像进行灰度处理从而提高运算速率,程序框图如图2所示。

参考代码:

from picamera import PiCamera

import cv2

from time import sleep

# 在python库中导入所需的模块

camera=PiCamera()

# 获取PiCamera对象camera

while(1):

sleep(1)

# 程序暂停1秒,即每隔一秒获取一次人数

camera.capture('cam.jpg')

# 摄像头捕获当前图像,存为cam.jpg

imagepath='/home/pi/cam.jpg'

# 定义图片路径为imagepath

face_cascade=cv2.CascadeClassifier(r'/home/pi/Downloads/opencv-master/data/haarcascades/haarcascade_frontalface_default.xml')

# 定义人脸识别Haar特征分类器所在路径

image=cv2.imread(imagepath,)

# 根据路径读取该图片为image

gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 将图片进行灰度转换

faces=face_cascade.detectMultiScale(gray,1.15,5)

# 检测识别图中人脸

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)

# 上述注释为实现人脸的代码

4 结束语

本文基于Linux下OpenCV的人脸识别模块,运用了许多加载显示及处理识别等多种函数,实现了图像处理和人脸检测的功能。OpenCV注重速度和商业化,代码优化,精度高,具有实时性等诸多优點,可以解决多种领域问题。

用计算机模拟人的视觉功能,从图像中提取信息,对图像的处理更加直观化。它的发展前景十分广阔,可以作为后续对人像分析、人像理解和人脸特征识别研究的基础。这项技术不仅促进了视觉研究的发展,更使计算机视觉技术开创了全新的纪元。

参考文献(References):

[1] 赵荣刚,贺庆民.计算机人脸识别技术的应用[J].电子技术与软件工程,2018.4:137

[2] 朱兴统,习洋洋.基于C++和OpenCV的人脸识别系统的设计与实现[J].自动化与仪器仪表,2014.8:127-128,131

[3] 谢飞.基于计算机视觉的自动光学检测关键技术与应用研究[D].南京大学硕士学位,2013.

[4] 王泉枝.基于计算机视觉技术的图像识别与复原[D].天津大学硕士学位论文,2011.

[5] 贾小军,喻擎苍.基于开源计算机视觉库OpenCV的图像处理[J].计算机应用与软件,2008.4:276-278

[6] 高莹,孙隽婵,焦传阳,任利峰.Linux操作系统的开发和应用探索[J].产业与科技论坛,2018.17(1):48-89

[7] 秋月.基于OpenCV的人脸识别系统的设计与实现[D].吉林大学硕士学位论文,2015.

[8] 王慧琴.基于OpenCV的人脸识别的研究[J].长治学院报,2016,33(05):42-44.

[9] 赵力庄,高文,陈熙霖.Eigenface的变维分类方法及其在表情识别中的应用[J].计算机学报,1999.6:627-632

[10] 陈高曙,曾庆宁.Eigenface和Fisherface用于人脸识别的性能比较[J].中国科技信息,2006.9:199-201

[11] 何云,吴怀宇,钟锐.基于多种LBP特征集成学习的人脸识别[J].计算机应用研究,2018.35(1):292-295

猜你喜欢

研究价值计算机视觉图像识别
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
图像识别在物联网上的应用
图像识别在水质检测中的应用
广元石窟摩崖题记的资料及其价值
机器视觉技术发展及其工业应用
危险气体罐车液位计算机视觉监控识别报警系统设计
内蒙古民办高校教育发展现状与提升的研究价值
基于计算机视觉的细小颗粒团重量测量的研究
中日文化交流中往来物的研究价值