【Ubuntu】基于C++实现人脸识别

news2024/11/21 0:24:03

人脸识别考勤机

文章目录

  • 人脸识别考勤机
  • 概述
  • 第一章 搭建Ubuntu环境
    • 1.1 什么是物联网
    • 1.2 物联网应该怎么学
    • 1.3 Linux开发环境搭建
    • 1.4 Linux基本使用
    • 1.5 Ubuntu网络配置
  • 第二章 “hello,world!”程序
    • 2.1 什么是程序
    • 2.2 “hello,world!”程序
    • 2.3 C++语法扩展
    • 2.4 常见错误调试
  • 第三章 开启摄像头
    • 3.1 项目框架
    • 3.2 初识OpenCV
    • 3.3 OpenCV编程-图像采集(上)
    • 3.4 OpenCV编程-图像采集(下)
  • 第四章 人脸检测
    • 4.1 OpenCV编程-图像处理
    • 4.2 OpenCV编程-图像人脸检测(上)
    • 4.3 OpenCV编程-图像人脸检测(下)
  • 第五章 人脸识别-接入百度智能云平台
    • 5.1 人脸库的创建和管理
    • 5.2 人脸识别SDK环境搭建
    • 5.3 百度智能云平台接入
  • 第六章 解析人脸识别数据
  • 后记1:优化显示

  • 笔记主要参考B站视频“【大厂敲门砖】从0到1做一个物联网人脸识别考勤机项目!”。

注:代码文件会放在本人的Github仓库。


概述

实现效果

图1 项目最终实现效果

所需工具

老师使用:VMware12 + Ubuntu16.04 + OpenCV2.4.9 + 百度云人脸识别SDK。
我的使用:VMware17 + Ubuntu20.04.1 + OpenCV4.2.0 + 百度云人脸识别SDK。
注意点:课程安装的OpenCV比较老,所以终端编译时要注意有些函数已经更换库了。

  1. VMware:在Windows电脑上搭建Linux系统进行开发。
  2. OpenCV:完成摄像头显示、人脸检测等步骤。
  3. 百度云人脸识别SDK:上传OpenCV获取的人脸图片,并完成 在线人脸识别 (免费使用1000次/月,个人使用大约10元/月)。

项目框架

图3-1 项目框架
  1. 电脑上安装了Linux虚拟机,所以电脑可以充当人脸识别考勤机的硬件。电脑上的摄像头进行“图像采集”,也就是拍照。
  2. 调用OpenCV库进行“人脸检测”,框出检测到的人脸,然后分割出“人脸截图”。
  3. 将“人脸截图”上传到百度智能云进行“人脸识别”。
  4. 解析百度智能云返回的识别结果,然后在屏幕上显示当前的人脸信息。

第一章 搭建Ubuntu环境

1.1 什么是物联网

行业背景
  物联网属于计算机行业发展到一定阶段的产物。所以要想了解物联网的话,就需要先聊一聊国内互联网产业的发展规律。在国内,计算机产业的发展基本上是十年一变:

  • 1997~2007年“互联网时代”:90年代之前计算机产业落后,90年代之后出现图形化操作系统(如windows),使得电脑的价格越来越便宜,使用也越来越简单,所以96、97年左右电脑开始普及。于是进入“互联网时代”。97年到07年是国内互联网发展的黄金十年,在这期间诞生了百度、阿里、腾讯、网易、搜狐、新浪等一众互联网企业。
  • 2007~2017年“移动互联网时代”:互联网在逐渐兴起的时候,“手机”也在不断发展。整体来看2000年之后手机价格越来越便宜,到04、05年左右手机基本上已经普及了,于是人们对手机的智能化程度有了进一步需求。2007年诞生了手机的“智能化操作系统”,比如谷歌推出安卓系统,苹果推出ios系统。再加上09年是3G元年,于是“操作系统”和“3G”这两个技术的发展,将我们代入到了“移动互联网时代”。09、10年左右手机行业大洗牌,以前的霸主诺基亚、摩托罗拉迅速的被新兴的手机厂商所取代。手机发展后,电脑的使用越来越少。比如外卖、移动支付、网约车,都是移动互联网产物。所以07年~17年计算机产业的重心都从“互联网”转向“移动互联网”,转向了手机端,这十年是移动互联网发展的黄金十年。所以为什么“互联网时代”起家的BAT只有百度看起来不那么出名,也就是因为他没有布局好“移动互联网时代”,像腾讯有微信、QQ、一系列手游等,阿里也有淘宝、支付宝、饿了么等等,而百度的APP很少。
  • 注:微软也在2010年推出过“Windows Phone”手机操作系统,但是反响不大。
  • 注:1G只能打电话,2G能打电话发短信,3G才可以实现移动网络看视频。
  • 2017~至今“物联网时代”:通俗来说,“物联网”就是让所有我们能看得到的东西,比如手机、手环、空调、冰箱、微波炉、指纹锁等都变得智能化、网络化,于是这些东西就可以相互通信、相互协作。这也是未来几十年的发展重心。“互联网时代”主要是电脑,“移动互联网”中手机数量逐渐超过电脑,而“物联网时代”中“物”的数量一定会大大超过手机和电脑。所以“物联网”的前景很广,对于物联网行业的人才需求量也会很大。

技术背景
  那想学习物联网,该学习一些什么技术呢?物联网时代要想让一个“物”变得智能化、网络化,最主要的是使用嵌入式技术。所谓“嵌入式”就是将一个特定的计算机系统嵌入到某个“物”中,使这个“物”变的智能。所以“嵌入式”并不是一个特定的产品或行业,它只是一种计算机技术。常见的嵌入式技术的应用:智能音箱、扫地机器人、工厂机械臂、无人车、智能手环、送餐机器人等。

下面来解析一下嵌入式的官方定义:

以应用为中心:做嵌入式产品的目的就是为了应用。
以计算机技术为基础:嵌入式系统的本质也是计算机,只是将这个计算机嵌入到了某一个物体当中,从而将这个物体变得智能化。
软硬件可裁剪:不同的产品所需功能不同,开发时我们可以根据需求将不需要的软硬件裁剪以降低成本。比如智能音箱需要音响及音乐播放程序、扫地机器人需要超声波雷达及扫地程序等。
对体积、功耗、成本、稳定性等有严格要求:嵌入式产品可能工作在各种环境下,相较于普通计算机在某些性能上要求更严。比如智能手环注重功耗、工业机械臂注重精准度等。
的专用计算机系统:电脑和手机只提供通用的系统环境,我们可以根据自己的需求开发对应的APP,属于通用计算机,软件开发比重较大;而嵌入式系统的软硬件都是为某一个具体产品定制的,属于专用计算机,软件开发比重较小。

发展前景
  不像互联网和移动互联网,物联网涉及到的设备与技术太多,无法在短短十年发展完成,所以未来十年甚至几十年物联网都会一直发展。而物联网在全国甚至全球都刚刚兴起,各大公司都会在物联网布局,人才需求量很大。但现在高校很难培养出真正合格的、市场可用的物联网人才,所以物联网人才现在有很大的缺口

课程定位
本课程计划用5天时间,体验嵌入式产品开发的全过程

项目目标
实现人脸识别考勤机:启动后,摄像头自动识别人脸信息,并显示姓名、时间,同时生成日志文件log.txt记录。

1.2 物联网应该怎么学

本节主要介绍物联网的技术体系。

技术体系
  由于现在不管是电脑、手机,还是嵌入式产品,它们的功能不一样、外观不一样、使用领域也不一样,但它们总归来说都属于计算机,所以在技术上来说很多东西都是相通的。所以先来看一下“计算机分层”。一般一个计算机系统都是由三层构成,即硬件、操作系统、APP,如下图示。

图1-1 计算机分层

硬件:如屏幕、摄像头等。
操作系统:为软件提供一个可以运行的平台,如Windows、iOS、安卓系统、HarmonyOS等。也就是为上层应用开发者提供API(Application Interface, 应用接口),可以帮助软件开发者快速实现一些常见的功能而无需关心底层调用原理,如上网、屏幕显示等功能。
APP:用于实现特定的功能,如微信、QQ、淘宝等。

注:一些简单的计算机系统也可以不使用操作系统,如单片机(stm32、51…),优点是功耗低、价格便宜,但一般难以胜任复杂项目,只能应用于一些简单的项目,如共享单车等。

  在所有操作系统中,“Linux”常用于物联网、服务器领域。“Linux”开源、轻量化、可裁剪,是一个很稳定的系统,所以常用于嵌入式开发。虽然随着物联网的普及和发展,也出现了一些专门用于物联网领域的操作系统,如亚马逊推出了FreeRTOS、阿里推出了AliOS Things等,但全球范围内,还是Linux最常用。下表给出了一些常见的软硬件选择。

表1-1 不同领域下的软硬件选择
领域硬件(CPU)系统
PC端Intel、AMDWindows、MacOS...
移动端ARMAndroid、iOS、HarmonyOS...
物联网ARMLinux、FreeRTOS、AliOS Things...

职业提醒:“单片机开发”也是“嵌入式开发”的分支,但不建议将“单片机开发”作为长期的职业规划。这是因为单片机的知识体系很浅,学一些C语言、接口协议就可以去做开发了,随着年龄的增长很容易遇到技术瓶颈,也就是没有新东西可学了,所以自己的技术、薪资就会停滞不前,于是当体力拼不过年轻人的时候就会出现“35岁危机”。
在选择行业时一定要选择随着自己的年龄增长,能够不断学习、不断进步的行业。所以若想从事嵌入式行业,还是建议去学一下大型的嵌入式操作系统,比如Linux。

现在说完“计算机分层”和“操作系统”后,就总结一下根据“计算机分层”得到的嵌入式技术体系:

图1-2 技术体系
  • 编程基础:不同的软件语言应用于不同的领域,嵌入式开发使用最多的就是C语言及少量的c++。
  • 应用开发:针对APP的开发。
  • 系统开发:针对操作系统的开发。
  • 硬件开发:针对底层硬件的开发。

岗位要求
真正从事这个行业的话,一些具体的岗位要求都是什么呢?

  • 应用开发:精通C/C++,进行Linux上的软件开发。
  • 系统开发工程师:需要处理器ARM Cortex内核相关的知识。

学习方法

  • 学习前先了解这个东西是什么,学了之后能解决什么,带着目的去学。
  • 抽象的概念先放一放,先模仿,用实验现象去理解理论。
  • 多多练习和扩展,不要怕出错,纠错是提升能力最好的办法。
  • 多归纳总结,把零散的知识点串成体系。

1.3 Linux开发环境搭建

  一般进行嵌入式开发时都使用Linux系统,如Ubuntu。因为不同的操作系统一般是不兼容的,所以进行嵌入式开发时会选择嵌入式领域最常用的操作系统——Linux,方便后续进行移植,而不是Windows。所以本节就来搭建一下开发环境,也就是安装Ubuntu虚拟机。

  • 视频版本:VMware12 + Ubuntu16.04 + OpenCV2.4.9。
  • 我的版本:VMware17 + Ubuntu20.04.1 + OpenCV4.2.0。

具体的安装过程可以参考我的博文“辅助笔记-安装Ubantu20.04.1虚拟机”
虽然Ubuntu版本不一致,但实测按照我的博文进行安装可以完成整个项目,并且我这属于最新版(2023年9月)的Ubantu,还囊括了上网、更新源、设置中文等。

虽然Ubuntu下也可以使用图形化界面,但是实际的嵌入式产品一般都不支持图形化界面,对于嵌入式开发者来说不能过度依赖图形化操作,而是使用命令行模式来进行开发,并且命令行开发更快。

1.4 Linux基本使用

本节课学习一下Linux的简单常用指令:

  • ctrl+alt+t键:打开一个终端。
  • exit:终端输入exit,即可关闭该终端。
  • pwd:查看当前目录路径。
  • ls:查看当前目录内容。
  • ll/ls -l:详细的查看当前目录的内容。d开头表示文件夹、-开头表示普通文件。
  • ctrl+l键:清除当前终端内容。
  • cd:打开文件夹。
  • touch:创建文件。
  • mkdir:创建文件夹。
  • rm:删除文件/文件夹。普通文件可以直接删,删除文件夹需要加上选项-r。
  • sudo:以超级管理员身份运行后面的指令。
  • 家目录:Linux系统天然支持多用户,所以为了防止某人任意篡改别人的文件,Linux系统提供“家目录”作为某用户的“私人空间”,除了管理员账户,其他用户都无权访问。这个家目录路径就是/home/用户名
  • 修改公共区域:正常情况下某用户也无法在公共区域增删文件,要想增删文件只能加上sudo指令。
  • tab键:自动补全指令。
  • ↑键:之前的命令。

1.5 Ubuntu网络配置

由于后续会安装很多软件包,所以一定要保证Ubuntun能上网。要是能上网的话,本节课就不用听了。

  • 视频网络配置:桥接模式。
  • 我的网络配置:NAT模式。

注:网络模式不重要,只要能上网就行。换句话说,NAT模式也没问题。

  • 上网验证方法:打开左侧栏的火狐浏览器,输入“www.baidu.com”,若能正常弹出页面,则证明没问题。
  • 若不能上网:“Ubuntu虚拟机网络无法连接的几种解决方法”。

现在能上网了,就介绍一些可以下载、安装软件的命令:

  • dpkg -l:列出Ubuntu下所有安装的软件。
  • dpkg -s 软件名:查看特定软件是否安装。
  • apt-get remove 软件名:卸载特定软件名的软件。
  • apt-get install 软件名:在线安装特定软件名的软件。

注:若提示权限不够,就在选项前加上sudo

第二章 “hello,world!”程序

  第一章已经将环境搭建好了,本章熟悉一下Ubuntu的基本使用。因为要开发硬件的学习成本比较高(不可能几天讲完),所以本项目以软件开发为主,本章就来介绍一些基础概念。

本章主要是增加Ubuntu熟练度的,和主线项目的推进基本无关,熟悉Linux的同学可以跳过本章。

2.1 什么是程序

  “程序”是一组计算机能识别和执行的指令,运行于计算机上来完成人们的某种需求。而这种“指令”就是“计算机语言”,常见的“计算机语言”有C语言、C++、Python、Java等,嵌入式领域中常用C语言和C++。C++是对C语言的扩展,所以要学C++的话,建议先学C语言

  现在来介绍具体的执行过程。当程序员使用“计算机语言”编写出程序后,计算机实际上还是无法直接理解这些指令,此时还需要“编译器”将这些指令“编译”成计算机可以直接执行的“机器码”,最后再根据执行效果进行“调试(debug)”。由于“编译器”只是一个软件,所以目前对于我们来说,只需要关心“编辑”(也就是编写代码)、“调试”这两个步骤就行。开发过程中,“调试”甚至会比“编辑”的时间更长,这一点很正常,不要害怕犯错。

图2-1 编程步骤

2.2 “hello,world!”程序

  在学习一门软件语言时,几乎所有的教程都会从“hello,world!”程序开始演示,所以本节也会演示在Ubuntu桌面写一个“hello,world!”程序,来熟悉在Ubuntu上进行cpp编译运行的流程。

#####################指令速览#####################
cd /home/lyl/桌面
touch main.cpp
vim main.cpp
########################
# 将下面的代码复制到文件中:
#include <iostream>
using namespace std;
int main(){
    cout << "hello,world!" << endl;
    return 0;
}
########################
g++ ./main.cpp -o main
./main
# 然后就可以在终端看到输出的hello,world!了。
#####################终端实例#####################
lyl@ubuntu:~$ ls
公共的  模板  视频  图片  文档  下载  音乐  桌面  Desktop
lyl@ubuntu:~$ cd 桌面
lyl@ubuntu:~/桌面$ ls
lyl@ubuntu:~/桌面$ touch main.cpp
lyl@ubuntu:~/桌面$ ls
main.cpp
lyl@ubuntu:~/桌面$ vim main.cpp
########################
# 将下面的代码复制到文件中:
#include <iostream>
using namespace std;
int main(){
    cout << "hello,world!" << endl;
    return 0;
}
########################
lyl@ubuntu:~/桌面$ g++ ./main.cpp -o main

Command 'g++' not found, but can be installed with:

sudo apt install g++

lyl@ubuntu:~/桌面$ sudo apt install g++
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包是自动安装的并且现在不需要了:
  linux-headers-5.4.0-42 linux-headers-5.4.0-42-generic
  linux-image-5.4.0-42-generic linux-modules-5.4.0-42-generic
  linux-modules-extra-5.4.0-42-generic
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
  binutils binutils-common binutils-x86-64-linux-gnu g++-9 gcc gcc-9 libasan5
  libbinutils libc-dev-bin libc6 libc6-dbg libc6-dev libcrypt-dev
  libctf-nobfd0 libctf0 libgcc-9-dev libitm1 liblsan0 libquadmath0
  libstdc++-9-dev libtsan0 libubsan1 linux-libc-dev manpages-dev
建议安装:
  binutils-doc g++-multilib g++-9-multilib gcc-9-doc gcc-multilib make
  autoconf automake libtool flex bison gcc-doc gcc-9-multilib gcc-9-locales
  glibc-doc libstdc++-9-doc
下列【新】软件包将被安装:
  binutils binutils-common binutils-x86-64-linux-gnu g++ g++-9 gcc gcc-9
  libasan5 libbinutils libc-dev-bin libc6-dev libcrypt-dev libctf-nobfd0
  libctf0 libgcc-9-dev libitm1 liblsan0 libquadmath0 libstdc++-9-dev libtsan0
  libubsan1 linux-libc-dev manpages-dev
下列软件包将被升级:
  libc6 libc6-dbg
