linux环境用opencv读取图片,基于Linux下OpenCV的人脸识别模块设计

2023-11-18

金笑雪 张琳琳 高丹 张黎

摘 要: 近年来,图像识别技术正在向更加直观、可靠的方向发展,其中人脸识别技术具有极高的研究价值,应用得也最为广泛。通过对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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux环境用opencv读取图片,基于Linux下OpenCV的人脸识别模块设计 的相关文章

  • Linux Ctrl+ 所有的快捷键

    Ctrl a 光标移到行首 Ctrl b 光标向前移一格 Ctrl c 结束命令 Ctrl d 删除光标所在字符 Ctrl e 光标移到行尾 Ctrl f 光标向后移一格 Ctrl g Ctrl h 删除光标前一格 Ctrl i Ctrl
  • SoC性能指标&ARM内核运算能力

    自动驾驶芯片常用的性能评价指标 TOPS DMIPS GFLOPS分别说的是啥 TOPS Tera Operation Per Second 表示每秒钟可以进行的操作数量 用于衡量自动驾驶的算力 众所周知 汽车上最常用的传感器是摄像头 而与
  • URP——后期处理特效

    通用渲染管道 URP 包括一个后处理效果的集成实现 如果使用URP 则不需要为后期处理效果安装额外的包 URP与Post Processing Stack v2包不兼容 URP使用体积框架进行后期处理效果 下面的图片显示了一个URP场景有没
  • 解决qt中cmake单独存放 .ui, .cpp, .h文件

    创建时间 2023 02 18 17 58 04 设想 项目文件较多 全部放在一个目录下就像依托答辩 希望能将头文件放入include ui文件放入ui 源文件放入src 为了将Qt代码和一般非Qt代码分离开 进一步地 将Qt源文件放入qt
  • 【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

    目录 一 BigInteger类简单介绍 二 BigInteger构造方式 1 构造方式 2 输入方式 三 BigInteger常见的成员方法 1 方法介绍 2 方法使用演示 1 加减乘除余 2 比较 3 绝对值和幂 4 转换成对应进制字符
  • java学习笔记——第八章 类和方法(二)

    8 4使用方法 java中的方法不能独立存在 他必须属于一个类或者一个对象 因此方法也不能像函数那样被独立执行 因此必须使用类或对象来调用 总结 方法不能独立定义 方法只能在类体中定义 逻辑上讲 方法要么属于该类本身 要么属于该类的一个对象
  • Flex布局实战详解

    Flex布局详解 1 父项属性 flex direction 设置主轴的方向 justify content 设置主轴上的子元素排列方式 flex wrap 设置子元素是否换行 align content 设置侧轴上的子元素排列方式 多行
  • Office报错:错误代码:30015-6(-1)

    扩展 一 查找ospp vbs的位置 二 打开 管理员 命令提示符 三 运行以下命令 查询SKU ID cscript C Program Files x86 Microsoft Office Office15 ospp vbs dstat
  • c++检测固定usb端口有无设备接入_TypeC协议简介(CC检测原理)

    1 简介 越来越多的手机开始采用Type C作为充电和通信端口 Type C连接器实物和PIN定义如下图 Type C连接器中有两个管脚CC1和CC2 他们用于识别连接器的插入方向 以及不同的插入设备 本文介绍CC的基本识别原理 先介绍几个
  • 阿里云安装Docker添加源报错E: Malformed entry XX in list file /etc/apt/sources.list (Component)

    E Malformed entry 60 in list file etc apt sources list Component E The list of sources could not be read 在阿里云上添加了Docker官
  • Tomcat启动失败连接url中参数useSSL=true引发的缺少证书异常

    第一次使用Tomcat的小白 启动Tomecat一直报错 The last packet successfully received from the server was 6 milliseconds ago The last packe
  • 【转】Adapter应用总结

    Adapter应用总结 首先来看一下Adapter的体系结构 一个Adapter的对象扮演一个桥梁的角色 这个桥梁连接着一个AdapterView和它所包含的数据 Adapter提供了一个通到数据项的途径 Adapter还负责为在数据集里的
  • Python的shelve模块小问题

    shelve模块 是个数据存储模块 可以在文件中存储数据 只需为其提供文件名 在练习时 贴的代码 pre class python import shelve m shelve open r F python Te dat 运行结果报错 T
  • 8 个很棒的 Vue 开发技巧

    1 路由参数解耦 通常在组件中使用路由参数 大多数人会做以下事情 export default methods getParamsId return this route params id 在组件中使用 route 会导致与其相应路由的高
  • flex 弹性盒子布局多行最后一行左对齐的两种解决办法

    首先是这样事儿的 如下图 我们最终想要的效果应该是平均分布和最后一排依次从左向右排列 那么 第一种解决方式 外层容器给弹性盒子布局 且给外层盒子一个after 伪类元素 wrap width 200px height 200px displ
  • HAL库中HAL_UART_Transmit函数 Timeout的意义--串口发送数据的计算

    HAL StatusTypeDef HAL UART Transmit UART HandleTypeDef huart uint8 t pData uint16 t Size uint32 t Timeout 这个是超时 在设置的这个时间
  • 国债期货合约代码是什么字母

    国债期货合约代码是什么字母 二债 代码TS 合约标的是面值为万元人民币 票面利率为3 的名义中短期国债 五债 代码TF 合约标的是面值为万元人民币 票面利率为3 的名义中期国债 十债 代码T 拓展资料 一 期货交易就是赚取差价 期货交易实际
  • Matlab中绘制Bode图与单位阶跃响应图

    假设传递函数方程为 分析k分别为4 1 0 5时bode图和阶跃响应的不同 gt gt w 2 pi 50 gt gt num1 0 5 w 1 0 gt gt den1 1 0 5 w w 2 gt gt num2 1 w 1 0 gt
  • python爬虫——爬取快读小说app

    1 爬取结果 csv文件 出现了有两个表头 不明所以 无关大雅 2 使用fiddler4进行抓包 通过观察url 我们不难发现其中的规律 要实现进行分类抓取 需要更改url第一个数字 如下 https sc canrike com Cate