升级了 2 个软件包,新安装了 23 个软件包,要卸载 0 个软件包,有 249 个软件包未被升级。
需要下载 58.5 MB 的归档。
解压缩后会消耗 121 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libc6-dbg amd64 2.31-0ubuntu9.9 [20.0 MB]
获取:2 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libc6 amd64 2.31-0ubuntu9.9 [2,722 kB]
获取:3 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 binutils-common amd64 2.34-6ubuntu1.6 [207 kB]
获取:4 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libbinutils amd64 2.34-6ubuntu1.6 [473 kB]
获取:5 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libctf-nobfd0 amd64 2.34-6ubuntu1.6 [47.4 kB]
获取:6 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libctf0 amd64 2.34-6ubuntu1.6 [46.6 kB]
获取:7 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 binutils-x86-64-linux-gnu amd64 2.34-6ubuntu1.6 [1,613 kB]
获取:8 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 binutils amd64 2.34-6ubuntu1.6 [3,376 B]
获取:9 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libitm1 amd64 10.5.0-1ubuntu1~20.04 [26.2 kB]
获取:10 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libasan5 amd64 9.4.0-1ubuntu1~20.04.2 [2,752 kB]
获取:11 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 liblsan0 amd64 10.5.0-1ubuntu1~20.04 [835 kB]
获取:12 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libtsan0 amd64 10.5.0-1ubuntu1~20.04 [2,016 kB]
获取:13 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libubsan1 amd64 10.5.0-1ubuntu1~20.04 [785 kB]
获取:14 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libquadmath0 amd64 10.5.0-1ubuntu1~20.04 [146 kB]
获取:15 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libgcc-9-dev amd64 9.4.0-1ubuntu1~20.04.2 [2,359 kB]
获取:16 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 gcc-9 amd64 9.4.0-1ubuntu1~20.04.2 [8,276 kB]
获取:17 https://mirrors.aliyun.com/ubuntu focal/main amd64 gcc amd64 4:9.3.0-1ubuntu2 [5,208 B]
获取:18 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libc-dev-bin amd64 2.31-0ubuntu9.9 [71.8 kB]
获取:19 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 linux-libc-dev amd64 5.4.0-163.180 [1,111 kB]
获取:20 https://mirrors.aliyun.com/ubuntu focal/main amd64 libcrypt-dev amd64 1:4.4.10-10ubuntu4 [104 kB]
获取:21 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libc6-dev amd64 2.31-0ubuntu9.9 [2,519 kB]
获取:22 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libstdc++-9-dev amd64 9.4.0-1ubuntu1~20.04.2 [1,722 kB]
获取:23 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 g++-9 amd64 9.4.0-1ubuntu1~20.04.2 [8,421 kB]
获取:24 https://mirrors.aliyun.com/ubuntu focal/main amd64 g++ amd64 4:9.3.0-1ubuntu2 [1,604 B]
获取:25 https://mirrors.aliyun.com/ubuntu focal/main amd64 manpages-dev all 5.05-1 [2,266 kB]
已下载 58.5 MB,耗时 10(5,975 kB/s)                                         
正在预设定软件包 ...
(正在读取数据库 ... 系统当前共安装有 199106 个文件和目录。)
准备解压 .../libc6-dbg_2.31-0ubuntu9.9_amd64.deb  ...
正在解压 libc6-dbg:amd64 (2.31-0ubuntu9.9) 并覆盖 (2.31-0ubuntu9.7) ...
准备解压 .../libc6_2.31-0ubuntu9.9_amd64.deb  ...
正在解压 libc6:amd64 (2.31-0ubuntu9.9) 并覆盖 (2.31-0ubuntu9.7) ...
正在设置 libc6:amd64 (2.31-0ubuntu9.9) ...
正在选中未选择的软件包 binutils-common:amd64。
(正在读取数据库 ... 系统当前共安装有 199263 个文件和目录。)
准备解压 .../00-binutils-common_2.34-6ubuntu1.6_amd64.deb  ...
正在解压 binutils-common:amd64 (2.34-6ubuntu1.6) ...
正在选中未选择的软件包 libbinutils:amd64。
准备解压 .../01-libbinutils_2.34-6ubuntu1.6_amd64.deb  ...
正在解压 libbinutils:amd64 (2.34-6ubuntu1.6) ...
正在选中未选择的软件包 libctf-nobfd0:amd64。
准备解压 .../02-libctf-nobfd0_2.34-6ubuntu1.6_amd64.deb  ...
正在解压 libctf-nobfd0:amd64 (2.34-6ubuntu1.6) ...
正在选中未选择的软件包 libctf0:amd64。
准备解压 .../03-libctf0_2.34-6ubuntu1.6_amd64.deb  ...
正在解压 libctf0:amd64 (2.34-6ubuntu1.6) ...
正在选中未选择的软件包 binutils-x86-64-linux-gnu。
准备解压 .../04-binutils-x86-64-linux-gnu_2.34-6ubuntu1.6_amd64.deb  ...
正在解压 binutils-x86-64-linux-gnu (2.34-6ubuntu1.6) ...
正在选中未选择的软件包 binutils。
准备解压 .../05-binutils_2.34-6ubuntu1.6_amd64.deb  ...
正在解压 binutils (2.34-6ubuntu1.6) ...
正在选中未选择的软件包 libitm1:amd64。
准备解压 .../06-libitm1_10.5.0-1ubuntu1~20.04_amd64.deb  ...
正在解压 libitm1:amd64 (10.5.0-1ubuntu1~20.04) ...
正在选中未选择的软件包 libasan5:amd64。
准备解压 .../07-libasan5_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 libasan5:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 liblsan0:amd64。
准备解压 .../08-liblsan0_10.5.0-1ubuntu1~20.04_amd64.deb  ...
正在解压 liblsan0:amd64 (10.5.0-1ubuntu1~20.04) ...
正在选中未选择的软件包 libtsan0:amd64。
准备解压 .../09-libtsan0_10.5.0-1ubuntu1~20.04_amd64.deb  ...
正在解压 libtsan0:amd64 (10.5.0-1ubuntu1~20.04) ...
正在选中未选择的软件包 libubsan1:amd64。
准备解压 .../10-libubsan1_10.5.0-1ubuntu1~20.04_amd64.deb  ...
正在解压 libubsan1:amd64 (10.5.0-1ubuntu1~20.04) ...
正在选中未选择的软件包 libquadmath0:amd64。
准备解压 .../11-libquadmath0_10.5.0-1ubuntu1~20.04_amd64.deb  ...
正在解压 libquadmath0:amd64 (10.5.0-1ubuntu1~20.04) ...
正在选中未选择的软件包 libgcc-9-dev:amd64。
准备解压 .../12-libgcc-9-dev_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 libgcc-9-dev:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 gcc-9。
准备解压 .../13-gcc-9_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 gcc-9 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 gcc。
准备解压 .../14-gcc_4%3a9.3.0-1ubuntu2_amd64.deb  ...
正在解压 gcc (4:9.3.0-1ubuntu2) ...
正在选中未选择的软件包 libc-dev-bin。
准备解压 .../15-libc-dev-bin_2.31-0ubuntu9.9_amd64.deb  ...
正在解压 libc-dev-bin (2.31-0ubuntu9.9) ...
正在选中未选择的软件包 linux-libc-dev:amd64。
准备解压 .../16-linux-libc-dev_5.4.0-163.180_amd64.deb  ...
正在解压 linux-libc-dev:amd64 (5.4.0-163.180) ...
正在选中未选择的软件包 libcrypt-dev:amd64。
准备解压 .../17-libcrypt-dev_1%3a4.4.10-10ubuntu4_amd64.deb  ...
正在解压 libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...
正在选中未选择的软件包 libc6-dev:amd64。
准备解压 .../18-libc6-dev_2.31-0ubuntu9.9_amd64.deb  ...
正在解压 libc6-dev:amd64 (2.31-0ubuntu9.9) ...
正在选中未选择的软件包 libstdc++-9-dev:amd64。
准备解压 .../19-libstdc++-9-dev_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 libstdc++-9-dev:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 g++-9。
准备解压 .../20-g++-9_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 g++-9 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 g++。
准备解压 .../21-g++_4%3a9.3.0-1ubuntu2_amd64.deb  ...
正在解压 g++ (4:9.3.0-1ubuntu2) ...
正在选中未选择的软件包 manpages-dev。
准备解压 .../22-manpages-dev_5.05-1_all.deb  ...
正在解压 manpages-dev (5.05-1) ...
正在设置 manpages-dev (5.05-1) ...
正在设置 binutils-common:amd64 (2.34-6ubuntu1.6) ...
正在设置 linux-libc-dev:amd64 (5.4.0-163.180) ...
正在设置 libctf-nobfd0:amd64 (2.34-6ubuntu1.6) ...
正在设置 libc6-dbg:amd64 (2.31-0ubuntu9.9) ...
正在设置 libasan5:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 libquadmath0:amd64 (10.5.0-1ubuntu1~20.04) ...
正在设置 libubsan1:amd64 (10.5.0-1ubuntu1~20.04) ...
正在设置 libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...
正在设置 libbinutils:amd64 (2.34-6ubuntu1.6) ...
正在设置 libc-dev-bin (2.31-0ubuntu9.9) ...
正在设置 liblsan0:amd64 (10.5.0-1ubuntu1~20.04) ...
正在设置 libitm1:amd64 (10.5.0-1ubuntu1~20.04) ...
正在设置 libtsan0:amd64 (10.5.0-1ubuntu1~20.04) ...
正在设置 libctf0:amd64 (2.34-6ubuntu1.6) ...
正在设置 libgcc-9-dev:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 libc6-dev:amd64 (2.31-0ubuntu9.9) ...
正在设置 binutils-x86-64-linux-gnu (2.34-6ubuntu1.6) ...
正在设置 libstdc++-9-dev:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 binutils (2.34-6ubuntu1.6) ...
正在设置 gcc-9 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 gcc (4:9.3.0-1ubuntu2) ...
正在设置 g++-9 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 g++ (4:9.3.0-1ubuntu2) ...
update-alternatives: 使用 /usr/bin/g++ 来在自动模式中提供 /usr/bin/c++ (c++)
正在处理用于 man-db (2.9.1-1) 的触发器 ...
正在处理用于 libc-bin (2.31-0ubuntu9.7) 的触发器 ...
lyl@ubuntu:~/桌面$ g++ ./main.cpp -o main
lyl@ubuntu:~/桌面$ ./main
hello,world!

2.3 C++语法扩展

  这节课对C++中基本的语法和常识做一个扩展。“”可以理解成别人写好的东西,我们在代码中引入这个“库”,就可以直接调用其中的函数。调用“库”的好处就是做好的东西我没有必要再做一遍。于是下面解释之前写的程序:

#include <iostream>  //头文件,cout、endl都在“iostream库”中
using namespace std; //名字空间(standard),防止出现其他空间的同名函数
int main()           //主函数
{
    cout << "hello,world!" << endl; //输出一句话
    return 0;                       //程序退出
}

上述代码写好后,在终端输入下面的编译指令即可得到一个可执行文件main

g++ main.cpp -o main

  除了上面说的<iostream>库,还有很多其他的库,比如下面再新增一个数学运算库<math.h>

// 源代码
#include <iostream>
#include <math.h>
using namespace std;
int main() {
    cout << "hello,world!" << endl;
    cout << sqrt(2) << endl;
    return 0;
}

// 终端编译指令
g++ main.cpp -o main -lm   #-lm意思是将用到的math.h库也编译进来

关于名字空间的进一步介绍可以参考博文“C++——命名空间(namespace)”

2.4 常见错误调试

语法错误
写程序时最常见的就是语法错误。编译cpp文件时,可以看error前、后的提示信息,哪里错了改哪就行。还不行就复制错误提示信息,然后去百度一下。视频里演示了:

  • 缺失行尾分号。
  • 函数名写错,cout–>cut
  • 没有引入头文件。
  • 没有写名字空间using namespace std;

逻辑错误
程序本身的代码逻辑有问题,需要根据实验现象进一步调试。

第三章 开启摄像头

  本章开始真正的做项目。主要是在Ubuntu配置OpenCV开发环境,然后开启摄像头。

3.1 项目框架

图3-1 项目框架
  1. 电脑上安装了Linux虚拟机,所以电脑可以充当人脸识别考勤机的硬件。电脑上的摄像头进行“图像采集”,也就是拍照。
  2. 调用OpenCV库进行“人脸检测”,框出检测到的人脸,然后分割出“人脸截图”。
  3. 将“人脸截图”上传到百度智能云进行“人脸识别”。
  4. 解析百度智能云返回的识别结果,然后在屏幕上显示当前的人脸信息。

3.2 初识OpenCV

  OpenCV是一个开源的计算机视觉和机器学习软件库,其使用一系列C语言函数和少量C++类实现,内部实现了很多图像处理和计算机视觉的通用算法。OpenCV可以运行在Linux系统上,且其轻量、高效所以在嵌入式领域得到广泛的应用。Ubuntu可以上网的情况下,运行下面指令在线安装:

###################指令速览###################
sudo apt-get install libopencv-dev  # 安装opencv库
dpkg -s libopencv-dev               # 查看安装版本


###################终端实例###################
lyl@ubuntu:~/桌面$ sudo apt-get install libopencv-dev
[sudo] lyl 的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包是自动安装的并且现在不需要了:
  linux-headers-5.4.0-42 linux-headers-5.4.0-42-generic
  linux-image-5.4.0-42-generic linux-modules-5.4.0-42-generic
  linux-modules-extra-5.4.0-42-generic
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
  autoconf automake autotools-dev cpp-8 gcc-8 gcc-8-base gdal-data gfortran
  gfortran-8 gfortran-9 i965-va-driver ibverbs-providers intel-media-va-driver
  javascript-common libaacs0 libaec0 libaom0 libarmadillo9 libarpack2
  libavcodec-dev libavcodec58 libavformat-dev libavformat58 libavresample-dev
  libavresample4 libavutil-dev libavutil56 libbdplus0 libblas3 libbluray2
  libcaf-openmpi-3 libcfitsio8 libcharls2 libchromaprint1 libcoarrays-dev
  libcoarrays-openmpi-dev libcodec2-0.9 libdap25 libdapclient6v5 libdc1394-22
  libdc1394-22-dev libepsilon1 libevent-2.1-7 libevent-core-2.1-7 libevent-dev
  libevent-extra-2.1-7 libevent-openssl-2.1-7 libevent-pthreads-2.1-7
  libexif-dev libexif-doc libfabric1 libfreexl1 libfyba0 libgcc-8-dev
  libgdal26 libgdcm-dev libgdcm3.0 libgeos-3.8.0 libgeos-c1v5 libgeotiff5
  libgfortran-8-dev libgfortran-9-dev libgfortran5 libgl2ps1.4 libgme0
  libgphoto2-dev libgsm1 libhdf4-0-alt libhdf5-103 libhdf5-openmpi-103
  libhwloc-dev libhwloc-plugins libhwloc15 libibverbs-dev libibverbs1
  libigdgmm11 libilmbase-dev libilmbase24 libjbig-dev libjpeg-dev
  libjpeg-turbo8-dev libjpeg8-dev libjs-jquery libjsoncpp1 libkmlbase1
  libkmldom1 libkmlengine1 liblapack3 liblept5 libltdl-dev liblzma-dev
  libminizip1 libmpx2 libnetcdf-c++4 libnetcdf15 libnl-3-200 libnl-3-dev
  libnl-genl-3-200 libnl-route-3-200 libnl-route-3-dev libnuma-dev libodbc1
  libogdi4.1 libopencv-calib3d-dev libopencv-calib3d4.2 libopencv-contrib-dev
  libopencv-contrib4.2 libopencv-core-dev libopencv-core4.2 libopencv-dnn-dev
  libopencv-dnn4.2 libopencv-features2d-dev libopencv-features2d4.2
  libopencv-flann-dev libopencv-flann4.2 libopencv-highgui-dev
  libopencv-highgui4.2 libopencv-imgcodecs-dev libopencv-imgcodecs4.2
  libopencv-imgproc-dev libopencv-imgproc4.2 libopencv-ml-dev libopencv-ml4.2
  libopencv-objdetect-dev libopencv-objdetect4.2 libopencv-photo-dev
  libopencv-photo4.2 libopencv-shape-dev libopencv-shape4.2
  libopencv-stitching-dev libopencv-stitching4.2 libopencv-superres-dev
  libopencv-superres4.2 libopencv-ts-dev libopencv-video-dev
  libopencv-video4.2 libopencv-videoio-dev libopencv-videoio4.2
  libopencv-videostab-dev libopencv-videostab4.2 libopencv-viz-dev
  libopencv-viz4.2 libopencv4.2-java libopencv4.2-jni libopenexr-dev
  libopenexr24 libopenmpi-dev libopenmpi3 libopenmpt0 libpmix2 libpng-dev
  libpng-tools libpq5 libproj15 libpsm-infinipath1 libpsm2-2 libqhull7
  libraw1394-dev libraw1394-tools librdmacm1 libshine3 libsigsegv2
  libsnappy1v5 libsocket++1 libspatialite7 libssh-gcrypt-4 libsuperlu5
  libswresample-dev libswresample3 libswscale-dev libswscale5 libsz2
  libtbb-dev libtbb2 libtesseract4 libtiff-dev libtiffxx5 libtool
  liburiparser1 libva-drm2 libva-x11-2 libva2 libvdpau1 libvtk6.3 libx264-155
  libx265-179 libxerces-c3.2 libxnvctrl0 libxvidcore4 libzvbi-common libzvbi0
  m4 mesa-va-drivers mesa-vdpau-drivers ocl-icd-libopencl1 odbcinst
  odbcinst1debian2 opencv-data openmpi-bin openmpi-common proj-bin proj-data
  va-driver-all vdpau-driver-all zlib1g-dev
建议安装:
  autoconf-archive gnu-standards autoconf-doc gettext gcc-8-locales
  gcc-8-multilib gcc-8-doc gfortran-multilib gfortran-doc gfortran-8-multilib
  gfortran-8-doc gfortran-9-multilib gfortran-9-doc i965-va-driver-shaders
  apache2 | lighttpd | httpd libbluray-bdj geotiff-bin gdal-bin
  libgeotiff-epsg libhdf4-doc libhdf4-alt-dev hdf4-tools
  libhwloc-contrib-plugins libtool-doc liblzma-doc libmyodbc odbc-postgresql
  tdsodbc unixodbc-bin ogdi-bin opencv-doc openmpi-doc libraw1394-doc
  libtbb-doc gcj-jdk mpi-default-bin m4-doc opencl-icd libvdpau-va-gl1
  nvidia-vdpau-driver nvidia-legacy-340xx-vdpau-driver
  nvidia-legacy-304xx-vdpau-driver
下列【新】软件包将被安装:
  autoconf automake autotools-dev cpp-8 gcc-8 gcc-8-base gdal-data gfortran
  gfortran-8 gfortran-9 i965-va-driver ibverbs-providers intel-media-va-driver
  javascript-common libaacs0 libaec0 libaom0 libarmadillo9 libarpack2
  libavcodec-dev libavcodec58 libavformat-dev libavformat58 libavresample-dev
  libavresample4 libavutil-dev libavutil56 libbdplus0 libblas3 libbluray2
  libcaf-openmpi-3 libcfitsio8 libcharls2 libchromaprint1 libcoarrays-dev
  libcoarrays-openmpi-dev libcodec2-0.9 libdap25 libdapclient6v5 libdc1394-22
  libdc1394-22-dev libepsilon1 libevent-2.1-7 libevent-core-2.1-7 libevent-dev
  libevent-extra-2.1-7 libevent-openssl-2.1-7 libevent-pthreads-2.1-7
  libexif-dev libexif-doc libfabric1 libfreexl1 libfyba0 libgcc-8-dev
  libgdal26 libgdcm-dev libgdcm3.0 libgeos-3.8.0 libgeos-c1v5 libgeotiff5
  libgfortran-8-dev libgfortran-9-dev libgfortran5 libgl2ps1.4 libgme0
  libgphoto2-dev libgsm1 libhdf4-0-alt libhdf5-103 libhdf5-openmpi-103
  libhwloc-dev libhwloc-plugins libhwloc15 libibverbs-dev libibverbs1
  libigdgmm11 libilmbase-dev libilmbase24 libjbig-dev libjpeg-dev
  libjpeg-turbo8-dev libjpeg8-dev libjs-jquery libjsoncpp1 libkmlbase1
  libkmldom1 libkmlengine1 liblapack3 liblept5 libltdl-dev liblzma-dev
  libminizip1 libmpx2 libnetcdf-c++4 libnetcdf15 libnl-3-dev libnl-route-3-dev
  libnuma-dev libodbc1 libogdi4.1 libopencv-calib3d-dev libopencv-calib3d4.2
  libopencv-contrib-dev libopencv-contrib4.2 libopencv-core-dev
  libopencv-core4.2 libopencv-dev libopencv-dnn-dev libopencv-dnn4.2
  libopencv-features2d-dev libopencv-features2d4.2 libopencv-flann-dev
  libopencv-flann4.2 libopencv-highgui-dev libopencv-highgui4.2
  libopencv-imgcodecs-dev libopencv-imgcodecs4.2 libopencv-imgproc-dev
  libopencv-imgproc4.2 libopencv-ml-dev libopencv-ml4.2
  libopencv-objdetect-dev libopencv-objdetect4.2 libopencv-photo-dev
  libopencv-photo4.2 libopencv-shape-dev libopencv-shape4.2
  libopencv-stitching-dev libopencv-stitching4.2 libopencv-superres-dev
  libopencv-superres4.2 libopencv-ts-dev libopencv-video-dev
  libopencv-video4.2 libopencv-videoio-dev libopencv-videoio4.2
  libopencv-videostab-dev libopencv-videostab4.2 libopencv-viz-dev
  libopencv-viz4.2 libopencv4.2-java libopencv4.2-jni libopenexr-dev
  libopenexr24 libopenmpi-dev libopenmpi3 libopenmpt0 libpmix2 libpng-dev
  libpng-tools libpq5 libproj15 libpsm-infinipath1 libpsm2-2 libqhull7
  libraw1394-dev libraw1394-tools librdmacm1 libshine3 libsigsegv2
  libsnappy1v5 libsocket++1 libspatialite7 libssh-gcrypt-4 libsuperlu5
  libswresample-dev libswresample3 libswscale-dev libswscale5 libsz2
  libtbb-dev libtbb2 libtesseract4 libtiff-dev libtiffxx5 libtool
  liburiparser1 libva-drm2 libva-x11-2 libva2 libvdpau1 libvtk6.3 libx264-155
  libx265-179 libxerces-c3.2 libxnvctrl0 libxvidcore4 libzvbi-common libzvbi0
  m4 mesa-va-drivers mesa-vdpau-drivers ocl-icd-libopencl1 odbcinst
  odbcinst1debian2 opencv-data openmpi-bin openmpi-common proj-bin proj-data
  va-driver-all vdpau-driver-all zlib1g-dev
下列软件包将被升级:
  libnl-3-200 libnl-genl-3-200 libnl-route-3-200
升级了 3 个软件包,新安装了 203 个软件包,要卸载 0 个软件包,有 246 个软件包未被升级。
需要下载 159 MB 的归档。
解压缩后会消耗 714 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 https://mirrors.aliyun.com/ubuntu focal/main amd64 libsigsegv2 amd64 2.12-2 [13.9 kB]
获取:2 https://mirrors.aliyun.com/ubuntu focal/main amd64 m4 amd64 1.4.18-4 [199 kB]
获取:3 https://mirrors.aliyun.com/ubuntu focal/main amd64 autoconf all 2.69-11.1 [321 kB]
获取:4 https://mirrors.aliyun.com/ubuntu focal/main amd64 autotools-dev all 20180224.1 [39.6 kB]
获取:5 https://mirrors.aliyun.com/ubuntu focal/main amd64 automake all 1:1.16.1-4ubuntu6 [522 kB]
获取:6 https://mirrors.aliyun.com/ubuntu focal/universe amd64 gcc-8-base amd64 8.4.0-3ubuntu2 [18.7 kB]
获取:7 https://mirrors.aliyun.com/ubuntu focal/universe amd64 cpp-8 amd64 8.4.0-3ubuntu2 [8,945 kB]
获取:8 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libmpx2 amd64 8.4.0-3ubuntu2 [11.8 kB]
获取:9 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgcc-8-dev amd64 8.4.0-3ubuntu2 [2,313 kB]
获取:10 https://mirrors.aliyun.com/ubuntu focal/universe amd64 gcc-8 amd64 8.4.0-3ubuntu2 [9,833 kB]
获取:11 https://mirrors.aliyun.com/ubuntu focal/universe amd64 gdal-data all 3.0.4+dfsg-1build3 [186 kB]
获取:12 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libgfortran5 amd64 10.5.0-1ubuntu1~20.04 [737 kB]
获取:13 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libgfortran-9-dev amd64 9.4.0-1ubuntu1~20.04.2 [685 kB]
获取:14 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 gfortran-9 amd64 9.4.0-1ubuntu1~20.04.2 [7,936 kB]
获取:15 https://mirrors.aliyun.com/ubuntu focal/main amd64 gfortran amd64 4:9.3.0-1ubuntu2 [1,372 B]
获取:16 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgfortran-8-dev amd64 8.4.0-3ubuntu2 [625 kB]
获取:17 https://mirrors.aliyun.com/ubuntu focal/universe amd64 gfortran-8 amd64 8.4.0-3ubuntu2 [9,424 kB]
获取:18 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libnl-route-3-200 amd64 3.4.0-1ubuntu0.1 [151 kB]
获取:19 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libnl-genl-3-200 amd64 3.4.0-1ubuntu0.1 [11.2 kB]
获取:20 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libnl-3-200 amd64 3.4.0-1ubuntu0.1 [54.4 kB]
获取:21 https://mirrors.aliyun.com/ubuntu focal/main amd64 libibverbs1 amd64 28.0-1ubuntu1 [53.6 kB]
获取:22 https://mirrors.aliyun.com/ubuntu focal/main amd64 ibverbs-providers amd64 28.0-1ubuntu1 [232 kB]
获取:23 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libva2 amd64 2.7.0-2 [53.5 kB]
获取:24 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libigdgmm11 amd64 20.1.1+ds1-1 [111 kB]
获取:25 https://mirrors.aliyun.com/ubuntu focal/universe amd64 intel-media-va-driver amd64 20.1.1+dfsg1-1 [1,764 kB]
获取:26 https://mirrors.aliyun.com/ubuntu focal/main amd64 javascript-common all 11 [6,066 B]
获取:27 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libaacs0 amd64 0.9.0-2 [50.1 kB]
获取:28 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libaec0 amd64 1.0.4-1 [19.1 kB]
获取:29 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libaom0 amd64 1.0.0.errata1-3build1 [1,160 kB]
获取:30 https://mirrors.aliyun.com/ubuntu focal/main amd64 libblas3 amd64 3.9.0-1build1 [142 kB]
获取:31 https://mirrors.aliyun.com/ubuntu focal/main amd64 liblapack3 amd64 3.9.0-1build1 [2,154 kB]
获取:32 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libarpack2 amd64 3.7.0-3 [92.8 kB]
获取:33 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libsuperlu5 amd64 5.2.1+dfsg1-4 [159 kB]
获取:34 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libarmadillo9 amd64 1:9.800.4+dfsg-1build1 [93.2 kB]
获取:35 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libva-drm2 amd64 2.7.0-2 [7,044 B]
获取:36 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libva-x11-2 amd64 2.7.0-2 [11.9 kB]
获取:37 https://mirrors.aliyun.com/ubuntu focal/main amd64 libvdpau1 amd64 1.3-1ubuntu2 [25.6 kB]
获取:38 https://mirrors.aliyun.com/ubuntu focal/main amd64 ocl-icd-libopencl1 amd64 2.2.11-1ubuntu1 [30.3 kB]
获取:39 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavutil56 amd64 7:4.2.7-0ubuntu0.1 [241 kB]
获取:40 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libcodec2-0.9 amd64 0.9.2-2 [7,886 kB]
获取:41 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgsm1 amd64 1.0.18-2 [24.4 kB]
获取:42 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libshine3 amd64 3.1.1-2 [23.2 kB]
获取:43 https://mirrors.aliyun.com/ubuntu focal/main amd64 libsnappy1v5 amd64 1.1.8-1build1 [16.7 kB]
获取:44 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libswresample3 amd64 7:4.2.7-0ubuntu0.1 [57.1 kB]
获取:45 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libx264-155 amd64 2:0.155.2917+git0a84d98-2 [521 kB]
获取:46 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libx265-179 amd64 3.2.1-1build1 [1,060 kB]
获取:47 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libxvidcore4 amd64 2:1.3.7-1 [201 kB]
获取:48 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libzvbi-common all 0.2.35-17 [32.5 kB]
获取:49 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libzvbi0 amd64 0.2.35-17 [237 kB]
获取:50 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavcodec58 amd64 7:4.2.7-0ubuntu0.1 [4,878 kB]
获取:51 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavutil-dev amd64 7:4.2.7-0ubuntu0.1 [365 kB]
获取:52 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libswresample-dev amd64 7:4.2.7-0ubuntu0.1 [70.6 kB]
获取:53 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavcodec-dev amd64 7:4.2.7-0ubuntu0.1 [5,428 kB]
获取:54 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libbluray2 amd64 1:1.2.0-1 [138 kB]
获取:55 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libchromaprint1 amd64 1.4.3-3build1 [37.6 kB]
获取:56 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgme0 amd64 0.6.2-1build1 [123 kB]
获取:57 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopenmpt0 amd64 0.4.11-1build1 [599 kB]
获取:58 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libssh-gcrypt-4 amd64 0.9.3-2ubuntu2.3 [202 kB]
获取:59 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavformat58 amd64 7:4.2.7-0ubuntu0.1 [985 kB]
获取:60 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavformat-dev amd64 7:4.2.7-0ubuntu0.1 [1,187 kB]
获取:61 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavresample4 amd64 7:4.2.7-0ubuntu0.1 [54.2 kB]
获取:62 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libavresample-dev amd64 7:4.2.7-0ubuntu0.1 [64.1 kB]
获取:63 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libbdplus0 amd64 0.1.2-3 [47.3 kB]
获取:64 https://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-2.1-7 amd64 2.1.11-stable-1 [138 kB]
获取:65 https://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-core-2.1-7 amd64 2.1.11-stable-1 [89.1 kB]
获取:66 https://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-pthreads-2.1-7 amd64 2.1.11-stable-1 [7,372 B]
获取:67 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libpsm-infinipath1 amd64 3.3+20.604758e7-6 [168 kB]
获取:68 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libpsm2-2 amd64 11.2.86-1 [178 kB]
获取:69 https://mirrors.aliyun.com/ubuntu focal/main amd64 librdmacm1 amd64 28.0-1ubuntu1 [64.9 kB]
获取:70 https://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libfabric1 amd64 1.6.2-3ubuntu0.1 [396 kB]
获取:71 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libhwloc15 amd64 2.1.0+dfsg-4 [134 kB]
获取:72 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libxnvctrl0 amd64 470.57.01-0ubuntu0.20.04.3 [10.9 kB]
获取:73 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libhwloc-plugins amd64 2.1.0+dfsg-4 [14.4 kB]
获取:74 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libpmix2 amd64 3.1.5-1 [442 kB]
获取:75 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopenmpi3 amd64 4.0.3-0ubuntu1 [1,978 kB]
获取:76 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libcaf-openmpi-3 amd64 2.8.0-1 [35.5 kB]
获取:77 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libcfitsio8 amd64 3.470-3 [466 kB]
获取:78 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libcharls2 amd64 2.0.0+dfsg-1build1 [74.1 kB]
获取:79 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libcoarrays-dev amd64 2.8.0-1 [28.2 kB]
获取:80 https://mirrors.aliyun.com/ubuntu focal/universe amd64 openmpi-common all 4.0.3-0ubuntu1 [151 kB]
获取:81 https://mirrors.aliyun.com/ubuntu focal/universe amd64 openmpi-bin amd64 4.0.3-0ubuntu1 [67.4 kB]
获取:82 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libcoarrays-openmpi-dev amd64 2.8.0-1 [34.2 kB]
获取:83 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libdap25 amd64 3.20.5-1 [435 kB]
获取:84 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libdapclient6v5 amd64 3.20.5-1 [92.2 kB]
获取:85 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libepsilon1 amd64 0.9.2+dfsg-4 [41.0 kB]
获取:86 https://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-extra-2.1-7 amd64 2.1.11-stable-1 [60.0 kB]
获取:87 https://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-openssl-2.1-7 amd64 2.1.11-stable-1 [14.3 kB]
获取:88 https://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-dev amd64 2.1.11-stable-1 [261 kB]
获取:89 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libexif-dev amd64 0.6.21-6ubuntu0.4 [84.0 kB]
获取:90 https://mirrors.aliyun.com/ubuntu focal/main amd64 libjs-jquery all 3.3.1~dfsg-3 [329 kB]
获取:91 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libexif-doc all 0.6.21-6ubuntu0.4 [256 kB]
获取:92 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libfyba0 amd64 4.1.1-6build1 [113 kB]
获取:93 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libfreexl1 amd64 1.0.5-3 [33.4 kB]
获取:94 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgeos-3.8.0 amd64 3.8.0-1build1 [535 kB]
获取:95 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgeos-c1v5 amd64 3.8.0-1build1 [69.9 kB]
获取:96 https://mirrors.aliyun.com/ubuntu focal/universe amd64 proj-data all 6.3.1-1 [7,647 kB]
获取:97 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libproj15 amd64 6.3.1-1 [925 kB]
获取:98 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgeotiff5 amd64 1.5.1-2 [53.1 kB]
获取:99 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libhdf4-0-alt amd64 4.2.14-1ubuntu1 [268 kB]
获取:100 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libsz2 amd64 1.0.4-1 [5,188 B]
获取:101 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libhdf5-103 amd64 1.10.4+repack-11ubuntu1 [1,311 kB]
获取:102 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libminizip1 amd64 1.1-8build1 [20.2 kB]
获取:103 https://mirrors.aliyun.com/ubuntu focal/universe amd64 liburiparser1 amd64 0.9.3-2 [39.3 kB]
获取:104 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libkmlbase1 amd64 1.3.0-8build1 [45.4 kB]
获取:105 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libkmldom1 amd64 1.3.0-8build1 [152 kB]
获取:106 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libkmlengine1 amd64 1.3.0-8build1 [72.5 kB]
获取:107 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libnetcdf15 amd64 1:4.7.3-1 [341 kB]
获取:108 https://mirrors.aliyun.com/ubuntu focal/main amd64 libodbc1 amd64 2.3.6-0.1build1 [189 kB]
获取:109 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libogdi4.1 amd64 4.1.0+ds-1build1 [198 kB]
获取:110 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libpq5 amd64 12.16-0ubuntu0.20.04.1 [115 kB]
获取:111 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libqhull7 amd64 2015.2-4 [152 kB]
获取:112 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libspatialite7 amd64 4.3.0a-6build1 [1,286 kB]
获取:113 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libxerces-c3.2 amd64 3.2.2+debian-1build3 [878 kB]
获取:114 https://mirrors.aliyun.com/ubuntu focal/main amd64 odbcinst amd64 2.3.6-0.1build1 [14.8 kB]
获取:115 https://mirrors.aliyun.com/ubuntu focal/main amd64 odbcinst1debian2 amd64 2.3.6-0.1build1 [41.1 kB]
获取:116 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgdal26 amd64 3.0.4+dfsg-1build3 [6,156 kB]
获取:117 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libsocket++1 amd64 1.12.13-10build1 [40.7 kB]
获取:118 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgdcm3.0 amd64 3.0.5-1.1ubuntu2 [1,871 kB]
获取:119 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgdcm-dev amd64 3.0.5-1.1ubuntu2 [258 kB]
获取:120 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libgl2ps1.4 amd64 1.4.0+dfsg1-2 [38.2 kB]
获取:121 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libgphoto2-dev amd64 2.5.25-0ubuntu0.1 [625 kB]
获取:122 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libhdf5-openmpi-103 amd64 1.10.4+repack-11ubuntu1 [1,355 kB]
获取:123 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libilmbase24 amd64 2.3.0-6build1 [75.1 kB]
获取:124 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libilmbase-dev amd64 2.3.0-6build1 [71.3 kB]
获取:125 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libjpeg-turbo8-dev amd64 2.0.3-0ubuntu1.20.04.3 [238 kB]
获取:126 https://mirrors.aliyun.com/ubuntu focal/main amd64 libjpeg8-dev amd64 8c-2ubuntu8 [1,552 B]
获取:127 https://mirrors.aliyun.com/ubuntu focal/main amd64 libjpeg-dev amd64 8c-2ubuntu8 [1,546 B]
获取:128 https://mirrors.aliyun.com/ubuntu focal/universe amd64 liblept5 amd64 1.79.0-1 [999 kB]
获取:129 https://mirrors.aliyun.com/ubuntu focal/main amd64 libltdl-dev amd64 2.4.6-14 [162 kB]
获取:130 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libnetcdf-c++4 amd64 4.2-11build2 [33.6 kB]
获取:131 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libnl-3-dev amd64 3.4.0-1ubuntu0.1 [92.9 kB]
获取:132 https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libnl-route-3-dev amd64 3.4.0-1ubuntu0.1 [167 kB]
获取:133 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libtbb2 amd64 2020.1-2 [124 kB]
获取:134 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-core4.2 amd64 4.2.0+dfsg-5 [1,027 kB]
获取:135 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-flann4.2 amd64 4.2.0+dfsg-5 [105 kB]
获取:136 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-imgproc4.2 amd64 4.2.0+dfsg-5 [1,290 kB]
获取:137 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libopenexr24 amd64 2.3.0-6ubuntu0.5 [592 kB]
获取:138 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-imgcodecs4.2 amd64 4.2.0+dfsg-5 [112 kB]
获取:139 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libdc1394-22 amd64 2.2.5-2.1 [79.6 kB]
获取:140 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libswscale5 amd64 7:4.2.7-0ubuntu0.1 [157 kB]
获取:141 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-videoio4.2 amd64 4.2.0+dfsg-5 [157 kB]
获取:142 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-highgui4.2 amd64 4.2.0+dfsg-5 [32.5 kB]
获取:143 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-ml4.2 amd64 4.2.0+dfsg-5 [238 kB]
获取:144 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-features2d4.2 amd64 4.2.0+dfsg-5 [258 kB]
获取:145 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-calib3d4.2 amd64 4.2.0+dfsg-5 [541 kB]
获取:146 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libtbb-dev amd64 2020.1-2 [273 kB]
获取:147 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 zlib1g-dev amd64 1:1.2.11.dfsg-2ubuntu1.5 [155 kB]
获取:148 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-core-dev amd64 4.2.0+dfsg-5 [1,690 kB]
获取:149 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-flann-dev amd64 4.2.0+dfsg-5 [177 kB]
获取:150 https://mirrors.aliyun.com/ubuntu focal/main amd64 libraw1394-dev amd64 2.1.2-1 [35.5 kB]
获取:151 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libdc1394-22-dev amd64 2.2.5-2.1 [111 kB]
获取:152 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-imgproc-dev amd64 4.2.0+dfsg-5 [1,683 kB]
获取:153 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-imgcodecs-dev amd64 4.2.0+dfsg-5 [168 kB]
获取:154 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-videoio-dev amd64 4.2.0+dfsg-5 [216 kB]
获取:155 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libopenexr-dev amd64 2.3.0-6ubuntu0.5 [730 kB]
获取:156 https://mirrors.aliyun.com/ubuntu focal/main amd64 libpng-dev amd64 1.6.37-2 [175 kB]
获取:157 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 libswscale-dev amd64 7:4.2.7-0ubuntu0.1 [177 kB]
获取:158 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libjbig-dev amd64 2.1-3.1ubuntu0.20.04.1 [25.7 kB]
获取:159 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 liblzma-dev amd64 5.2.4-1ubuntu1.1 [147 kB]
获取:160 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libtiffxx5 amd64 4.1.0+git191117-2ubuntu0.20.04.9 [5,884 B]
获取:161 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libtiff-dev amd64 4.1.0+git191117-2ubuntu0.20.04.9 [286 kB]
获取:162 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-highgui-dev amd64 4.2.0+dfsg-5 [50.8 kB]
获取:163 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-ml-dev amd64 4.2.0+dfsg-5 [314 kB]
获取:164 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-features2d-dev amd64 4.2.0+dfsg-5 [325 kB]
获取:165 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-calib3d-dev amd64 4.2.0+dfsg-5 [743 kB]
获取:166 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-dnn4.2 amd64 4.2.0+dfsg-5 [873 kB]
获取:167 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-objdetect4.2 amd64 4.2.0+dfsg-5 [149 kB]
获取:168 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-photo4.2 amd64 4.2.0+dfsg-5 [200 kB]
获取:169 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-video4.2 amd64 4.2.0+dfsg-5 [147 kB]
获取:170 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-shape4.2 amd64 4.2.0+dfsg-5 [57.6 kB]
获取:171 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-stitching4.2 amd64 4.2.0+dfsg-5 [213 kB]
获取:172 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-superres4.2 amd64 4.2.0+dfsg-5 [48.4 kB]
获取:173 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-videostab4.2 amd64 4.2.0+dfsg-5 [102 kB]
获取:174 https://mirrors.aliyun.com/ubuntu focal/main amd64 libjsoncpp1 amd64 1.7.4-3.1ubuntu2 [75.6 kB]
获取:175 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libvtk6.3 amd64 6.3.0+dfsg2-5build2 [16.4 MB]
获取:176 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-viz4.2 amd64 4.2.0+dfsg-5 [122 kB]
获取:177 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libtesseract4 amd64 4.1.1-2build2 [1,237 kB]
获取:178 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-contrib4.2 amd64 4.2.0+dfsg-5 [3,312 kB]
获取:179 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-dnn-dev amd64 4.2.0+dfsg-5 [1,283 kB]
获取:180 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-objdetect-dev amd64 4.2.0+dfsg-5 [184 kB]
获取:181 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-photo-dev amd64 4.2.0+dfsg-5 [241 kB]
获取:182 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-video-dev amd64 4.2.0+dfsg-5 [185 kB]
获取:183 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-shape-dev amd64 4.2.0+dfsg-5 [74.9 kB]
获取:184 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-stitching-dev amd64 4.2.0+dfsg-5 [266 kB]
获取:185 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-superres-dev amd64 4.2.0+dfsg-5 [61.1 kB]
获取:186 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-videostab-dev amd64 4.2.0+dfsg-5 [129 kB]
获取:187 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-viz-dev amd64 4.2.0+dfsg-5 [173 kB]
获取:188 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-contrib-dev amd64 4.2.0+dfsg-5 [4,267 kB]
获取:189 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-ts-dev amd64 4.2.0+dfsg-5 [333 kB]
获取:190 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv4.2-jni amd64 4.2.0+dfsg-5 [367 kB]
获取:191 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv4.2-java all 4.2.0+dfsg-5 [892 kB]
获取:192 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopencv-dev amd64 4.2.0+dfsg-5 [93.6 kB]
获取:193 https://mirrors.aliyun.com/ubuntu focal/main amd64 libpng-tools amd64 1.6.37-2 [26.1 kB]
获取:194 https://mirrors.aliyun.com/ubuntu focal/main amd64 libraw1394-tools amd64 2.1.2-1 [16.2 kB]
获取:195 https://mirrors.aliyun.com/ubuntu focal/main amd64 libtool all 2.4.6-14 [161 kB]
获取:196 https://mirrors.aliyun.com/ubuntu focal-security/universe amd64 mesa-va-drivers amd64 21.2.6-0ubuntu0.1~20.04.2 [2,970 kB]
获取:197 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 mesa-vdpau-drivers amd64 21.2.6-0ubuntu0.1~20.04.2 [3,089 kB]
获取:198 https://mirrors.aliyun.com/ubuntu focal/universe amd64 opencv-data all 4.2.0+dfsg-5 [1,341 kB]
获取:199 https://mirrors.aliyun.com/ubuntu focal/universe amd64 i965-va-driver amd64 2.4.0-0ubuntu1 [924 kB]
获取:200 https://mirrors.aliyun.com/ubuntu focal/universe amd64 va-driver-all amd64 2.7.0-2 [4,020 B]
获取:201 https://mirrors.aliyun.com/ubuntu focal/main amd64 vdpau-driver-all amd64 1.3-1ubuntu2 [4,596 B]
获取:202 https://mirrors.aliyun.com/ubuntu focal/main amd64 libnuma-dev amd64 2.0.12-1 [32.4 kB]
获取:203 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libhwloc-dev amd64 2.1.0+dfsg-4 [205 kB]
获取:204 https://mirrors.aliyun.com/ubuntu focal/main amd64 libibverbs-dev amd64 28.0-1ubuntu1 [444 kB]
获取:205 https://mirrors.aliyun.com/ubuntu focal/universe amd64 libopenmpi-dev amd64 4.0.3-0ubuntu1 [798 kB]
获取:206 https://mirrors.aliyun.com/ubuntu focal/universe amd64 proj-bin amd64 6.3.1-1 [88.8 kB]
已下载 159 MB,耗时 28(1,249 kB/s)                                       
正在从软件包中解出模板:100%
正在选中未选择的软件包 libsigsegv2:amd64。
(正在读取数据库 ... 系统当前共安装有 204329 个文件和目录。)
准备解压 .../000-libsigsegv2_2.12-2_amd64.deb  ...
正在解压 libsigsegv2:amd64 (2.12-2) ...
正在选中未选择的软件包 m4。
准备解压 .../001-m4_1.4.18-4_amd64.deb  ...
正在解压 m4 (1.4.18-4) ...
正在选中未选择的软件包 autoconf。
准备解压 .../002-autoconf_2.69-11.1_all.deb  ...
正在解压 autoconf (2.69-11.1) ...
正在选中未选择的软件包 autotools-dev。
准备解压 .../003-autotools-dev_20180224.1_all.deb  ...
正在解压 autotools-dev (20180224.1) ...
正在选中未选择的软件包 automake。
准备解压 .../004-automake_1%3a1.16.1-4ubuntu6_all.deb  ...
正在解压 automake (1:1.16.1-4ubuntu6) ...
正在选中未选择的软件包 gcc-8-base:amd64。
准备解压 .../005-gcc-8-base_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 gcc-8-base:amd64 (8.4.0-3ubuntu2) ...
正在选中未选择的软件包 cpp-8。
准备解压 .../006-cpp-8_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 cpp-8 (8.4.0-3ubuntu2) ...
正在选中未选择的软件包 libmpx2:amd64。
准备解压 .../007-libmpx2_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 libmpx2:amd64 (8.4.0-3ubuntu2) ...
正在选中未选择的软件包 libgcc-8-dev:amd64。
准备解压 .../008-libgcc-8-dev_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 libgcc-8-dev:amd64 (8.4.0-3ubuntu2) ...
正在选中未选择的软件包 gcc-8。
准备解压 .../009-gcc-8_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 gcc-8 (8.4.0-3ubuntu2) ...
正在选中未选择的软件包 gdal-data。
准备解压 .../010-gdal-data_3.0.4+dfsg-1build3_all.deb  ...
正在解压 gdal-data (3.0.4+dfsg-1build3) ...
正在选中未选择的软件包 libgfortran5:amd64。
准备解压 .../011-libgfortran5_10.5.0-1ubuntu1~20.04_amd64.deb  ...
正在解压 libgfortran5:amd64 (10.5.0-1ubuntu1~20.04) ...
正在选中未选择的软件包 libgfortran-9-dev:amd64。
准备解压 .../012-libgfortran-9-dev_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 libgfortran-9-dev:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 gfortran-9。
准备解压 .../013-gfortran-9_9.4.0-1ubuntu1~20.04.2_amd64.deb  ...
正在解压 gfortran-9 (9.4.0-1ubuntu1~20.04.2) ...
正在选中未选择的软件包 gfortran。
准备解压 .../014-gfortran_4%3a9.3.0-1ubuntu2_amd64.deb  ...
正在解压 gfortran (4:9.3.0-1ubuntu2) ...
正在选中未选择的软件包 libgfortran-8-dev:amd64。
准备解压 .../015-libgfortran-8-dev_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 libgfortran-8-dev:amd64 (8.4.0-3ubuntu2) ...
正在选中未选择的软件包 gfortran-8。
准备解压 .../016-gfortran-8_8.4.0-3ubuntu2_amd64.deb  ...
正在解压 gfortran-8 (8.4.0-3ubuntu2) ...
准备解压 .../017-libnl-route-3-200_3.4.0-1ubuntu0.1_amd64.deb  ...
正在解压 libnl-route-3-200:amd64 (3.4.0-1ubuntu0.1) 并覆盖 (3.4.0-1) ...
准备解压 .../018-libnl-genl-3-200_3.4.0-1ubuntu0.1_amd64.deb  ...
正在解压 libnl-genl-3-200:amd64 (3.4.0-1ubuntu0.1) 并覆盖 (3.4.0-1) ...
准备解压 .../019-libnl-3-200_3.4.0-1ubuntu0.1_amd64.deb  ...
正在解压 libnl-3-200:amd64 (3.4.0-1ubuntu0.1) 并覆盖 (3.4.0-1) ...
正在选中未选择的软件包 libibverbs1:amd64。
准备解压 .../020-libibverbs1_28.0-1ubuntu1_amd64.deb  ...
正在解压 libibverbs1:amd64 (28.0-1ubuntu1) ...
正在选中未选择的软件包 ibverbs-providers:amd64。
准备解压 .../021-ibverbs-providers_28.0-1ubuntu1_amd64.deb  ...
正在解压 ibverbs-providers:amd64 (28.0-1ubuntu1) ...
正在选中未选择的软件包 libva2:amd64。
准备解压 .../022-libva2_2.7.0-2_amd64.deb  ...
正在解压 libva2:amd64 (2.7.0-2) ...
正在选中未选择的软件包 libigdgmm11:amd64。
准备解压 .../023-libigdgmm11_20.1.1+ds1-1_amd64.deb  ...
正在解压 libigdgmm11:amd64 (20.1.1+ds1-1) ...
正在选中未选择的软件包 intel-media-va-driver:amd64。
准备解压 .../024-intel-media-va-driver_20.1.1+dfsg1-1_amd64.deb  ...
正在解压 intel-media-va-driver:amd64 (20.1.1+dfsg1-1) ...
正在选中未选择的软件包 javascript-common。
准备解压 .../025-javascript-common_11_all.deb  ...
正在解压 javascript-common (11) ...
正在选中未选择的软件包 libaacs0:amd64。
准备解压 .../026-libaacs0_0.9.0-2_amd64.deb  ...
正在解压 libaacs0:amd64 (0.9.0-2) ...
正在选中未选择的软件包 libaec0:amd64。
准备解压 .../027-libaec0_1.0.4-1_amd64.deb  ...
正在解压 libaec0:amd64 (1.0.4-1) ...
正在选中未选择的软件包 libaom0:amd64。
准备解压 .../028-libaom0_1.0.0.errata1-3build1_amd64.deb  ...
正在解压 libaom0:amd64 (1.0.0.errata1-3build1) ...
正在选中未选择的软件包 libblas3:amd64。
准备解压 .../029-libblas3_3.9.0-1build1_amd64.deb  ...
正在解压 libblas3:amd64 (3.9.0-1build1) ...
正在选中未选择的软件包 liblapack3:amd64。
准备解压 .../030-liblapack3_3.9.0-1build1_amd64.deb  ...
正在解压 liblapack3:amd64 (3.9.0-1build1) ...
正在选中未选择的软件包 libarpack2:amd64。
准备解压 .../031-libarpack2_3.7.0-3_amd64.deb  ...
正在解压 libarpack2:amd64 (3.7.0-3) ...
正在选中未选择的软件包 libsuperlu5:amd64。
准备解压 .../032-libsuperlu5_5.2.1+dfsg1-4_amd64.deb  ...
正在解压 libsuperlu5:amd64 (5.2.1+dfsg1-4) ...
正在选中未选择的软件包 libarmadillo9。
准备解压 .../033-libarmadillo9_1%3a9.800.4+dfsg-1build1_amd64.deb  ...
正在解压 libarmadillo9 (1:9.800.4+dfsg-1build1) ...
正在选中未选择的软件包 libva-drm2:amd64。
准备解压 .../034-libva-drm2_2.7.0-2_amd64.deb  ...
正在解压 libva-drm2:amd64 (2.7.0-2) ...
正在选中未选择的软件包 libva-x11-2:amd64。
准备解压 .../035-libva-x11-2_2.7.0-2_amd64.deb  ...
正在解压 libva-x11-2:amd64 (2.7.0-2) ...
正在选中未选择的软件包 libvdpau1:amd64。
准备解压 .../036-libvdpau1_1.3-1ubuntu2_amd64.deb  ...
正在解压 libvdpau1:amd64 (1.3-1ubuntu2) ...
正在选中未选择的软件包 ocl-icd-libopencl1:amd64。
准备解压 .../037-ocl-icd-libopencl1_2.2.11-1ubuntu1_amd64.deb  ...
正在解压 ocl-icd-libopencl1:amd64 (2.2.11-1ubuntu1) ...
正在选中未选择的软件包 libavutil56:amd64。
准备解压 .../038-libavutil56_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavutil56:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libcodec2-0.9:amd64。
准备解压 .../039-libcodec2-0.9_0.9.2-2_amd64.deb  ...
正在解压 libcodec2-0.9:amd64 (0.9.2-2) ...
正在选中未选择的软件包 libgsm1:amd64。
准备解压 .../040-libgsm1_1.0.18-2_amd64.deb  ...
正在解压 libgsm1:amd64 (1.0.18-2) ...
正在选中未选择的软件包 libshine3:amd64。
准备解压 .../041-libshine3_3.1.1-2_amd64.deb  ...
正在解压 libshine3:amd64 (3.1.1-2) ...
正在选中未选择的软件包 libsnappy1v5:amd64。
准备解压 .../042-libsnappy1v5_1.1.8-1build1_amd64.deb  ...
正在解压 libsnappy1v5:amd64 (1.1.8-1build1) ...
正在选中未选择的软件包 libswresample3:amd64。
准备解压 .../043-libswresample3_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libswresample3:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libx264-155:amd64。
准备解压 .../044-libx264-155_2%3a0.155.2917+git0a84d98-2_amd64.deb  ...
正在解压 libx264-155:amd64 (2:0.155.2917+git0a84d98-2) ...
正在选中未选择的软件包 libx265-179:amd64。
准备解压 .../045-libx265-179_3.2.1-1build1_amd64.deb  ...
正在解压 libx265-179:amd64 (3.2.1-1build1) ...
正在选中未选择的软件包 libxvidcore4:amd64。
准备解压 .../046-libxvidcore4_2%3a1.3.7-1_amd64.deb  ...
正在解压 libxvidcore4:amd64 (2:1.3.7-1) ...
正在选中未选择的软件包 libzvbi-common。
准备解压 .../047-libzvbi-common_0.2.35-17_all.deb  ...
正在解压 libzvbi-common (0.2.35-17) ...
正在选中未选择的软件包 libzvbi0:amd64。
准备解压 .../048-libzvbi0_0.2.35-17_amd64.deb  ...
正在解压 libzvbi0:amd64 (0.2.35-17) ...
正在选中未选择的软件包 libavcodec58:amd64。
准备解压 .../049-libavcodec58_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavcodec58:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libavutil-dev:amd64。
准备解压 .../050-libavutil-dev_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavutil-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libswresample-dev:amd64。
准备解压 .../051-libswresample-dev_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libswresample-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libavcodec-dev:amd64。
准备解压 .../052-libavcodec-dev_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavcodec-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libbluray2:amd64。
准备解压 .../053-libbluray2_1%3a1.2.0-1_amd64.deb  ...
正在解压 libbluray2:amd64 (1:1.2.0-1) ...
正在选中未选择的软件包 libchromaprint1:amd64。
准备解压 .../054-libchromaprint1_1.4.3-3build1_amd64.deb  ...
正在解压 libchromaprint1:amd64 (1.4.3-3build1) ...
正在选中未选择的软件包 libgme0:amd64。
准备解压 .../055-libgme0_0.6.2-1build1_amd64.deb  ...
正在解压 libgme0:amd64 (0.6.2-1build1) ...
正在选中未选择的软件包 libopenmpt0:amd64。
准备解压 .../056-libopenmpt0_0.4.11-1build1_amd64.deb  ...
正在解压 libopenmpt0:amd64 (0.4.11-1build1) ...
正在选中未选择的软件包 libssh-gcrypt-4:amd64。
准备解压 .../057-libssh-gcrypt-4_0.9.3-2ubuntu2.3_amd64.deb  ...
正在解压 libssh-gcrypt-4:amd64 (0.9.3-2ubuntu2.3) ...
正在选中未选择的软件包 libavformat58:amd64。
准备解压 .../058-libavformat58_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavformat58:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libavformat-dev:amd64。
准备解压 .../059-libavformat-dev_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavformat-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libavresample4:amd64。
准备解压 .../060-libavresample4_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavresample4:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libavresample-dev:amd64。
准备解压 .../061-libavresample-dev_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libavresample-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libbdplus0:amd64。
准备解压 .../062-libbdplus0_0.1.2-3_amd64.deb  ...
正在解压 libbdplus0:amd64 (0.1.2-3) ...
正在选中未选择的软件包 libevent-2.1-7:amd64。
准备解压 .../063-libevent-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libevent-core-2.1-7:amd64。
准备解压 .../064-libevent-core-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-core-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libevent-pthreads-2.1-7:amd64。
准备解压 .../065-libevent-pthreads-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-pthreads-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libpsm-infinipath1。
准备解压 .../066-libpsm-infinipath1_3.3+20.604758e7-6_amd64.deb  ...
正在解压 libpsm-infinipath1 (3.3+20.604758e7-6) ...
正在选中未选择的软件包 libpsm2-2。
准备解压 .../067-libpsm2-2_11.2.86-1_amd64.deb  ...
正在解压 libpsm2-2 (11.2.86-1) ...
正在选中未选择的软件包 librdmacm1:amd64。
准备解压 .../068-librdmacm1_28.0-1ubuntu1_amd64.deb  ...
正在解压 librdmacm1:amd64 (28.0-1ubuntu1) ...
正在选中未选择的软件包 libfabric1。
准备解压 .../069-libfabric1_1.6.2-3ubuntu0.1_amd64.deb  ...
正在解压 libfabric1 (1.6.2-3ubuntu0.1) ...
正在选中未选择的软件包 libhwloc15:amd64。
准备解压 .../070-libhwloc15_2.1.0+dfsg-4_amd64.deb  ...
正在解压 libhwloc15:amd64 (2.1.0+dfsg-4) ...
正在选中未选择的软件包 libxnvctrl0:amd64。
准备解压 .../071-libxnvctrl0_470.57.01-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 libxnvctrl0:amd64 (470.57.01-0ubuntu0.20.04.3) ...
正在选中未选择的软件包 libhwloc-plugins:amd64。
准备解压 .../072-libhwloc-plugins_2.1.0+dfsg-4_amd64.deb  ...
正在解压 libhwloc-plugins:amd64 (2.1.0+dfsg-4) ...
正在选中未选择的软件包 libpmix2:amd64。
准备解压 .../073-libpmix2_3.1.5-1_amd64.deb  ...
正在解压 libpmix2:amd64 (3.1.5-1) ...
正在选中未选择的软件包 libopenmpi3:amd64。
准备解压 .../074-libopenmpi3_4.0.3-0ubuntu1_amd64.deb  ...
正在解压 libopenmpi3:amd64 (4.0.3-0ubuntu1) ...
正在选中未选择的软件包 libcaf-openmpi-3:amd64。
准备解压 .../075-libcaf-openmpi-3_2.8.0-1_amd64.deb  ...
正在解压 libcaf-openmpi-3:amd64 (2.8.0-1) ...
正在选中未选择的软件包 libcfitsio8:amd64。
准备解压 .../076-libcfitsio8_3.470-3_amd64.deb  ...
正在解压 libcfitsio8:amd64 (3.470-3) ...
正在选中未选择的软件包 libcharls2:amd64。
准备解压 .../077-libcharls2_2.0.0+dfsg-1build1_amd64.deb  ...
正在解压 libcharls2:amd64 (2.0.0+dfsg-1build1) ...
正在选中未选择的软件包 libcoarrays-dev:amd64。
准备解压 .../078-libcoarrays-dev_2.8.0-1_amd64.deb  ...
正在解压 libcoarrays-dev:amd64 (2.8.0-1) ...
正在选中未选择的软件包 openmpi-common。
准备解压 .../079-openmpi-common_4.0.3-0ubuntu1_all.deb  ...
正在解压 openmpi-common (4.0.3-0ubuntu1) ...
正在选中未选择的软件包 openmpi-bin。
准备解压 .../080-openmpi-bin_4.0.3-0ubuntu1_amd64.deb  ...
正在解压 openmpi-bin (4.0.3-0ubuntu1) ...
正在选中未选择的软件包 libcoarrays-openmpi-dev:amd64。
准备解压 .../081-libcoarrays-openmpi-dev_2.8.0-1_amd64.deb  ...
正在解压 libcoarrays-openmpi-dev:amd64 (2.8.0-1) ...
正在选中未选择的软件包 libdap25:amd64。
准备解压 .../082-libdap25_3.20.5-1_amd64.deb  ...
正在解压 libdap25:amd64 (3.20.5-1) ...
正在选中未选择的软件包 libdapclient6v5:amd64。
准备解压 .../083-libdapclient6v5_3.20.5-1_amd64.deb  ...
正在解压 libdapclient6v5:amd64 (3.20.5-1) ...
正在选中未选择的软件包 libepsilon1:amd64。
准备解压 .../084-libepsilon1_0.9.2+dfsg-4_amd64.deb  ...
正在解压 libepsilon1:amd64 (0.9.2+dfsg-4) ...
正在选中未选择的软件包 libevent-extra-2.1-7:amd64。
准备解压 .../085-libevent-extra-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-extra-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libevent-openssl-2.1-7:amd64。
准备解压 .../086-libevent-openssl-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-openssl-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libevent-dev。
准备解压 .../087-libevent-dev_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-dev (2.1.11-stable-1) ...
正在选中未选择的软件包 libexif-dev:amd64。
准备解压 .../088-libexif-dev_0.6.21-6ubuntu0.4_amd64.deb  ...
正在解压 libexif-dev:amd64 (0.6.21-6ubuntu0.4) ...
正在选中未选择的软件包 libjs-jquery。
准备解压 .../089-libjs-jquery_3.3.1~dfsg-3_all.deb  ...
正在解压 libjs-jquery (3.3.1~dfsg-3) ...
正在选中未选择的软件包 libexif-doc。
准备解压 .../090-libexif-doc_0.6.21-6ubuntu0.4_all.deb  ...
正在解压 libexif-doc (0.6.21-6ubuntu0.4) ...
正在选中未选择的软件包 libfyba0:amd64。
准备解压 .../091-libfyba0_4.1.1-6build1_amd64.deb  ...
正在解压 libfyba0:amd64 (4.1.1-6build1) ...
正在选中未选择的软件包 libfreexl1:amd64。
准备解压 .../092-libfreexl1_1.0.5-3_amd64.deb  ...
正在解压 libfreexl1:amd64 (1.0.5-3) ...
正在选中未选择的软件包 libgeos-3.8.0:amd64。
准备解压 .../093-libgeos-3.8.0_3.8.0-1build1_amd64.deb  ...
正在解压 libgeos-3.8.0:amd64 (3.8.0-1build1) ...
正在选中未选择的软件包 libgeos-c1v5:amd64。
准备解压 .../094-libgeos-c1v5_3.8.0-1build1_amd64.deb  ...
正在解压 libgeos-c1v5:amd64 (3.8.0-1build1) ...
正在选中未选择的软件包 proj-data。
准备解压 .../095-proj-data_6.3.1-1_all.deb  ...
正在解压 proj-data (6.3.1-1) ...
正在选中未选择的软件包 libproj15:amd64。
准备解压 .../096-libproj15_6.3.1-1_amd64.deb  ...
正在解压 libproj15:amd64 (6.3.1-1) ...
正在选中未选择的软件包 libgeotiff5:amd64。
准备解压 .../097-libgeotiff5_1.5.1-2_amd64.deb  ...
正在解压 libgeotiff5:amd64 (1.5.1-2) ...
正在选中未选择的软件包 libhdf4-0-alt。
准备解压 .../098-libhdf4-0-alt_4.2.14-1ubuntu1_amd64.deb  ...
正在解压 libhdf4-0-alt (4.2.14-1ubuntu1) ...
正在选中未选择的软件包 libsz2:amd64。
准备解压 .../099-libsz2_1.0.4-1_amd64.deb  ...
正在解压 libsz2:amd64 (1.0.4-1) ...
正在选中未选择的软件包 libhdf5-103:amd64。
准备解压 .../100-libhdf5-103_1.10.4+repack-11ubuntu1_amd64.deb  ...
正在解压 libhdf5-103:amd64 (1.10.4+repack-11ubuntu1) ...
正在选中未选择的软件包 libminizip1:amd64。
准备解压 .../101-libminizip1_1.1-8build1_amd64.deb  ...
正在解压 libminizip1:amd64 (1.1-8build1) ...
正在选中未选择的软件包 liburiparser1:amd64。
准备解压 .../102-liburiparser1_0.9.3-2_amd64.deb  ...
正在解压 liburiparser1:amd64 (0.9.3-2) ...
正在选中未选择的软件包 libkmlbase1:amd64。
准备解压 .../103-libkmlbase1_1.3.0-8build1_amd64.deb  ...
正在解压 libkmlbase1:amd64 (1.3.0-8build1) ...
正在选中未选择的软件包 libkmldom1:amd64。
准备解压 .../104-libkmldom1_1.3.0-8build1_amd64.deb  ...
正在解压 libkmldom1:amd64 (1.3.0-8build1) ...
正在选中未选择的软件包 libkmlengine1:amd64。
准备解压 .../105-libkmlengine1_1.3.0-8build1_amd64.deb  ...
正在解压 libkmlengine1:amd64 (1.3.0-8build1) ...
正在选中未选择的软件包 libnetcdf15:amd64。
准备解压 .../106-libnetcdf15_1%3a4.7.3-1_amd64.deb  ...
正在解压 libnetcdf15:amd64 (1:4.7.3-1) ...
正在选中未选择的软件包 libodbc1:amd64。
准备解压 .../107-libodbc1_2.3.6-0.1build1_amd64.deb  ...
正在解压 libodbc1:amd64 (2.3.6-0.1build1) ...
正在选中未选择的软件包 libogdi4.1。
准备解压 .../108-libogdi4.1_4.1.0+ds-1build1_amd64.deb  ...
正在解压 libogdi4.1 (4.1.0+ds-1build1) ...
正在选中未选择的软件包 libpq5:amd64。
准备解压 .../109-libpq5_12.16-0ubuntu0.20.04.1_amd64.deb  ...
正在解压 libpq5:amd64 (12.16-0ubuntu0.20.04.1) ...
正在选中未选择的软件包 libqhull7:amd64。
准备解压 .../110-libqhull7_2015.2-4_amd64.deb  ...
正在解压 libqhull7:amd64 (2015.2-4) ...
正在选中未选择的软件包 libspatialite7:amd64。
准备解压 .../111-libspatialite7_4.3.0a-6build1_amd64.deb  ...
正在解压 libspatialite7:amd64 (4.3.0a-6build1) ...
正在选中未选择的软件包 libxerces-c3.2:amd64。
准备解压 .../112-libxerces-c3.2_3.2.2+debian-1build3_amd64.deb  ...
正在解压 libxerces-c3.2:amd64 (3.2.2+debian-1build3) ...
正在选中未选择的软件包 odbcinst。
准备解压 .../113-odbcinst_2.3.6-0.1build1_amd64.deb  ...
正在解压 odbcinst (2.3.6-0.1build1) ...
正在选中未选择的软件包 odbcinst1debian2:amd64。
准备解压 .../114-odbcinst1debian2_2.3.6-0.1build1_amd64.deb  ...
正在解压 odbcinst1debian2:amd64 (2.3.6-0.1build1) ...
正在选中未选择的软件包 libgdal26。
准备解压 .../115-libgdal26_3.0.4+dfsg-1build3_amd64.deb  ...
正在解压 libgdal26 (3.0.4+dfsg-1build3) ...
正在选中未选择的软件包 libsocket++1:amd64。
准备解压 .../116-libsocket++1_1.12.13-10build1_amd64.deb  ...
正在解压 libsocket++1:amd64 (1.12.13-10build1) ...
正在选中未选择的软件包 libgdcm3.0:amd64。
准备解压 .../117-libgdcm3.0_3.0.5-1.1ubuntu2_amd64.deb  ...
正在解压 libgdcm3.0:amd64 (3.0.5-1.1ubuntu2) ...
正在选中未选择的软件包 libgdcm-dev。
准备解压 .../118-libgdcm-dev_3.0.5-1.1ubuntu2_amd64.deb  ...
正在解压 libgdcm-dev (3.0.5-1.1ubuntu2) ...
正在选中未选择的软件包 libgl2ps1.4。
准备解压 .../119-libgl2ps1.4_1.4.0+dfsg1-2_amd64.deb  ...
正在解压 libgl2ps1.4 (1.4.0+dfsg1-2) ...
正在选中未选择的软件包 libgphoto2-dev:amd64。
准备解压 .../120-libgphoto2-dev_2.5.25-0ubuntu0.1_amd64.deb  ...
正在解压 libgphoto2-dev:amd64 (2.5.25-0ubuntu0.1) ...
正在选中未选择的软件包 libhdf5-openmpi-103:amd64。
准备解压 .../121-libhdf5-openmpi-103_1.10.4+repack-11ubuntu1_amd64.deb  ...
正在解压 libhdf5-openmpi-103:amd64 (1.10.4+repack-11ubuntu1) ...
正在选中未选择的软件包 libilmbase24:amd64。
准备解压 .../122-libilmbase24_2.3.0-6build1_amd64.deb  ...
正在解压 libilmbase24:amd64 (2.3.0-6build1) ...
正在选中未选择的软件包 libilmbase-dev:amd64。
准备解压 .../123-libilmbase-dev_2.3.0-6build1_amd64.deb  ...
正在解压 libilmbase-dev:amd64 (2.3.0-6build1) ...
正在选中未选择的软件包 libjpeg-turbo8-dev:amd64。
准备解压 .../124-libjpeg-turbo8-dev_2.0.3-0ubuntu1.20.04.3_amd64.deb  ...
正在解压 libjpeg-turbo8-dev:amd64 (2.0.3-0ubuntu1.20.04.3) ...
正在选中未选择的软件包 libjpeg8-dev:amd64。
准备解压 .../125-libjpeg8-dev_8c-2ubuntu8_amd64.deb  ...
正在解压 libjpeg8-dev:amd64 (8c-2ubuntu8) ...
正在选中未选择的软件包 libjpeg-dev:amd64。
准备解压 .../126-libjpeg-dev_8c-2ubuntu8_amd64.deb  ...
正在解压 libjpeg-dev:amd64 (8c-2ubuntu8) ...
正在选中未选择的软件包 liblept5:amd64。
准备解压 .../127-liblept5_1.79.0-1_amd64.deb  ...
正在解压 liblept5:amd64 (1.79.0-1) ...
正在选中未选择的软件包 libltdl-dev:amd64。
准备解压 .../128-libltdl-dev_2.4.6-14_amd64.deb  ...
正在解压 libltdl-dev:amd64 (2.4.6-14) ...
正在选中未选择的软件包 libnetcdf-c++4。
准备解压 .../129-libnetcdf-c++4_4.2-11build2_amd64.deb  ...
正在解压 libnetcdf-c++4 (4.2-11build2) ...
正在选中未选择的软件包 libnl-3-dev:amd64。
准备解压 .../130-libnl-3-dev_3.4.0-1ubuntu0.1_amd64.deb  ...
正在解压 libnl-3-dev:amd64 (3.4.0-1ubuntu0.1) ...
正在选中未选择的软件包 libnl-route-3-dev:amd64。
准备解压 .../131-libnl-route-3-dev_3.4.0-1ubuntu0.1_amd64.deb  ...
正在解压 libnl-route-3-dev:amd64 (3.4.0-1ubuntu0.1) ...
正在选中未选择的软件包 libtbb2:amd64。
准备解压 .../132-libtbb2_2020.1-2_amd64.deb  ...
正在解压 libtbb2:amd64 (2020.1-2) ...
正在选中未选择的软件包 libopencv-core4.2:amd64。
准备解压 .../133-libopencv-core4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-core4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-flann4.2:amd64。
准备解压 .../134-libopencv-flann4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-flann4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-imgproc4.2:amd64。
准备解压 .../135-libopencv-imgproc4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-imgproc4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopenexr24:amd64。
准备解压 .../136-libopenexr24_2.3.0-6ubuntu0.5_amd64.deb  ...
正在解压 libopenexr24:amd64 (2.3.0-6ubuntu0.5) ...
正在选中未选择的软件包 libopencv-imgcodecs4.2:amd64。
准备解压 .../137-libopencv-imgcodecs4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-imgcodecs4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libdc1394-22:amd64。
准备解压 .../138-libdc1394-22_2.2.5-2.1_amd64.deb  ...
正在解压 libdc1394-22:amd64 (2.2.5-2.1) ...
正在选中未选择的软件包 libswscale5:amd64。
准备解压 .../139-libswscale5_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libswscale5:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libopencv-videoio4.2:amd64。
准备解压 .../140-libopencv-videoio4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-videoio4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-highgui4.2:amd64。
准备解压 .../141-libopencv-highgui4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-highgui4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-ml4.2:amd64。
准备解压 .../142-libopencv-ml4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-ml4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-features2d4.2:amd64。
准备解压 .../143-libopencv-features2d4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-features2d4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-calib3d4.2:amd64。
准备解压 .../144-libopencv-calib3d4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-calib3d4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libtbb-dev:amd64。
准备解压 .../145-libtbb-dev_2020.1-2_amd64.deb  ...
正在解压 libtbb-dev:amd64 (2020.1-2) ...
正在选中未选择的软件包 zlib1g-dev:amd64。
准备解压 .../146-zlib1g-dev_1%3a1.2.11.dfsg-2ubuntu1.5_amd64.deb  ...
正在解压 zlib1g-dev:amd64 (1:1.2.11.dfsg-2ubuntu1.5) ...
正在选中未选择的软件包 libopencv-core-dev:amd64。
准备解压 .../147-libopencv-core-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-core-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-flann-dev:amd64。
准备解压 .../148-libopencv-flann-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-flann-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libraw1394-dev:amd64。
准备解压 .../149-libraw1394-dev_2.1.2-1_amd64.deb  ...
正在解压 libraw1394-dev:amd64 (2.1.2-1) ...
正在选中未选择的软件包 libdc1394-22-dev:amd64。
准备解压 .../150-libdc1394-22-dev_2.2.5-2.1_amd64.deb  ...
正在解压 libdc1394-22-dev:amd64 (2.2.5-2.1) ...
正在选中未选择的软件包 libopencv-imgproc-dev:amd64。
准备解压 .../151-libopencv-imgproc-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-imgproc-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-imgcodecs-dev:amd64。
准备解压 .../152-libopencv-imgcodecs-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-imgcodecs-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-videoio-dev:amd64。
准备解压 .../153-libopencv-videoio-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-videoio-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopenexr-dev。
准备解压 .../154-libopenexr-dev_2.3.0-6ubuntu0.5_amd64.deb  ...
正在解压 libopenexr-dev (2.3.0-6ubuntu0.5) ...
正在选中未选择的软件包 libpng-dev:amd64。
准备解压 .../155-libpng-dev_1.6.37-2_amd64.deb  ...
正在解压 libpng-dev:amd64 (1.6.37-2) ...
正在选中未选择的软件包 libswscale-dev:amd64。
准备解压 .../156-libswscale-dev_7%3a4.2.7-0ubuntu0.1_amd64.deb  ...
正在解压 libswscale-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在选中未选择的软件包 libjbig-dev:amd64。
准备解压 .../157-libjbig-dev_2.1-3.1ubuntu0.20.04.1_amd64.deb  ...
正在解压 libjbig-dev:amd64 (2.1-3.1ubuntu0.20.04.1) ...
正在选中未选择的软件包 liblzma-dev:amd64。
准备解压 .../158-liblzma-dev_5.2.4-1ubuntu1.1_amd64.deb  ...
正在解压 liblzma-dev:amd64 (5.2.4-1ubuntu1.1) ...
正在选中未选择的软件包 libtiffxx5:amd64。
准备解压 .../159-libtiffxx5_4.1.0+git191117-2ubuntu0.20.04.9_amd64.deb  ...
正在解压 libtiffxx5:amd64 (4.1.0+git191117-2ubuntu0.20.04.9) ...
正在选中未选择的软件包 libtiff-dev:amd64。
准备解压 .../160-libtiff-dev_4.1.0+git191117-2ubuntu0.20.04.9_amd64.deb  ...
正在解压 libtiff-dev:amd64 (4.1.0+git191117-2ubuntu0.20.04.9) ...
正在选中未选择的软件包 libopencv-highgui-dev:amd64。
准备解压 .../161-libopencv-highgui-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-highgui-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-ml-dev:amd64。
准备解压 .../162-libopencv-ml-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-ml-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-features2d-dev:amd64。
准备解压 .../163-libopencv-features2d-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-features2d-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-calib3d-dev:amd64。
准备解压 .../164-libopencv-calib3d-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-calib3d-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-dnn4.2:amd64。
准备解压 .../165-libopencv-dnn4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-dnn4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-objdetect4.2:amd64。
准备解压 .../166-libopencv-objdetect4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-objdetect4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-photo4.2:amd64。
准备解压 .../167-libopencv-photo4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-photo4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-video4.2:amd64。
准备解压 .../168-libopencv-video4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-video4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-shape4.2:amd64。
准备解压 .../169-libopencv-shape4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-shape4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-stitching4.2:amd64。
准备解压 .../170-libopencv-stitching4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-stitching4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-superres4.2:amd64。
准备解压 .../171-libopencv-superres4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-superres4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-videostab4.2:amd64。
准备解压 .../172-libopencv-videostab4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-videostab4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libjsoncpp1:amd64。
准备解压 .../173-libjsoncpp1_1.7.4-3.1ubuntu2_amd64.deb  ...
正在解压 libjsoncpp1:amd64 (1.7.4-3.1ubuntu2) ...
正在选中未选择的软件包 libvtk6.3。
准备解压 .../174-libvtk6.3_6.3.0+dfsg2-5build2_amd64.deb  ...
正在解压 libvtk6.3 (6.3.0+dfsg2-5build2) ...
正在选中未选择的软件包 libopencv-viz4.2:amd64。
准备解压 .../175-libopencv-viz4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-viz4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libtesseract4:amd64。
准备解压 .../176-libtesseract4_4.1.1-2build2_amd64.deb  ...
正在解压 libtesseract4:amd64 (4.1.1-2build2) ...
正在选中未选择的软件包 libopencv-contrib4.2:amd64。
准备解压 .../177-libopencv-contrib4.2_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-contrib4.2:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-dnn-dev:amd64。
准备解压 .../178-libopencv-dnn-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-dnn-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-objdetect-dev:amd64。
准备解压 .../179-libopencv-objdetect-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-objdetect-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-photo-dev:amd64。
准备解压 .../180-libopencv-photo-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-photo-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-video-dev:amd64。
准备解压 .../181-libopencv-video-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-video-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-shape-dev:amd64。
准备解压 .../182-libopencv-shape-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-shape-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-stitching-dev:amd64。
准备解压 .../183-libopencv-stitching-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-stitching-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-superres-dev:amd64。
准备解压 .../184-libopencv-superres-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-superres-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-videostab-dev:amd64。
准备解压 .../185-libopencv-videostab-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-videostab-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-viz-dev:amd64。
准备解压 .../186-libopencv-viz-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-viz-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-contrib-dev:amd64。
准备解压 .../187-libopencv-contrib-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-contrib-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-ts-dev:amd64。
准备解压 .../188-libopencv-ts-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-ts-dev:amd64 (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv4.2-jni。
准备解压 .../189-libopencv4.2-jni_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv4.2-jni (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv4.2-java。
准备解压 .../190-libopencv4.2-java_4.2.0+dfsg-5_all.deb  ...
正在解压 libopencv4.2-java (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libopencv-dev。
准备解压 .../191-libopencv-dev_4.2.0+dfsg-5_amd64.deb  ...
正在解压 libopencv-dev (4.2.0+dfsg-5) ...
正在选中未选择的软件包 libpng-tools。
准备解压 .../192-libpng-tools_1.6.37-2_amd64.deb  ...
正在解压 libpng-tools (1.6.37-2) ...
正在选中未选择的软件包 libraw1394-tools。
准备解压 .../193-libraw1394-tools_2.1.2-1_amd64.deb  ...
正在解压 libraw1394-tools (2.1.2-1) ...
正在选中未选择的软件包 libtool。
准备解压 .../194-libtool_2.4.6-14_all.deb  ...
正在解压 libtool (2.4.6-14) ...
正在选中未选择的软件包 mesa-va-drivers:amd64。
准备解压 .../195-mesa-va-drivers_21.2.6-0ubuntu0.1~20.04.2_amd64.deb  ...
正在解压 mesa-va-drivers:amd64 (21.2.6-0ubuntu0.1~20.04.2) ...
正在选中未选择的软件包 mesa-vdpau-drivers:amd64。
准备解压 .../196-mesa-vdpau-drivers_21.2.6-0ubuntu0.1~20.04.2_amd64.deb  ...
正在解压 mesa-vdpau-drivers:amd64 (21.2.6-0ubuntu0.1~20.04.2) ...
正在选中未选择的软件包 opencv-data。
准备解压 .../197-opencv-data_4.2.0+dfsg-5_all.deb  ...
正在解压 opencv-data (4.2.0+dfsg-5) ...
正在选中未选择的软件包 i965-va-driver:amd64。
准备解压 .../198-i965-va-driver_2.4.0-0ubuntu1_amd64.deb  ...
正在解压 i965-va-driver:amd64 (2.4.0-0ubuntu1) ...
正在选中未选择的软件包 va-driver-all:amd64。
准备解压 .../199-va-driver-all_2.7.0-2_amd64.deb  ...
正在解压 va-driver-all:amd64 (2.7.0-2) ...
正在选中未选择的软件包 vdpau-driver-all:amd64。
准备解压 .../200-vdpau-driver-all_1.3-1ubuntu2_amd64.deb  ...
正在解压 vdpau-driver-all:amd64 (1.3-1ubuntu2) ...
正在选中未选择的软件包 libnuma-dev:amd64。
准备解压 .../201-libnuma-dev_2.0.12-1_amd64.deb  ...
正在解压 libnuma-dev:amd64 (2.0.12-1) ...
正在选中未选择的软件包 libhwloc-dev:amd64。
准备解压 .../202-libhwloc-dev_2.1.0+dfsg-4_amd64.deb  ...
正在解压 libhwloc-dev:amd64 (2.1.0+dfsg-4) ...
正在选中未选择的软件包 libibverbs-dev:amd64。
准备解压 .../203-libibverbs-dev_28.0-1ubuntu1_amd64.deb  ...
正在解压 libibverbs-dev:amd64 (28.0-1ubuntu1) ...
正在选中未选择的软件包 libopenmpi-dev:amd64。
准备解压 .../204-libopenmpi-dev_4.0.3-0ubuntu1_amd64.deb  ...
正在解压 libopenmpi-dev:amd64 (4.0.3-0ubuntu1) ...
正在选中未选择的软件包 proj-bin。
准备解压 .../205-proj-bin_6.3.1-1_amd64.deb  ...
正在解压 proj-bin (6.3.1-1) ...
正在设置 libgme0:amd64 (0.6.2-1build1) ...
正在设置 libssh-gcrypt-4:amd64 (0.9.3-2ubuntu2.3) ...
正在设置 javascript-common (11) ...
正在设置 libjpeg-turbo8-dev:amd64 (2.0.3-0ubuntu1.20.04.3) ...
正在设置 libexif-dev:amd64 (0.6.21-6ubuntu0.4) ...
正在设置 libxerces-c3.2:amd64 (3.2.2+debian-1build3) ...
正在设置 proj-data (6.3.1-1) ...
正在设置 libshine3:amd64 (3.1.1-2) ...
正在设置 libgeos-3.8.0:amd64 (3.8.0-1build1) ...
正在设置 libgphoto2-dev:amd64 (2.5.25-0ubuntu0.1) ...
正在设置 libpng-tools (1.6.37-2) ...
正在设置 libogdi4.1 (4.1.0+ds-1build1) ...
正在设置 libgsm1:amd64 (1.0.18-2) ...
正在设置 libx264-155:amd64 (2:0.155.2917+git0a84d98-2) ...
正在设置 libcharls2:amd64 (2.0.0+dfsg-1build1) ...
正在设置 libminizip1:amd64 (1.1-8build1) ...
正在设置 libx265-179:amd64 (3.2.1-1build1) ...
正在设置 libaom0:amd64 (1.0.0.errata1-3build1) ...
正在设置 libraw1394-dev:amd64 (2.1.2-1) ...
正在设置 libtbb2:amd64 (2020.1-2) ...
正在设置 libdc1394-22:amd64 (2.2.5-2.1) ...
正在设置 libpq5:amd64 (12.16-0ubuntu0.20.04.1) ...
正在设置 libjbig-dev:amd64 (2.1-3.1ubuntu0.20.04.1) ...
正在设置 libdap25:amd64 (3.20.5-1) ...
正在设置 libqhull7:amd64 (2015.2-4) ...
正在设置 libxvidcore4:amd64 (2:1.3.7-1) ...
正在设置 libepsilon1:amd64 (0.9.2+dfsg-4) ...
正在设置 libilmbase24:amd64 (2.3.0-6build1) ...
正在设置 libaec0:amd64 (1.0.4-1) ...
正在设置 gdal-data (3.0.4+dfsg-1build3) ...
正在设置 libgl2ps1.4 (1.4.0+dfsg1-2) ...
正在设置 liblept5:amd64 (1.79.0-1) ...
正在设置 libsnappy1v5:amd64 (1.1.8-1build1) ...
正在设置 libnuma-dev:amd64 (2.0.12-1) ...
正在设置 libxnvctrl0:amd64 (470.57.01-0ubuntu0.20.04.3) ...
正在设置 autotools-dev (20180224.1) ...
正在设置 libblas3:amd64 (3.9.0-1build1) ...
update-alternatives: 使用 /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 来在自动模式中提供 /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu)
正在设置 libcfitsio8:amd64 (3.470-3) ...
正在设置 libopenexr24:amd64 (2.3.0-6ubuntu0.5) ...
正在设置 libva2:amd64 (2.7.0-2) ...
正在设置 libigdgmm11:amd64 (20.1.1+ds1-1) ...
正在设置 libcodec2-0.9:amd64 (0.9.2-2) ...
正在设置 libsigsegv2:amd64 (2.12-2) ...
正在设置 intel-media-va-driver:amd64 (20.1.1+dfsg1-1) ...
正在设置 libhwloc15:amd64 (2.1.0+dfsg-4) ...
正在设置 libevent-core-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 libevent-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 gcc-8-base:amd64 (8.4.0-3ubuntu2) ...
正在设置 libgeos-c1v5:amd64 (3.8.0-1build1) ...
正在设置 libsocket++1:amd64 (1.12.13-10build1) ...
正在设置 libproj15:amd64 (6.3.1-1) ...
正在设置 libodbc1:amd64 (2.3.6-0.1build1) ...
正在设置 libaacs0:amd64 (0.9.0-2) ...
正在设置 libtesseract4:amd64 (4.1.1-2build2) ...
正在设置 libgfortran5:amd64 (10.5.0-1ubuntu1~20.04) ...
正在设置 libhdf4-0-alt (4.2.14-1ubuntu1) ...
正在设置 libmpx2:amd64 (8.4.0-3ubuntu2) ...
正在设置 liblzma-dev:amd64 (5.2.4-1ubuntu1.1) ...
正在设置 zlib1g-dev:amd64 (1:1.2.11.dfsg-2ubuntu1.5) ...
正在设置 liburiparser1:amd64 (0.9.3-2) ...
正在设置 libbdplus0:amd64 (0.1.2-3) ...
正在设置 opencv-data (4.2.0+dfsg-5) ...
正在设置 libfreexl1:amd64 (1.0.5-3) ...
正在设置 libva-drm2:amd64 (2.7.0-2) ...
正在设置 ocl-icd-libopencl1:amd64 (2.2.11-1ubuntu1) ...
正在设置 libvdpau1:amd64 (1.3-1ubuntu2) ...
正在设置 libfyba0:amd64 (4.1.1-6build1) ...
正在设置 libkmlbase1:amd64 (1.3.0-8build1) ...
正在设置 libraw1394-tools (2.1.2-1) ...
正在设置 libdapclient6v5:amd64 (3.20.5-1) ...
正在设置 libnl-3-200:amd64 (3.4.0-1ubuntu0.1) ...
正在设置 libpsm2-2 (11.2.86-1) ...
正在设置 openmpi-common (4.0.3-0ubuntu1) ...
正在设置 libtbb-dev:amd64 (2020.1-2) ...
正在设置 libpsm-infinipath1 (3.3+20.604758e7-6) ...
update-alternatives: 使用 /usr/lib/libpsm1/libpsm_infinipath.so.1.16 来在自动模式中提供 /usr/lib/x86_64-linux-gnu/libpsm_infinipath.so.1 (libpsm_infinipath.so.1)
正在设置 mesa-va-drivers:amd64 (21.2.6-0ubuntu0.1~20.04.2) ...
正在设置 libjs-jquery (3.3.1~dfsg-3) ...
正在设置 libjpeg8-dev:amd64 (8c-2ubuntu8) ...
正在设置 cpp-8 (8.4.0-3ubuntu2) ...
正在设置 libbluray2:amd64 (1:1.2.0-1) ...
正在设置 libva-x11-2:amd64 (2.7.0-2) ...
正在设置 libopenmpt0:amd64 (0.4.11-1build1) ...
正在设置 libzvbi-common (0.2.35-17) ...
正在设置 libilmbase-dev:amd64 (2.3.0-6build1) ...
正在设置 libsz2:amd64 (1.0.4-1) ...
正在设置 i965-va-driver:amd64 (2.4.0-0ubuntu1) ...
正在设置 libjsoncpp1:amd64 (1.7.4-3.1ubuntu2) ...
正在设置 libtiffxx5:amd64 (4.1.0+git191117-2ubuntu0.20.04.9) ...
正在设置 libevent-pthreads-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 libkmldom1:amd64 (1.3.0-8build1) ...
正在设置 libspatialite7:amd64 (4.3.0a-6build1) ...
正在设置 mesa-vdpau-drivers:amd64 (21.2.6-0ubuntu0.1~20.04.2) ...
正在设置 libzvbi0:amd64 (0.2.35-17) ...
正在设置 libevent-extra-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 liblapack3:amd64 (3.9.0-1build1) ...
update-alternatives: 使用 /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 来在自动模式中提供 /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu)
正在设置 libopencv-core4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libkmlengine1:amd64 (1.3.0-8build1) ...
正在设置 libdc1394-22-dev:amd64 (2.2.5-2.1) ...
正在设置 libtool (2.4.6-14) ...
正在设置 libopencv-imgproc4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libpng-dev:amd64 (1.6.37-2) ...
正在设置 libarpack2:amd64 (3.7.0-3) ...
正在设置 libjpeg-dev:amd64 (8c-2ubuntu8) ...
正在设置 libsuperlu5:amd64 (5.2.1+dfsg1-4) ...
正在设置 libgfortran-9-dev:amd64 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 libevent-openssl-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 proj-bin (6.3.1-1) ...
正在设置 m4 (1.4.18-4) ...
正在设置 libhwloc-plugins:amd64 (2.1.0+dfsg-4) ...
正在设置 libavutil56:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libgeotiff5:amd64 (1.5.1-2) ...
正在设置 libnl-route-3-200:amd64 (3.4.0-1ubuntu0.1) ...
正在设置 libopenexr-dev (2.3.0-6ubuntu0.5) ...
正在设置 libtiff-dev:amd64 (4.1.0+git191117-2ubuntu0.20.04.9) ...
正在设置 va-driver-all:amd64 (2.7.0-2) ...
正在设置 libgdcm3.0:amd64 (3.0.5-1.1ubuntu2) ...
正在设置 libhdf5-103:amd64 (1.10.4+repack-11ubuntu1) ...
正在设置 libevent-dev (2.1.11-stable-1) ...
正在设置 libgcc-8-dev:amd64 (8.4.0-3ubuntu2) ...
正在设置 autoconf (2.69-11.1) ...
正在设置 vdpau-driver-all:amd64 (1.3-1ubuntu2) ...
正在设置 libnl-3-dev:amd64 (3.4.0-1ubuntu0.1) ...
正在设置 libopencv-core-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libexif-doc (0.6.21-6ubuntu0.4) ...
正在设置 libopencv-flann4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libnl-genl-3-200:amd64 (3.4.0-1ubuntu0.1) ...
正在设置 libswscale5:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libopencv-photo4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libarmadillo9 (1:9.800.4+dfsg-1build1) ...
正在设置 libopencv-ml4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 automake (1:1.16.1-4ubuntu6) ...
update-alternatives: 使用 /usr/bin/automake-1.16 来在自动模式中提供 /usr/bin/automake (automake)
正在设置 libavutil-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libgfortran-8-dev:amd64 (8.4.0-3ubuntu2) ...
正在设置 libopencv-flann-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libibverbs1:amd64 (28.0-1ubuntu1) ...
正在设置 libgdcm-dev (3.0.5-1.1ubuntu2) ...
正在设置 libopencv-ml-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 gcc-8 (8.4.0-3ubuntu2) ...
正在设置 gfortran-9 (9.4.0-1ubuntu1~20.04.2) ...
正在设置 libpmix2:amd64 (3.1.5-1) ...
正在设置 ibverbs-providers:amd64 (28.0-1ubuntu1) ...
正在设置 libopencv-dnn4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 gfortran-8 (8.4.0-3ubuntu2) ...
正在设置 libswresample3:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libopencv-ts-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 gfortran (4:9.3.0-1ubuntu2) ...
update-alternatives: 使用 /usr/bin/gfortran 来在自动模式中提供 /usr/bin/f95 (f95)
update-alternatives: 使用 /usr/bin/gfortran 来在自动模式中提供 /usr/bin/f77 (f77)
正在设置 libavresample4:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libnetcdf15:amd64 (1:4.7.3-1) ...
正在设置 libnl-route-3-dev:amd64 (3.4.0-1ubuntu0.1) ...
正在设置 libltdl-dev:amd64 (2.4.6-14) ...
正在设置 libopencv-imgproc-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-dnn-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libswscale-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libavcodec58:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libhwloc-dev:amd64 (2.1.0+dfsg-4) ...
正在设置 libchromaprint1:amd64 (1.4.3-3build1) ...
正在设置 librdmacm1:amd64 (28.0-1ubuntu1) ...
正在设置 libswresample-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libavformat58:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libcoarrays-dev:amd64 (2.8.0-1) ...
正在设置 libavcodec-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libopencv-photo-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libavresample-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libavformat-dev:amd64 (7:4.2.7-0ubuntu0.1) ...
正在设置 libibverbs-dev:amd64 (28.0-1ubuntu1) ...
正在设置 libnetcdf-c++4 (4.2-11build2) ...
正在设置 libfabric1 (1.6.2-3ubuntu0.1) ...
正在设置 libopenmpi3:amd64 (4.0.3-0ubuntu1) ...
正在设置 libhdf5-openmpi-103:amd64 (1.10.4+repack-11ubuntu1) ...
正在设置 libcaf-openmpi-3:amd64 (2.8.0-1) ...
正在设置 openmpi-bin (4.0.3-0ubuntu1) ...
update-alternatives: 使用 /usr/bin/mpirun.openmpi 来在自动模式中提供 /usr/bin/mpirun (mpirun)
update-alternatives: 使用 /usr/bin/mpicc.openmpi 来在自动模式中提供 /usr/bin/mpicc (mpi)
正在设置 libvtk6.3 (6.3.0+dfsg2-5build2) ...
正在设置 libcoarrays-openmpi-dev:amd64 (2.8.0-1) ...
正在设置 libopenmpi-dev:amd64 (4.0.3-0ubuntu1) ...
update-alternatives: 使用 /usr/lib/x86_64-linux-gnu/openmpi/include 来在自动模式中提供 /usr/include/x86_64-linux-gnu/mpi (mpi-x86_64-linux-gnu)
正在设置 libopencv-viz4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-viz-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 odbcinst (2.3.6-0.1build1) ...
正在设置 odbcinst1debian2:amd64 (2.3.6-0.1build1) ...
正在设置 libgdal26 (3.0.4+dfsg-1build3) ...
正在设置 libopencv-imgcodecs4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-imgcodecs-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-videoio4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-highgui4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-features2d4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-calib3d4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-videoio-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-video4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-videostab4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-superres4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-objdetect4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-stitching4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-video-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-highgui-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-features2d-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-shape4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-calib3d-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-objdetect-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-shape-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-superres-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-videostab-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-contrib4.2:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv4.2-jni (4.2.0+dfsg-5) ...
正在设置 libopencv-stitching-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv-contrib-dev:amd64 (4.2.0+dfsg-5) ...
正在设置 libopencv4.2-java (4.2.0+dfsg-5) ...
正在设置 libopencv-dev (4.2.0+dfsg-5) ...
正在处理用于 install-info (6.7.0.dfsg.2-5) 的触发器 ...
正在处理用于 libc-bin (2.31-0ubuntu9.7) 的触发器 ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...

安装完了之后,可以查看一下OpenCV的安装版本,可以看到,opencv的安装版本是4.2.0+dfsg-5:

lyl@ubuntu:~/桌面$ dpkg -s libopencv-dev
Package: libopencv-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 399
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Source: opencv
Version: 4.2.0+dfsg-5
Replaces: libcv-dev, libcvaux-dev, libhighgui-dev
Depends: libopencv-calib3d-dev (= 4.2.0+dfsg-5), libopencv-contrib-dev (= 4.2.0+dfsg-5), libopencv-core-dev (= 4.2.0+dfsg-5), libopencv-dnn-dev (= 4.2.0+dfsg-5), libopencv-features2d-dev (= 4.2.0+dfsg-5), libopencv-flann-dev (= 4.2.0+dfsg-5), libopencv-highgui-dev (= 4.2.0+dfsg-5), libopencv-imgcodecs-dev (= 4.2.0+dfsg-5), libopencv-imgproc-dev (= 4.2.0+dfsg-5), libopencv-ml-dev (= 4.2.0+dfsg-5), libopencv-objdetect-dev (= 4.2.0+dfsg-5), libopencv-photo-dev (= 4.2.0+dfsg-5), libopencv-shape-dev (= 4.2.0+dfsg-5), libopencv-stitching-dev (= 4.2.0+dfsg-5), libopencv-superres-dev (= 4.2.0+dfsg-5), libopencv-ts-dev (= 4.2.0+dfsg-5), libopencv-video-dev (= 4.2.0+dfsg-5), libopencv-videoio-dev (= 4.2.0+dfsg-5), libopencv-videostab-dev (= 4.2.0+dfsg-5), libopencv-viz-dev (= 4.2.0+dfsg-5), libopencv4.2-java (= 4.2.0+dfsg-5), pkg-config, libc6 (>= 2.14), libgcc-s1 (>= 3.0), libopencv-calib3d4.2 (>= 4.2.0+dfsg), libopencv-contrib4.2 (>= 4.2.0+dfsg), libopencv-core4.2 (>= 4.2.0+dfsg), libopencv-features2d4.2 (>= 4.2.0+dfsg), libopencv-highgui4.2 (>= 4.2.0+dfsg), libopencv-imgcodecs4.2 (>= 4.2.0+dfsg), libopencv-imgproc4.2 (>= 4.2.0+dfsg), libopencv-videoio4.2 (>= 4.2.0+dfsg), libstdc++6 (>= 9), libilmbase-dev
Recommends: opencv-data
Suggests: opencv-doc
Breaks: libopencv-core-dev (<= 2.3.1-8)
Conflicts: libcv-dev, libcvaux-dev, libhighgui-dev
Description: development files for opencv
 This is a metapackage providing development package necessary for
 development of OpenCV (Open Computer Vision).
 .
 The Open Computer Vision Library is a collection of algorithms and sample
 code for various computer vision problems. The library is compatible with
 IPL (Intel's Image Processing Library) and, if available, can use IPP
 (Intel's Integrated Performance Primitives) for better performance.
 .
 OpenCV provides low level portable data types and operators, and a set
 of high level functionalities for video acquisition, image processing and
 analysis, structural analysis, motion analysis and object tracking, object
 recognition, camera calibration and 3D reconstruction.
Original-Maintainer: Debian Science Team <debian-science-maintainers@lists.alioth.debian.org>
Homepage: https://opencv.org
图3-2 下载并打开OpenCV帮助文档

在使用OpenCV的过程中,需要有一些帮助文档来辅助进行开发:

  1. OpenCV官网的帮助文档:https://opencv.org/
  2. ChatGPT(本人体验是真的香~)。

官网的帮助文档如果无法下载:

  • 2.4.9-Sphinx.zip
  • 4.2.0-Doxygen.zip

解压后直接在文件中打开“index.html”就可以直接查看帮助文档了。

3.3 OpenCV编程-图像采集(上)

  上一节已经在Ubuntu中配置好了OpenCV开发环境,本节就来打开摄像头。首先需要将Windows主机上的摄像头打开,并设置由VMware虚拟机控制:“VMware无法连接笔记本/电脑摄像头的解决方法”(注意自己的摄像头名称)。然后使用指令ls /dev/查看/dev目录,若存在 video0 这个文件夹就说明摄像头添加成功。

下面是打开摄像头的代码。由于使用了OpenCV4.2.0中的“highgui. High-level GUI and Media I/O”中的“VideoCapture”方法,所以编译时要加上-lopencv_highgui

// 编译指令
g++ main.cpp -o main -lopencv_highgui

// 源代码
#include <iostream>
#include "opencv2/opencv.hpp"
// #include "opencv4/opencv2/opencv.hpp"  // 建议用这一行,而不是上面一行
using namespace std;
using namespace cv;
int main() {
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;
    return 0;
}

下面是我在开发过程中的终端实际操作,包括解决代码报错过程:

解决报错参考文章:

  1. fatal error: opencv2/opencv.hpp: No such file or directory。但是更加建议将头文件改成 #include "opencv4/opencv2/opencv.hpp",但是我直到学完了才意识到这个问题,所以按照上述方法解决“报错1”算是作弊了😂。
  2. 解决Linux下 C++ opencv 库文件的链接问题
  3. 解决OpenCV的GStreamer warning警告
# 下面是报错1
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_highgui
main.cpp:2:10: fatal error: opencv2/opencv.hpp: 没有那个文件或目录
    2 | #include "opencv2/opencv.hpp"
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
lyl@ubuntu:~/桌面$ sudo ln -s /usr/include/opencv4/opencv2 /usr/include/
[sudo] lyl 的密码: 

# 下面是报错2
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_highgui
/usr/bin/ld: /tmp/cc2bwNwg.o: in function `main':
main.cpp:(.text+0x2e): undefined reference to `cv::VideoCapture::VideoCapture(int, int)'
/usr/bin/ld: main.cpp:(.text+0x3a): undefined reference to `cv::VideoCapture::isOpened() const'
/usr/bin/ld: main.cpp:(.text+0xa9): undefined reference to `cv::VideoCapture::~VideoCapture()'
/usr/bin/ld: main.cpp:(.text+0xcf): undefined reference to `cv::VideoCapture::~VideoCapture()'
collect2: error: ld returned 1 exit status
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio

# 下面是报错3
lyl@ubuntu:~/桌面$ ./main
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
Camera open success.
lyl@ubuntu:~/桌面$ vim main.cpp 
##################################
# 将打开摄像头的代码改成:VideoCapture cap(0, cv::CAP_V4L2);
##################################
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio
lyl@ubuntu:~/桌面$ ./main
Camera open success.

3.4 OpenCV编程-图像采集(下)

前面已经打开了摄像头,现在来正式通过摄像头采集图像。

//终端编译指令/
g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main() {
    // 1.打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    // 2.显示视频
    Mat color_image; // 定义一帧图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    for(;;) {
        cap >> color_image;           // 获取一帧图像
        imshow("video", color_image); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);                  // 等待50ms(20fps)
    }
    
    return 0;
}
图3-3 最后的运行结果

实际终端运行效果

lyl@ubuntu:~/桌面$ vim main.cpp 
###############################
# 把新代码添加进来
###############################
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui
lyl@ubuntu:~/桌面$ ./main
Camera open success.
^C

第四章 人脸检测

4.1 OpenCV编程-图像处理

  因为彩色照片所包含的信息量很大,所以对彩色照片进行人脸检测难度大、准确度低,所以一般都先将彩色照片转换成灰度图,再进行人脸检测。所以本节的目标在于对摄像头拍摄的彩色照片进行图像预处理:

  1. 彩色图片转换成灰度图。用到了“imgproc. Image Processing”中的“cvtColor”。
  2. 直方图均衡化。用到了“imgproc. Image Processing”中的“equalizeHist”。

注:使用opencv拍摄到的图片默认是BGR格式

1. 彩色图片转换成灰度图

//终端编译指令/
g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main() {
    // 1.打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    // 2.显示视频
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    for(;;) {
        cap >> img_color; // 获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY); // 将彩图转换成灰度图(-lopencv_imgproc)
        
        imshow("video", img_gray); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);               // 等待50ms(20fps)
    }
    
    return 0;
}

下面是我在开发过程中的终端实际操作,包括解决代码报错过程:

解决报错参考文章:

  1. error: ‘CV_BGR2GRAY’ was not declared in this scope
# 下面是报错1
lyl@ubuntu:~/桌面$ vim main.cpp 
##################################
# 添加了彩图转灰度图的代码
##################################
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui
main.cpp: In function ‘int main()’:
main.cpp:20:39: error: ‘CV_BGR2GRAY’ was not declared in this scope
   20 |         cvtColor(img_color, img_gray, CV_BGR2GRAY); // 将彩图转换成灰度图(-lopencv_imgproc)
      |                                       ^~~~~~~~~~~
lyl@ubuntu:~/桌面$ vim main.cpp 
##################################
# 将CV_BGR2GRAY改成cv::COLOR_BGR2GRAY
##################################
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui
/usr/bin/ld: /tmp/ccOsqEF2.o: undefined reference to symbol '_ZN2cv8cvtColorERKNS_11_InputArrayERKNS_12_OutputArrayEii'
/usr/bin/ld: /lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc
lyl@ubuntu:~/桌面$ ./main
Camera open success.
^C
图4-1 彩图转换成灰度图

直方图均衡化
但是灰度图也有问题,就是人脸的轮廓不是很清晰,此时截取人脸时就会出现误差。为了解决这个问题,就需要“直方图均衡化”,就是通过调整照片的亮度和对比度,来使人脸更加清晰。

//终端编译指令/
g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main() {
    // 1.打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    // 2.显示视频
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    for(;;) {
        cap >> img_color; // 获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY); // 将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql); //直方图均衡化(-lopencv_imgproc)
        
        imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    
    return 0;
}
图4-2 将灰度图进行直方图均衡化

但注意上述两步不是必须要做,但是做了之后可以提高人脸识别的准确度。

4.2 OpenCV编程-图像人脸检测(上)

  上一节已经获取了摄像头照片,本节来对照片中的人脸进行检测。人脸检测的底层原理就是根据人脸的特殊特征,通过卷积等方法在图像中找出最符合这种特征的区域,就认为是人脸。当然这些特征的采集和辨别都在OpenCV中有专门的函数。首先就是“objdetect. Object Detection”中的“CascadeClassifier类”(级联分类器)。CascadeClassifier类中包含很多方法,都是用于检测特定对象的。下面是OpenCV自带的特征库:

lyl@ubuntu:~$ ls /usr/share/opencv4/haarcascades/
# 注OpenCV2.x版本的存储路径为:/usr/share/opencv/haarcascades/
haarcascade_eye.xml                         # 检测眼睛
haarcascade_eye_tree_eyeglasses.xml         # 检测佩戴眼镜的眼睛
haarcascade_lefteye_2splits.xml             # 检测左眼
haarcascade_righteye_2splits.xml            # 检测左眼

haarcascade_frontalface_default.xml         # 检测正面的人脸-默认,准确度较差
haarcascade_frontalface_alt.xml             # 检测正面的人脸,准确度较差
haarcascade_frontalface_alt2.xml            # 检测正面的人脸,准确度提高
haarcascade_frontalface_alt_tree.xml        # 检测正面的人脸,准确度最高
haarcascade_profileface.xml                 # 检测侧脸
haarcascade_smile.xml                       # 检测微笑

haarcascade_frontalcatface.xml              # 检测正面视角的猫脸,速度快准确度相对低
haarcascade_frontalcatface_extended.xml     # 检测正面视角的猫脸,速度慢准确度相对高,对侧脸等不同角度也有一定检测能力

haarcascade_fullbody.xml                    # 检测完整人体
haarcascade_upperbody.xml                   # 检测上半身
haarcascade_lowerbody.xml                   # 检测下半身

haarcascade_russian_plate_number.xml        # 检测俄罗斯车牌号码,速度快准确度相对低
haarcascade_licence_plate_rus_16stages.xml  # 检测俄罗斯车牌号码,速度慢准确度相对高

于是下面就使用这些特征库来进行人脸检测:

  1. 加载人脸模型文件。用到了“objdetect. Object Detection”中的“CascadeClassifier类”。
  2. 人脸检测。用到了“objdetect. Object Detection”中的“CascadeClassifier类”中的“CascadeClassifier::detectMultiScale”。
  3. 框出人脸区域。用到了“core. The Core Functionality”中的“rectangle方法”。注意要判断一下是否有人脸,如果有才框起来。
//终端编译指令/
g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main() {
    // 打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    
    /显示视频-开始/
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    vector<Rect> face_all;// 存储所有脸的方框列表
    // 加载人脸的模型文件(-lopencv_objdetect)
    CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
    for(;;) {
        cap >> img_color;                                   // 获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);  // 将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql);                    // 直方图均衡化(-lopencv_imgproc)
        Classifier.detectMultiScale(img_eql, face_all);     // 人脸检测
        for(int i=0; i<face_all.size(); i++) {                  // 该for循环兼顾判断是否存在方框
            rectangle(img_eql, face_all[i], Scalar(0,255,255)); // 将所有脸的方框都显示出来
            // 注意添加颜色时,Scalar的顺序是BGR
        }
        
        imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    /显示视频-结束/
    
    return 0;
}
图4-3 人脸检测效果

下面是我在开发过程中的终端实际操作:

lyl@ubuntu:~/桌面$ vim main.cpp
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect
lyl@ubuntu:~/桌面$ ./main
Camera open success.
^C

注意Classifier.detectMultiScale()方法相对复杂,当电脑配置不高时,视频就会很卡,此时优化方法为:

  1. 硬件优化:给电脑的硬件都升级一下。
  2. 软件优化:多线程/进程并发。但是本课程不涉及。

4.3 OpenCV编程-图像人脸检测(下)

  本节课将人脸截取出来,并保存成一个独立的图像。因为百度云平台对图片格式有要求,必须是常规的格式如.jpg、.jpeg、.png,而程序中得到的人脸截图为.mat格式,所以保存图片时需要转码成相应格式。

  1. 保存为.jpg格式。用到了OpenCV2.4.9“highgui. High-level GUI and Media I/O”中的“imencode方法”、“imdecode方法”来转码。
  • 但在OpenCV4.2.0中,“imencode方法”、“imdecode方法”都是在“imgcodecs. Image file reading and writing”下。
//终端编译指令/
g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main() {
    // 打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    
    /显示视频-开始/
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    // 加载人脸的模型文件(-lopencv_objdetect)
    CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
    vector<Rect> face_all; // 存储所有脸的方框列表
    Mat img_face_shot;     // 存储人脸截图
    vector<uchar> img_face_jpg; // 存储.jpg格式的人脸截图
    for(;;) {
        cap >> img_color;                                   // 1.获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);  // 2.将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql);                    // 3.直方图均衡化(-lopencv_imgproc)
        Classifier.detectMultiScale(img_eql, face_all);     // 4.人脸检测
        if(face_all.size()) {
            // 5.框出所有的人脸
            for(int i=0; i<face_all.size(); i++) {                  // 该for循环兼顾判断是否存在方框
                rectangle(img_eql, face_all[i], Scalar(0,255,255)); // 将所有脸的方框都显示出来
                // 注意添加颜色时,Scalar的顺序是BGR
            }
            // 6.将人脸截图保存成jpg格式
            img_face_shot = img_eql(face_all[0]);
            imencode(".jpg", img_face_shot, img_face_jpg);// 编译时加上-lopencv_imgcodecs
        }

        
        imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    /显示视频-结束/
    
    return 0;
}

下面是我在开发过程中的终端实际操作,包括解决代码报错过程:

解决报错参考文章:

  1. “/usr/bin/ld: /tmp/: undefined reference to symbol ‘_ZN2cv6imreadERKSsi‘ rror adding symbols: DSO mis”
# 报错1
lyl@ubuntu:~/桌面$ vim main.cpp
########################################
# 更改成最新代码
########################################
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect
/usr/bin/ld: /tmp/ccyBD5hh.o: undefined reference to symbol '_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE'
/usr/bin/ld: /lib/x86_64-linux-gnu/libopencv_imgcodecs.so.4.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
lyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs
lyl@ubuntu:~/桌面$ 

目前OpenCV的工作已经完成,后面就要发送给百度云来进行识别。

第五章 人脸识别-接入百度智能云平台

5.1 人脸库的创建和管理

本节主要是在“百度云平台”创建一个人脸识别的应用,方便后续Ubuntu与之通信。

主要分成以下三个步骤:

  1. 登录百度云人脸识别平台
  2. 创建人脸识别应用
  3. 创建人脸库

百度云平台:https://cloud.baidu.com/
注意限制:每秒提交到百度智能云平台的次数不能超过两次,免费调用量1000次/月。

图5-1 登录百度云人脸识别平台
图5-2 创建人脸识别应用
图5-3 创建人脸库

5.2 人脸识别SDK环境搭建

  注意到将人脸截图上传到百度云,然后再接收百度云回传的识别信息,从中提取出我们所关心的姓名等信息,整个过程是非常繁琐的,所以百度云贴心的为我们准备了SDK来完成这一系列工作。SDK(Software DeveIopment Kit) 即软件开发工具包,一般是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立的用于应用软件开发的工具集合。本质就是辅助我们做开发的一些工具。

所以本节的主要目的就是下载百度的人脸识别SDK到本地,然后成功在本地调用。

  1. 下载SDK。
  2. 安装依赖库。
  3. 引入SDK头文件"face.h"。

整个过程可以参考官方文档的步骤:

图5-4 安装百度云人脸识别SDK的步骤
见下面“1.下载SDK”

1. 下载SDK

图5-5 下载人脸识别SDK

2. 安装依赖库

  因为百度的SDK中含有一些依赖库,所以下面需要在Ubuntu中安装这些依赖库。其中libcurl就包括了很多网络通信协议如http,openssl包含了网络通信加密相关的东西,jsoncpp包含了解析、提取的过程。安装依赖库:

########################指令速览#########################
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install openssl
sudo apt-get install libjsoncpp-dev
sudo apt-get install libssl-dev # 不安装后续编译会有报错

########################终端演示#########################
lyl@ubuntu:~/桌面$ sudo apt-get install libcurl-dev
[sudo] lyl 的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
虚拟软件包 libcurl-dev 由下面的软件包提供:
  libcurl4-openssl-dev 7.68.0-1ubuntu2.19
  libcurl4-nss-dev 7.68.0-1ubuntu2.19
  libcurl4-gnutls-dev 7.68.0-1ubuntu2.19
请您明确地选择安装其中一个。

E: 软件包 libcurl-dev 没有可安装候选
lyl@ubuntu:~/桌面$ sudo apt-get install libcurl4-openssl-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  libcurl4
建议安装:
  libcurl4-doc libidn11-dev libkrb5-dev libldap2-dev librtmp-dev libssh2-1-dev
  libssl-dev
下列【新】软件包将被安装:
  libcurl4 libcurl4-openssl-dev
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 246 个软件包未被升级。
需要下载 557 kB 的归档。
解压缩后会消耗 2,260 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libcurl4 amd64 7.68.0-1ubuntu2.19 [235 kB]
获取:2 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libcurl4-openssl-dev amd64 7.68.0-1ubuntu2.19 [322 kB]
已下载 557 kB,耗时 1(787 kB/s)            
正在选中未选择的软件包 libcurl4:amd64。
(正在读取数据库 ... 系统当前共安装有 173564 个文件和目录。)
准备解压 .../libcurl4_7.68.0-1ubuntu2.19_amd64.deb  ...
正在解压 libcurl4:amd64 (7.68.0-1ubuntu2.19) ...
正在选中未选择的软件包 libcurl4-openssl-dev:amd64。
准备解压 .../libcurl4-openssl-dev_7.68.0-1ubuntu2.19_amd64.deb  ...
正在解压 libcurl4-openssl-dev:amd64 (7.68.0-1ubuntu2.19) ...
正在设置 libcurl4:amd64 (7.68.0-1ubuntu2.19) ...
正在设置 libcurl4-openssl-dev:amd64 (7.68.0-1ubuntu2.19) ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...
正在处理用于 libc-bin (2.31-0ubuntu9.7) 的触发器 ...
lyl@ubuntu:~/桌面$ dpkg -s libcurl4-openssl-dev
Package: libcurl4-openssl-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 1509
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: same
Source: curl
Version: 7.68.0-1ubuntu2.19
Provides: libcurl-dev, libcurl-ssl-dev, libcurl3-dev, libcurl3-openssl-dev, libcurl4-dev
Depends: libcurl4 (= 7.68.0-1ubuntu2.19)
Suggests: libcurl4-doc, libidn11-dev, libkrb5-dev, libldap2-dev, librtmp-dev, libssh2-1-dev, libssl-dev (>= 1.1), pkg-config, zlib1g-dev
Conflicts: libcurl4-gnutls-dev, libcurl4-nss-dev, libssl-dev (<< 1.1), libssl1.0-dev
Description: development files and documentation for libcurl (OpenSSL flavour)
 libcurl is an easy-to-use client-side URL transfer library, supporting DICT,
 FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S,
 RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP.
 .
 libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP
 form based upload, proxies, cookies, user+password authentication (Basic,
 Digest, NTLM, Negotiate, Kerberos), file transfer resume, http proxy tunneling
 and more!
 .
 libcurl is free, thread-safe, IPv6 compatible, feature rich, well supported,
 fast, thoroughly documented and is already used by many known, big and
 successful companies and numerous applications.
 .
 This package provides the development files (ie. includes, static library,
 manual pages) that allow one to build software which uses libcurl.
 .
 SSL support is provided by OpenSSL.
Homepage: http://curl.haxx.se
Original-Maintainer: Alessandro Ghedini <ghedo@debian.org>


lyl@ubuntu:~/桌面$ sudo apt-get install openssl
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
openssl 已经是最新版 (1.1.1f-1ubuntu2.19)。
openssl 已设置为手动安装。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 246 个软件包未被升级。
lyl@ubuntu:~/桌面$ dpkg -s openssl
Package: openssl
Status: install ok installed
Priority: important
Section: utils
Installed-Size: 1257
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: foreign
Version: 1.1.1f-1ubuntu2.19
Depends: libc6 (>= 2.15), libssl1.1 (>= 1.1.1)
Suggests: ca-certificates
Conffiles:
 /etc/ssl/openssl.cnf fb92a2dab53f11f4f5f22adc5257b553
Description: Secure Sockets Layer toolkit - cryptographic utility
 This package is part of the OpenSSL project's implementation of the SSL
 and TLS cryptographic protocols for secure communication over the
 Internet.
 .
 It contains the general-purpose command line binary /usr/bin/openssl,
 useful for cryptographic operations such as:
  * creating RSA, DH, and DSA key parameters;
  * creating X.509 certificates, CSRs, and CRLs;
  * calculating message digests;
  * encrypting and decrypting with ciphers;
  * testing SSL/TLS clients and servers;
  * handling S/MIME signed or encrypted mail.
Homepage: https://www.openssl.org/
Original-Maintainer: Debian OpenSSL Team <pkg-openssl-devel@lists.alioth.debian.org>


lyl@ubuntu:~/桌面$ sudo apt-get install libjsoncpp-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列【新】软件包将被安装:
  libjsoncpp-dev
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 246 个软件包未被升级。
需要下载 91.1 kB 的归档。
解压缩后会消耗 539 kB 的额外空间。
获取:1 https://mirrors.aliyun.com/ubuntu focal/main amd64 libjsoncpp-dev amd64 1.7.4-3.1ubuntu2 [91.1 kB]
已下载 91.1 kB,耗时 0秒 (295 kB/s)     
正在选中未选择的软件包 libjsoncpp-dev:amd64。
(正在读取数据库 ... 系统当前共安装有 173591 个文件和目录。)
准备解压 .../libjsoncpp-dev_1.7.4-3.1ubuntu2_amd64.deb  ...
正在解压 libjsoncpp-dev:amd64 (1.7.4-3.1ubuntu2) ...
正在设置 libjsoncpp-dev:amd64 (1.7.4-3.1ubuntu2) ...
lyl@ubuntu:~/桌面$ dpkg -s libjsoncpp-dev
Package: libjsoncpp-dev
Status: install ok installed
Priority: extra
Section: libdevel
Installed-Size: 526
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: same
Source: libjsoncpp
Version: 1.7.4-3.1ubuntu2
Depends: libjsoncpp1 (= 1.7.4-3.1ubuntu2)
Description: library for reading and writing JSON for C++ (devel files)
 This package provides all required developer resources like header-files
 and statically linked version of the library.
 .
 jsoncpp is an implementation of a JSON reader and writer in C++. JSON
 (JavaScript Object Notation) is a lightweight data-interchange format
 that it is easy to parse and redeable for human. It is useful for
 building config files, network communications protocols, etc.
 .
 This library provides following features:
 .
 * High-level data structures for collecting data from JSON.
 * Easy-to-use reader and writer.
Homepage: https://github.com/open-source-parsers/jsoncpp
Original-Maintainer: Peter Spiess-Knafl <dev@spiessknafl.at>

lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ sudo apt-get install libssl-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
建议安装:
  libssl-doc
下列【新】软件包将被安装:
  libssl-dev
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 246 个软件包未被升级。
需要下载 1,584 kB 的归档。
解压缩后会消耗 8,010 kB 的额外空间。
获取:1 https://mirrors.aliyun.com/ubuntu focal-security/main amd64 libssl-dev amd64 1.1.1f-1ubuntu2.19 [1,584 kB]
已下载 1,584 kB,耗时 4秒 (404 kB/s)    
正在选中未选择的软件包 libssl-dev:amd64。
(正在读取数据库 ... 系统当前共安装有 173613 个文件和目录。)
准备解压 .../libssl-dev_1.1.1f-1ubuntu2.19_amd64.deb  ...
正在解压 libssl-dev:amd64 (1.1.1f-1ubuntu2.19) ...
正在设置 libssl-dev:amd64 (1.1.1f-1ubuntu2.19) ...
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ dpkg -s libssl-dev
Package: libssl-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 7822
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: same
Source: openssl
Version: 1.1.1f-1ubuntu2.19
Depends: libssl1.1 (= 1.1.1f-1ubuntu2.19)
Suggests: libssl-doc
Conflicts: libssl1.0-dev
Description: Secure Sockets Layer toolkit - development files
 This package is part of the OpenSSL project's implementation of the SSL
 and TLS cryptographic protocols for secure communication over the
 Internet.
 .
 It contains development libraries, header files, and manpages for libssl
 and libcrypto.
Homepage: https://www.openssl.org/
Original-Maintainer: Debian OpenSSL Team <pkg-openssl-devel@lists.alioth.debian.org>

3. 引入SDK头文件"face.h"

  1. 源代码中添加#include "face.h"using namespace aip;
  2. 将base/http.h第23行的 #include <json/json.h>换成 #include <jsoncpp/json/json.h>
  3. 将base/base.h第21行的 #include <json/json.h>换成 #include <jsoncpp/json/json.h>
  4. 此时应该可以正常编译。
//终端编译指令/
g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
#include "face.h"
using namespace std;
using namespace cv;
using namespace aip;
int main() {
    // 打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    
    /显示视频-开始/
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    // 加载人脸的模型文件(-lopencv_objdetect)
    CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
    vector<Rect> face_all; // 存储所有脸的方框列表
    Mat img_face_shot;     // 存储人脸截图
    vector<uchar> img_face_jpg; // 存储.jpg格式的人脸截图
    for(;;) {
        cap >> img_color;                                   // 1.获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);  // 2.将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql);                    // 3.直方图均衡化(-lopencv_imgproc)
        Classifier.detectMultiScale(img_eql, face_all);     // 4.人脸检测
        if(face_all.size()) {
            // 5.框出所有的人脸
            for(int i=0; i<face_all.size(); i++) {                  // 该for循环兼顾判断是否存在方框
                rectangle(img_eql, face_all[i], Scalar(0,255,255)); // 将所有脸的方框都显示出来
                // 注意添加颜色时,Scalar的顺序是BGR
            }
            // 6.将人脸截图保存成jpg格式
            img_face_shot = img_eql(face_all[0]);
            imencode(".jpg", img_face_shot, img_face_jpg);// 编译时加上-lopencv_imgcodecs
        }

        
        imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    /显示视频-结束/
    
    return 0;
}

下面是我在开发过程中的终端实际操作:

lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp 
#################################
# 将上面的新代码拷贝到main.cpp中
#################################
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp
In file included from base/base.h:20,
                 from face.h:19,
                 from main.cpp:3:
base/http.h:23:10: fatal error: json/json.h: 没有那个文件或目录
   23 | #include <json/json.h>
      |          ^~~~~~~~~~~~~
compilation terminated.
# 将base/http.h第23行的#include <json/json.h>换成#include <jsoncpp/json/json.h>
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp
In file included from face.h:19,
                 from main.cpp:3:
base/base.h:21:10: fatal error: json/json.h: 没有那个文件或目录
   21 | #include "json/json.h"
      |          ^~~~~~~~~~~~~
compilation terminated.
# 将base/base.h第21行的#include <json/json.h>换成#include <jsoncpp/json/json.h>
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ ./main
Camera open success.
^C

现在就可以直接使用百度中的代码了。

5.3 百度智能云平台接入

本节主要是 新建client客户端 用于和百度云交互。下面的代码主要参考了上述百度云C++ SDK官方文档的示例代码。

天坑奥:人脸搜索函数face_search_v3第四个参数应该是aip::json_null,而不是代码示例中给的aip::null,否则在编译时会报错。

//终端编译指令/
g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
#include "face.h"
using namespace std;
using namespace cv;
using namespace aip;
int main() {
    // 打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    // 新建与百度云通信的客户端
    // 设置APPID/AK/SK,在刚刚创建的百度云人脸识别应用中复制下来即可
    std::string app_id = "39837794";
    std::string api_key = "feHHZyllLWoo0pidqVraCaol";
    std::string secret_key = "zLAaFUqs2IZ8GHtqVsGFlvby4pWI8wP6";
    aip::Face client(app_id, api_key, secret_key);

    /显示视频-开始/
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    // 加载人脸的模型文件(-lopencv_objdetect)
    CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
    vector<Rect> face_all; // 存储所有脸的方框列表
    Mat img_face_shot;     // 存储人脸截图
    vector<uchar> img_face_jpg; // 存储.jpg格式的人脸截图
    string img_face_base64;     // 存储BASE64格式的人脸截图
    Json::Value result; // 存储百度云返回的信息
    for(;;) {
        cap >> img_color;                                   // 1.获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);  // 2.将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql);                    // 3.直方图均衡化(-lopencv_imgproc)
        Classifier.detectMultiScale(img_eql, face_all);     // 4.人脸检测
        if(face_all.size()) {
            // 5.框出所有的人脸
            for(int i=0; i<face_all.size(); i++) {                  // 该for循环兼顾判断是否存在方框
                rectangle(img_eql, face_all[i], Scalar(0,255,255)); // 将所有脸的方框都显示出来
                // 注意添加颜色时,Scalar的顺序是BGR
            }
            // 6.将人脸截图保存成jpg格式
            img_face_shot = img_eql(face_all[0]);
            imencode(".jpg", img_face_shot, img_face_jpg);// 编译时加上-lopencv_imgcodecs

            // 将jpg格式转换成百度云支持的BASE64格式
            img_face_base64 = base64_encode((char *)img_face_jpg.data(), img_face_jpg.size());
            // 调用百度云1:N人脸搜索
            result = client.face_search_v3(img_face_base64, "BASE64", "my_test", aip::json_null);
            cout << result << endl;
        }

        
        imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    /显示视频-结束/
    
    return 0;
}

下面是我在开发过程中的终端实际操作:

lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp 
###########################################
# 更新代码但是face_search_v3的第四个参数为aip:null
###########################################
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp -std=c++11
main.cpp: In function ‘int main()’:
main.cpp:59:87: error: cannot convert ‘const std::map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >’ to ‘const Json::Value&59 | nt.face_search_v3(img_face_base64, "BASE64", "my_test", aip::null);
      |                                                         ~~~~~^~~~
      |                                                              |
      |                                                              const std::map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >

In file included from main.cpp:3:
face.h:635:33: note:   initializing argument 4 of ‘Json::Value aip::Face::face_search_v3(const string&, const string&, const string&, const Json::Value&)635 |             const Json::Value & options)
      |             ~~~~~~~~~~~~~~~~~~~~^~~~~~~
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp 
###########################################
# 更新代码,face_search_v3的第四个参数为aip:json_null
###########################################
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp -std=c++11
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ ./main
Camera open success.
{
	"cached" : 0,
	"error_code" : 0,
	"error_msg" : "SUCCESS",
	"log_id" : 2434230510,
	"result" : 
	{
		"face_token" : "e494f1b0ed493b6d680f9de1bda39b9a",
		"user_list" : 
		[
			{
				"group_id" : "my_test",
				"score" : 90.982292175292997,
				"user_id" : "humu",
				"user_info" : ""
			}
		]
	},
	"timestamp" : 1695462034
}
{
	"cached" : 0,
	"error_code" : 222202,
	"error_msg" : "pic not has face",
	"log_id" : 2983155634,
	"result" : null,
	"timestamp" : 1695462583
}
# 很多其他的返回就不显示了
^C

第六章 解析人脸识别数据

上一小节最后可以看到百度云返回的信息,本章则来拆解这个数据包,从中提取出“相似度score”和“姓名user_id”。但需要说明的是,由于OpenCV可能会误判人脸,所以可能上传给没有意义的截图给百度云,百度云接收到截图后也会先进行一下人脸检测,发现没有人脸时会返回“pic not has face”。所以本节要做的内容:

  1. Json数据解析。百度云返回“pic not has face”或者相似度小于80%时,不打印信息。
  2. Linux系统时间获取。
  • time(NULL)所返回的时间是从1970年1月1日0时0分0秒开始,到现在的总秒数。
  • ctime(&sec)则可以将该总秒数转换成年月日时分秒,返回的格式类似于 “Wed Jun 30 21:49:08 2021\n” 的格式,表示星期、月份、日期、时间和年份。
  1. 考勤信息记录。直接使用输出重定向>>指令,将终端输出内容写入到文件中./main >> log.txt
  2. 将“姓名-时间”信息添加到图像上。用到“putText方法”。
  • 在OpenCV2.4.9中,“putText方法”在“core. The Core Functionality”中。
  • 在OpenCV4.2.0中,“putText方法”在“imgproc. Image Processing”中的“Drawing Functions”里。

注:解析数据包时用到的是jsoncpp库中的方法。

于是便有下面的代码:

//终端编译指令/
g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
#include "face.h"
using namespace std;
using namespace cv;
using namespace aip;
int main() {
    // 打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    // 新建与百度云通信的客户端
    // 设置APPID/AK/SK,在刚刚创建的百度云人脸识别应用中复制下来即可
    std::string app_id = "39837794";
    std::string api_key = "feHHZyllLWoo0pidqVraCaol";
    std::string secret_key = "zLAaFUqs2IZ8GHtqVsGFlvby4pWI8wP6";
    aip::Face client(app_id, api_key, secret_key);

    /显示视频-开始/
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    // 加载人脸的模型文件(-lopencv_objdetect)
    CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
    vector<Rect> face_all;      // 存储所有脸的方框列表
    Mat img_face_shot;          // 存储人脸截图
    vector<uchar> img_face_jpg; // 存储.jpg格式的人脸截图
    string img_face_base64;     // 存储BASE64格式的人脸截图
    Json::Value result;         // 存储百度云返回的信息
    time_t sec;                 // 存储当前系统时间(总秒数)
    for(;;) {
        cap >> img_color;                                   // 1.获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);  // 2.将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql);                    // 3.直方图均衡化(-lopencv_imgproc)
        Classifier.detectMultiScale(img_eql, face_all);     // 4.人脸检测
        if( face_all.size() ) {
            // 5.框出所有的人脸
            for(int i=0; i<face_all.size(); i++) {                  // 该for循环兼顾判断是否存在方框
                rectangle(img_eql, face_all[i], Scalar(0,255,255)); // 将所有脸的方框都显示出来
                // 注意添加颜色时,Scalar的顺序是BGR
            }
            // 6.将人脸截图保存成jpg格式
            img_face_shot = img_eql(face_all[0]);
            imencode(".jpg", img_face_shot, img_face_jpg);// 编译时加上-lopencv_imgcodecs

            // 7.将jpg格式转换成百度云支持的BASE64格式
            img_face_base64 = base64_encode((char *)img_face_jpg.data(), img_face_jpg.size());
            // 8.调用百度云1:N人脸搜索
            result = client.face_search_v3(img_face_base64, "BASE64", "my_test", aip::json_null);
            
            // 9.提取识别到的人名,并将信息添加到屏幕上
            if( !result["result"].isNull() && result["result"]["user_list"][0]["score"].asInt() > 80 ) {
                // 输出姓名和时间
                cout << result["result"]["user_list"][0]["user_id"] << " ";
                sec = time(NULL);
                cout << ctime(&sec) << endl; // 将总秒数转换成年月日时分秒输出

                // 在图像上添加名字、时间
                putText(img_eql,
                        result["result"]["user_list"][0]["user_id"].asString(),//要添加的内容
                        Point(0,50),          // 添加的位置
                        FONT_HERSHEY_SIMPLEX, // 字体
                        1.2,                  // 字号
                        Scalar(255,255,255)); // 颜色
                putText(img_eql,
                        ctime(&sec),//要添加的内容
                        Point(0,100),         // 添加的位置
                        FONT_HERSHEY_SIMPLEX, // 字体
                        1.2,                  // 字号
                        Scalar(255,255,255)); // 颜色
            }
        }

        imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    /显示视频-结束/
    
    return 0;
}
图6-1 最终实现效果

后记1:优化显示

显然黑白显示太丑,于是下面来优化代码:

  1. 图像优化。将图像变成彩色显示。
  2. 方框优化。将其加粗,并视其为黄色,至于是BGR格式。
  3. 显示信息优化。添加的信息跟随方框显示、调整格式为“年-月-日 时:分:秒”、调整字符(加粗、缩小)。
  4. 逻辑优化。时间调用只出现依次,而不是“向终端写入”和“图像显示信息”这两个过程分别获取一次时间。

未实现:多人脸识别。

//终端编译指令/
g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp

//cpp源代码/
#include <iostream>
#include "opencv2/opencv.hpp"
#include "face.h"
using namespace std;
using namespace cv;
using namespace aip;

// 获取当前的时间,并返回格式为“年-月-日 时:分:秒”的字符串
std::string GetTime(void) {
    time_t sec;                 // 存储当前系统时间(总秒数)
    std::string time_info;      // 存储完整的时间信息
    std::string time_display;   // 存储提取好的时间信息
    std::string month;          // 存储月份
    // 下面开始切割字符
    sec = time(NULL);
    time_info = ctime(&sec);
    time_display = time_info.substr(20,4);//年
    time_display.append("-");
    //月
    month = time_info.substr(4,3);
    if(month == "Jan")      time_display.append("01");
    else if(month == "Feb") time_display.append("02");
    else if(month == "Mar") time_display.append("03");
    else if(month == "Apr") time_display.append("04");
    else if(month == "May") time_display.append("05");
    else if(month == "Jun") time_display.append("06");
    else if(month == "Jul") time_display.append("07");
    else if(month == "Aug") time_display.append("08");
    else if(month == "Sep") time_display.append("09");
    else if(month == "Oct") time_display.append("10");
    else if(month == "Nov") time_display.append("11");
    else if(month == "Dec") time_display.append("12");
    else time_display.append("err");
    time_display.append("-");
    time_display.append(time_info, 8, 11);//日时分秒
    return time_display;
}


int main() {
    // 打开摄像头
    //VideoCapture cap(0);
    VideoCapture cap(0, cv::CAP_V4L2);  // 打开(默认的)摄像头0(编译时加上-lopencv_videoio)
    if(!cap.isOpened()) {               // 检查摄像头是否成功打开
        cout << "Camera open failed!" << endl;
        return -1;
    }
    cout << "Camera open success." << endl;

    // 新建与百度云通信的客户端
    // 设置APPID/AK/SK,在刚刚创建的百度云人脸识别应用中复制下来即可
    std::string app_id = "39837794";
    std::string api_key = "feHHZyllLWoo0pidqVraCaol";
    std::string secret_key = "zLAaFUqs2IZ8GHtqVsGFlvby4pWI8wP6";
    aip::Face client(app_id, api_key, secret_key);

    /显示视频-开始/
    Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)
    Mat img_gray;  // 定义灰度图
    Mat img_eql;   // 定义直方图均衡化后的灰度图
    // 加载人脸的模型文件(-lopencv_objdetect)
    CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
    vector<Rect> face_all;      // 存储所有脸的方框列表
    Mat img_face_shot;          // 存储人脸截图
    vector<uchar> img_face_jpg; // 存储.jpg格式的人脸截图
    string img_face_base64;     // 存储BASE64格式的人脸截图
    Json::Value result;         // 存储百度云返回的所有信息
    std::string res_name;       // 存储百度云返回信息中的人名信息
    std::string time_display;   // 存储提取好的时间信息
    for(;;) {
        cap >> img_color;                                   // 1.获取一帧彩色图像
        cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);  // 2.将彩图转换成灰度图(-lopencv_imgproc)
        equalizeHist(img_gray, img_eql);                    // 3.直方图均衡化(-lopencv_imgproc)
        Classifier.detectMultiScale(img_eql, face_all);     // 4.人脸检测
        if( face_all.size() ) {
            // 5.框出所有的人脸
            for(int i=0; i<face_all.size(); i++) {                     // 该for循环兼顾判断是否存在方框
                rectangle(img_color, face_all[i], Scalar(0,255,255), 2); // 将所有脸的方框都显示出来
                // 注意添加颜色时,Scalar的顺序是BGR
            }
            // 6.将人脸截图保存成jpg格式
            img_face_shot = img_eql(face_all[0]);
            imencode(".jpg", img_face_shot, img_face_jpg);// 编译时加上-lopencv_imgcodecs

            // 7.将jpg格式转换成百度云支持的BASE64格式
            img_face_base64 = base64_encode((char *)img_face_jpg.data(), img_face_jpg.size());
            // 8.调用百度云1:N人脸搜索
            result = client.face_search_v3(img_face_base64, "BASE64", "my_test", aip::json_null);
            
            // 9.提取识别到的人名,并将信息添加到屏幕上
            if( !result["result"].isNull() ) { // 百度云返回结果不能为空
                if( result["result"]["user_list"][0]["score"].asInt() > 80 ) { // 人脸匹配程度应该大于80%
                    res_name = result["result"]["user_list"][0]["user_id"].asString();  // 获取人名
                    time_display = GetTime();                                           // 获取时间
                    cout << res_name << " ";  // 输出人名到日志
                    cout << time_display;     // 输出时间到日志,注意time_display最后自带\n
                    
                    // 添加名字到屏幕
                    putText(img_color,
                            res_name,             //要添加的内容
                            Point(face_all[0].x, face_all[0].y-50), // 添加的位置
                            FONT_HERSHEY_SIMPLEX, // 字体
                            0.8,                  // 字号
                            Scalar(255,255,255),  // 颜色
                            2);                   // 粗细
                    // 添加时间到屏幕
                    putText(img_color,
                            time_display,         //要添加的内容
                            Point(face_all[0].x, face_all[0].y-20), // 添加的位置
                            FONT_HERSHEY_SIMPLEX, // 字体
                            0.8,                  // 字号
                            Scalar(255,255,255) , // 颜色
                            2);                   // 粗细
                }
            }
        }

        
        imshow("video", img_color); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)
        waitKey(50);              // 等待50ms(20fps)
    }
    /显示视频-结束/
    
    return 0;
}

下面是我在开发过程中的终端实际操作:

lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp 
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ ./main >> log.txt
^C
图1 优化后的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Numpy科学计算基础库--numpy基础知识

对数组执行数学运算和逻辑运算时&#xff0c;Numpy 是非常有用的。在用 Python 对 n 维数组和矩阵进行运算时&#xff0c;Numpy 库提供了大量有用特征。Numpy 库数组有两种形式&#xff1a;向量和矩阵。严格地讲&#xff0c;向量是一维数组&#xff0c;矩阵是多维数组。在某些情…

Redis-数据过期策略

数据过期策略 惰性删除策略优点&#xff1a;对cpu比较友好&#xff0c;在用到该key的时候才去进行判断&#xff0c;对于很多用不到key不用浪费时间去检查是否过期缺点&#xff1a;对内存不友好&#xff0c;如果一个key过期了&#xff0c;但是我们又一直没有用到该key&#xff0…

基于YOLOv8的安全帽检测系统(4):EMA基于跨空间学习的高效多尺度注意力、效果优于ECA、CBAM、CA,助力行为检测 | ICASSP2023

目录 1.Yolov8介绍 2.安全帽数据集介绍 3.EMA介绍 4.训练结果分析 5.系列篇 1.Yolov8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它建立在先前YOLO…

Win11 安装 Vim

安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Ru7HhTSotz9mteHug-Yhpw?pwd6666 提取码&#xff1a;6666 双击安装包&#xff0c;一直下一步。 配置环境变量&#xff1a; 先配置系统变量中的path&#xff1a; 接着配置用户变量&#xff1a; 在 cmd 中输入…

MySQL 事务隔离级别与锁机制详解

目录 一、前言二、事务及其ACID属性三、并发事务处理带来的问题四、事务隔离级别4.1、隔离级别分类4.2、查看当前数据库的事务隔离级别:4.3、临时修改数据库隔离级别&#xff08;重启MySQL后恢复到配置中的级别&#xff09; 五、表数据准备六、MySQL常见锁介绍5.1、锁分类5.2、…

【网络安全 --- XSS漏洞利用实战】你知道如何利用XSS漏洞进行cookie获取,钓鱼以及键盘监听吗?--- XSS实战篇

一&#xff0c;XSS 实战 以pikachu靶场为例 1-1 盗取cookie 过程&#xff1a;想要盗取别人的cookie信息的话有一个前提条件&#xff0c;就是你应该在别人触发你的xss攻击时&#xff0c;你的代码应该将收集的cookie信息发送给你的平台来接收&#xff0c;这样才获取到了数据 …

图的广度遍历-邻接矩阵实现

description 本题要求实现邻接矩阵存储图的广度优先遍历。 函数接口定义&#xff1a; void BFS(MGraph G,Vertex i); 其中MGraph是邻接矩阵存储的图&#xff0c;定义如下&#xff1a; #define MaxVertexNum 10 /定义最大顶点数/ typedef int Vertex;/* 用顶点下标表示顶点,…

1799_GNU pdf阅读器evince_windows系统下编译尝试

全部学习汇总&#xff1a; GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 从网上下载下来了evince的代码&#xff0c;尝试做一个windows下的编译。 这应该是autotools的构建系统&#xff0c;先尝试运行confi…

java做个qq机器人

前置的条件 机器人是基于mirai框架实现的。根据官方的文档&#xff0c;建议使用openjdk11。 我这里使用的编辑工具是idea2023 在idea中新建一个maven项目&#xff0c;虽然可以使用gradle进行构建&#xff0c;不过我这里由于网络问题没有跑通。 pom.xml <dependency>&l…

提示msvcp140.dll丢失的5个解决方法,msvcp140.dll丢失问题全面分析

在我们的日常生活和工作中&#xff0c;电脑已经成为不可或缺的工具。然而&#xff0c;在使用电脑的过程中&#xff0c;我们经常会遇到各种问题&#xff0c;其中就包括提示 msvcp140.dll 丢失的问题。msvcp140.dll 是 Visual C Redistributable for Visual Studio 2015 的运行时…

堆--数组中第K大元素

如果对于堆不是太认识&#xff0c;请点击&#xff1a;堆的初步认识-CSDN博客 解题思路&#xff1a; /*** <h3>求数组中第 K 大的元素</h3>* <p>* 解体思路* <ol>* 1.向小顶堆放入前k个元素* 2.剩余元素* 若 < 堆顶元素, 则略过* …

SM5308 2.1A 充电 2.4 A 放电高集成度移动电源 SOC 可替代IP5306

SM5308 是一款集成升压转换器、锂电池充电管理、电池电量指示的多功能电源管理 SOC&#xff0c;为移动电源 提供完整的电源解决方案。 SM5308 的高集成度与丰富功能,使其在应用时仅需极少的外围器件,并有效减小整体方案的尺寸&#xff0c; 降低 BOM 成本。 SM5308 只需一个电…

竞赛选题 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

1797_GNU pdf阅读器evince

全部学习汇总&#xff1a; GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 近段时间经历了很多事情&#xff0c;终于想找一点技术上的自由气氛。或许&#xff0c;没有什么比GNU的一些软件探索更适合填充这样的…

千禧辣妹风穿搭必备——轻律U1头戴式耳机百搭不出错

千禧辣妹风的打造方法十分多样。我们可以在衣服造型多变&#xff0c;还可以在饰品上改造&#xff0c;从而打造出一种随性&#xff0c;辣妹炸眼的格调。特别是头戴式耳机很适合我们去塑造属于自己的千禧辣妹Y2K的美感&#xff0c;轻律umelody U1采用棕银配色&#xff0c;光是外观…

二叉树的遍历方式和代码

二叉树的三种遍历和代码 1.前序遍历2.中序遍历3.后序遍历4.三种遍历方式的代码实现 1.前序遍历 学习二叉树结构&#xff0c;最简单的方式就是遍历。所谓遍历(Traversal)是指沿着某条搜索路线&#xff0c;依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具…

如何使用 Bing Image Creator 创建图像(DALL-E3)

Bing Image Creator 是一个由微软开发的人工智能图像生成工具&#xff0c;可以根据用户的文字描述生成逼真的图像。该工具使用了 OpenAI 的 DALL-E 3 模型&#xff0c;可以生成各种各样的图像&#xff0c;包括人物、动物、场景、物体等。 使用 Bing Image Creator 创建图像 要…

VUE3照本宣科——路由与状态管理器

VUE3照本宣科——路由与状态管理器 前言一、路由&#xff08;router&#xff09;1.createRouter2.router-link3.router-view4.useRoute5.useRouter6.路由守卫7.嵌套路由 二、状态管理器&#xff08;Pinia&#xff09;1.定义Store&#xff08;1&#xff09;Option Store&#x…

用Python操作PPT的办公自动化教程

PPT通过其精美的可视化技巧以及良好的演示效果&#xff0c;成为了职场人士的必备技能。PPT的设计是一门大学问&#xff0c;无论是设计技巧&#xff0c;还是操作方法&#xff0c;都衍生出了专门的课程。 主要介绍Python操作PPT的技巧&#xff0c;编程的优势在于处理速度&#x…

李沐深度学习记录4:12.权重衰减/L2正则化

权重衰减从零开始实现 #高维线性回归 %matplotlib inline import torch from torch import nn from d2l import torch as d2l#整个流程是&#xff0c;1.生成标准数据集&#xff0c;包括训练数据和测试数据 # 2.定义线性模型训练 # 模型初始化&#xff08;函…