随机推荐

  • 用16进制的格式查看文件

    od Ax tx1 filename
  • 上传码云_vue-egg 简单的图片上传

    源码已上传码云 小朋友 vue egg 简单的图片上传 知乎视频 www zhihu com VSCode终端不能使用命令 惟愿安好ly 博客园 www cnblogs com 上传用的是 iview design 的 Upload 组件
  • Conda常见命令总结

    以下是常见的conda命令列表 conda create 创建新的虚拟环境 安装指定的包 conda activate 激活虚拟环境 conda deactivate 停用当前虚拟环境 conda list 列出已安装的包 conda se
  • 能连蓝牙键盘吗_300多的小键盘,颜值很能打,GANSS ALT71蓝牙双模机械键盘很香...

    关于键盘配列 你是60 70 80 90 还是100 党 反正上述这些配列差不多我都集齐了 GANSS ALT71正好填补了70 的空缺 这次分享录制了视频 wifi足的可以看这个 更换封面 05 58 视频尚未发布 暂时无法播放 wifi
  • 启动hadoop时候报错:localhost: ssh: Could not resolve hostname localhost: Temporary failure in name resolut...

    这个错误是由于配置文件没有配置好 解决方案如下 1 打开profile文件 vim etc profile 2 在文件最后加入的内容应该如下 高亮的两句一般是大家缺少的 export JAVA HOME usr java jdk expor
  • EasyPoi导入Excel中的图片,空指针异常

    官方文档 1 1 介绍 Powered by MinDoc 导入easypoi依赖 版本可以选择最新的
  • element table显示滚动条

    1 tableX为要显示滚动条的类名 2 显示横向滚动条 3 tableX el table scrollable x el table body wrapper 4 padding 0 0 5px 0 5 margin 0 0 5px 0
  • 【最新】手把手教你在VMware中安装Ubuntu虚拟机

    手把手教你在Vmware中安装Ubuntu虚拟机 一 下载VMware和Ubuntu系统官方镜像 1 下载VMware 2 下载Ubuntu系统官方镜像 二 安装VMware和Ubuntu虚拟机 1 安装VMware 2 安装Ubuntu镜
  • 电源学习总结(二)——线性稳压主要特点及原理

    文章目录 主要特点 内部结构 常见的三端线性稳压 AMS1117 主要特点 线性稳压最为突出的优点主要有成本低 噪声低 体积小 由于线性稳压结构简单 生产相对容易 因此其生产成本可以很低 同时其需要的外围器件也很少 一般只需要在输入端和输出
  • 【Python】教你写一个一键上传git的脚本(打包成exe)

    本篇博客来教你用Python写一个简单的git自动上传脚本 前言 为什么需要一个这样的东西 有的时候 我的学习代码其实没啥好commit的 写一个自动上传的脚本 就可以自动执行完所有的命令 而不需要自己手动进行git三板斧操作 项目代码已开
  • unplugin-vue-components 源码原理分析

    unplugin vue components 是一款按需自动导入Vue组件的库 支持 Vue2 和 Vue3 同时支持组件和指令 使用此插件库后 不再需要手动导入组件 插件会自动识别按需导入组件以及对应样式 我们只需要像全局组件那样使用即
  • 【笔记】SemGCN

    一 论文总结 1 1 核心贡献 提出了一种改进的图卷积操作 称为语义图卷积 SemGConv 它源自cnn 其关键思想是学习图中暗示的边的信道权值 然后将它们与核矩阵结合起来 这大大提高了图卷积的能力 其次 我们引入了SemGCN 其中Se
  • Unity PlayerPrefs(数据持久化)

    PlayerPrefs Unity3D中的数据持久化是以键值的形式存储的 可以看作是一个字典 Unity3D中值是通过键名来读取的 当值不存在时 返回默认值 目前Unity3D中只支持int string float三种数据类型的读取 参考
  • android开发工具!Android性能优化常见问题,灵魂拷问

    前言 今年上半年其实就已经有了换工作的想法 奈何疫情原因和岗位缩减 加之信心不足 到六月底投递了百度的Android岗位 本以为像我这种非211 985没工作经验的渣渣只能被直接pass 结果却意外的收到了电话 真是受宠若惊 经过电面 技术
  • 51单片机入学第八课——8*8点阵屏

    文章目录 LED点阵屏 点阵屏电路图 74HC595芯片 串入并出 使用方法 编程 点亮一个点 显示汉字 PCtoLCD 2002 编写代码 总结 LED点阵屏 LED点阵屏和数码管工作都是是靠二极管发光 但工作原理与矩阵键盘有些类似 在后
  • springboot2.0整合logback日志(详细)

    一 近期自己的项目想要一个记录日志的功能 而springboot本身就内置了日志功能 然而想要输入想要的日志 并且输出到磁盘 然后按天归档 或者日志的切分什么的 自带的日志仅仅具有简单的功能 百度了一番 总结如下 适合大多数的应用场景 二
  • python线程池ThreadPoolExecutor使用

    假设我们必须多线程任务创建大量线程 由于线程太多 因此可能会有很多性能问题 这在计算上会是最昂贵的 一个主要问题可能是吞吐量受限 我们可以通过创建一个线程池来解决这个问题 一个线程池可以被定义为一组预先实例化和空闲的线程 它们随时可以开始工
  • 微信小程序请求库的封装方法

    1 文档地址 微信官方文档 wx request网络请求 2 项目使用 根目录下新建utils gt request js 作为请求通用库 接口地址 const DEV URL http localhost 22667 const PROD
  • 常用python程序

    压缩文件 import zipfile import os def zipDir dirpath outFullName 压缩指定文件夹 param dirpath 目标文件夹路径 param outFullName 压缩文件保存路径 xx
  • linux环境用opencv读取图片,基于Linux下OpenCV的人脸识别模块设计

    金笑雪 张琳琳 高丹 张黎 摘 要 近年来 图像识别技术正在向更加直观 可靠的方向发展 其中人脸识别技术具有极高的研究价值 应用得也最为广泛 通过对Linux系统下OpenCV的研究 利用OpenCv Python3 4设计出一个图像识别系