当前位置: 首页 > news >正文

[GazeTracking] 依赖项管理 | Docker化执行环境

第4章:依赖项管理

欢迎回来

在第3章:视线数据获取中,我们学会了如何从GazeTracking侦探那里获取有价值的信息,比如用户是在向左看还是向右看,或者瞳孔的精确坐标。

但想象一下,刚为车购置了一套精美的新工具包,里面有扳手、螺丝刀和各种小工具。然而在开始修理前,需要确认工具箱里是否备齐了所有正确的工具。万一缺少关键扳手怎么办?根本无法工作!

我们的GazeTracking项目也是如此。它基于Python构建,但高度依赖其他专业软件"工具"(称为)来实现其魔法。例如:

  • OpenCV(开源计算机视觉库):用于摄像头交互和图像显示
  • Dlib:用于稳健的人脸和眼睛检测
  • NumPy:高效处理数值数据和图像数组

没有这些特定工具,GazeTracking根本无法运行,就像试图不用锤子建造房屋

本章将全面介绍依赖项管理。这是确保GazeTracking项目拥有正常运行所需外部工具和Python库的过程,它定义了需要什么,并提供安装这些内容的指导或配置。

核心概念:备齐所有工具

依赖项管理主要解决一个问题:当你获取像GazeTracking这样的Python项目时,如何自动获取它运行所需的其他软件组件。

可以将其视为食谱的食材清单:

  1. 食谱:你的GazeTracking项目代码
  2. 食材清单:列出GazeTracking所需所有其他Python库的特殊文件
  3. 厨师助手:像pipconda这样的"包管理器",读取食材清单并为你获取所有内容

没有食材,食谱就无法烹饪

关键概念

让我们分解依赖项管理的核心概念。

什么是依赖项?

在编程中,依赖项就是项目运行所需的其他软件。如果GazeTracking使用OpenCV的函数来读取摄像头,那么OpenCV就是GazeTracking的依赖项。

包管理器:你的厨师助手

手动为每个项目下载安装每个库将是场噩梦。包管理器应运而生,它们是自动化安装、更新和删除软件包(库)的工具。Python最常用的两个包管理器是:

  • pip:Python的标准包安装工具,从Python包索引(PyPI)获取包
  • conda:强大的包和环境管理器,常用于数据科学,可管理Python之外的包(如Dlib本身)

食材清单:requirements.txtenvironment.yml

项目通常包含特殊文件来告知包管理器需要什么。

  • requirements.txt(用于pip:简单的文本文件,列出pip需要安装的所有Python包及其特定版本,就像pip的购物清单。

    # requirements.txt简化内容
    numpy==1.16.1
    opencv-python>=3.4.0
    dlib==19.17.*
    

    每行告诉pip要获取哪个库及版本要求。==表示"精确此版本",>=表示"此版本或更新"。

  • environment.yml(用于conda:类似但用于conda的文件,描述完整的conda环境,包括Python版本、所需包及查找位置(称为"channels"),让conda为项目创建隔离的"工作间"。

    # environment.yml简化内容
    name: GazeTracking
    channels:- conda-forge- anaconda- defaults
    dependencies:- numpy == 1.16.1- opencv == 3.4.*- dlib == 19.17.*
    

    此文件不仅列出包,还指定channels(包查找位置)和环境的nameGazeTracking),有助于保持项目隔离。

获取工具:安装依赖项

让我们看看下载GazeTracking后,如何实际使用这些文件和包管理器使其运行。

首先通常从GitHub克隆项目,即下载所有文件:

git clone https://github.com/antoinelame/GazeTracking.git
cd GazeTracking

进入项目文件夹后,就可以安装工具了。

方法1:使用piprequirements.txt

如果使用pip(大多数Python设置的常用选择),将使用requirements.txt文件。

  1. 阅读requirements.txtGazeTracking项目的requirements.txt文件(如上所示)列出numpyopencv-pythondlib

  2. pip安装:打开终端或命令提示符,导航到GazeTracking项目文件夹,运行:

    pip install -r requirements.txt
    
    • pip install:告诉pip安装包
    • -r:表示"需求文件"
    • requirements.txtpip应读取以了解安装内容的文件

    接下来发生什么? pip读取文件,访问互联网上的Python包索引(PyPI),下载每个指定库并安装到计算机。你会看到大量文本滚动,显示获取和安装过程。

    关于Dlib的特殊说明GazeTrackingREADME.md提到Dlib(人脸和眼睛检测的关键依赖项)还有自己的外部系统先决条件如BoostCMakepip会安装Dlib的Python封装,但你可能需要先安装这些底层系统工具,pip才能成功构建Dlib。README.md提供了此步骤的详细链接。对初学者来说,这可能是最棘手的部分,但很重要。

方法2:使用condaenvironment.yml

如果偏好conda(通常在你需要更多环境控制或特定库版本时使用),将使用environment.yml文件。

  1. 阅读environment.ymlGazeTracking项目的environment.yml文件(如上所示)列出numpyopencvdlib及特定channels。

  2. 创建并激活环境:从项目文件夹运行这两个命令:

    conda env create --file environment.yml
    conda activate GazeTracking
    
    • conda env create --file environment.yml:告诉conda读取environment.yml文件,然后创建名为"GazeTracking"的全新隔离Python环境(如environment.yml文件所指定),并将所有列出的依赖项安装到该特定环境中。
    • conda activate GazeTracking:创建后需要"激活"此环境,确保运行Python时使用"GazeTracking"环境中安装的库,而非计算机上的其他版本。命令提示符通常会显示活动环境(如(GazeTracking) $)。

    接下来发生什么? conda从其channels获取包,创建隔离环境并安装所有内容。激活环境会设置shell使用该环境。

验证安装

使用pipconda安装依赖项后,可通过运行项目示例脚本来验证一切是否正常:

python example.py

如果所有依赖项正确安装,你应该能看到摄像头画面,GazeTracking项目会在画面上绘制并告诉你视线方向

底层原理:计算机如何获取工具

快速可视化运行安装命令时发生的情况。

在这里插入图片描述

  1. 你给出命令:告诉计算机"用pip(或conda)安装GazeTracking项目的依赖项"
  2. 计算机读取清单:包管理器(如pip)查看requirements.txt文件(或condaenvironment.yml),了解需要哪些库和版本
  3. 计算机获取包:连接到在线软件仓库(如pip的PyPI,或conda的各种channels),这些就像装满软件包的巨大在线商店
  4. 下载包:包管理器下载实际的库文件
  5. 安装包:最后将这些下载的文件安装到Python设置(或conda环境)中,使GazeTracking项目可以使用它们

整个过程确保运行GazeTracking时,所有import语句(如import cv2from gaze_tracking import GazeTracking)都能找到执行所需的代码。

总结

本章学习了依赖项管理,这是设置任何软件项目的关键概念。你现在理解了什么是依赖项、它们为何重要,以及像带requirements.txtpip或带environment.ymlconda等工具如何帮助你轻松安装GazeTracking项目运行所需的所有外部库。通过正确管理依赖项,你确保项目的"工具箱"完整且随时可用。

既然已经知道如何获取项目工具,接下来让我们探索如何设置一致且隔离的环境来在任何地方运行GazeTracking。下一章将深入**Docker化执行环境**


第5章:Docker化执行环境

在前几章中,我们已经逐步构建了GazeTracking项目:

  • 在第1章:摄像头交互与显示中,我们学习了GazeTracking如何获取"眼睛"和"声音"
  • 在第2章:视线追踪核心逻辑中,我们探索了其分析视线的"大脑"
  • 在第3章:视线数据获取中,你掌握了从视线数据中获取洞察的技巧
  • 在第4章:依赖项管理中,我们确保所有必要的Python"工具"(库)都已安装

现在,假设已成功在计算机上安装了GazeTracking的所有依赖项,它运行完美。

当朋友想尝试时,或你想在新电脑上运行时,突然面临挑战:“朋友的系统不同”、“新电脑的Python版本不同”、"Dlib在这台机器上编译失败!"这是软件开发中的经典问题:“在我机器上能运行!”

本章介绍Docker化执行环境

这个强大概念通过创建完全自包含、可移植的"盒子"来解决"在我机器上能运行"问题,这个盒子包含整个GazeTracking应用及其所有操作系统和Python依赖项。想象它是一个**“便携实验室”**:GazeTracking运行所需的一切都整齐打包其中,因此可以在任何兼容系统上一致部署和运行,无论本地设置如何。它甚至能连接物理摄像头和图形显示

专栏传送:Docker & yaml配置

核心概念:项目的便携实验室

Docker化执行环境主要解决一致性部署便捷性问题。无需在新机器上手动安装依赖项、配置操作系统设置和调试版本冲突,Docker让你将所有内容打包成单一单元

类比说明:将GazeTracking想象为植物。

  • 不用Docker时,你可能直接将它种在花园(你的电脑)里。花园的土壤、气候和其他植物可能与朋友的不同,因此生长状况可能不同
  • 使用Docker时,你创建完美定制的花盆(Docker镜像),包含植物所需的确切土壤、养分和微气候。然后可以将这个盆栽运到任何地方!到达后,它被放入温室(Docker容器)中,在理想环境中继续茁壮成长,完全独立于宿主系统的花园

GazeTracking而言,这个"花盆"包含:

  • 基础操作系统(如Ubuntu)
  • 所有系统级库(如OpenCV和Dlib所需)
  • Python及其包管理器(pip)
  • 所有Python依赖项(numpyopencv-pythondlib)
  • 最后是GazeTracking项目代码本身

关键概念

让我们分解Docker的核心组件。

  • 专栏传送:Docker & yaml配置

1. Dockerfile:实验室的配方

Dockerfile是包含一系列指令的简单文本文件。这些指令告诉Docker如何构建"便携实验室"(镜像)。就像烘焙蛋糕的食谱——列出所有原料和组合步骤。

GazeTrackingDockerfile指定:

  • 使用什么基础操作系统
  • 安装哪些系统工具(如cmakelibsm6)
  • 安装哪个Python版本
  • 如何将GazeTracking代码复制到实验室
  • 如何使用pip安装所有Python依赖项(如第4章:依赖项管理所述)

2. Docker镜像:盆栽植物

Docker镜像是实际的"花盆"或应用环境的完整蓝图。它是包含所有内容的只读模板,准备运行。你从Dockerfile构建镜像。

3. Docker容器:运行的温室

Docker容器是Docker镜像的运行实例。是"盆栽植物"(镜像)实际运行的"温室"。你可以启动、停止、移动或删除容器。每个容器与主计算机系统隔离,但可配置为共享摄像头或显示等资源。

4. 连接硬件(摄像头和显示)

这对GazeTracking至关重要,因为它需要访问物理摄像头和计算机屏幕来显示视频流。默认情况下,Docker容器是隔离的。因此,要让GazeTracking看到摄像头并在屏幕上显示输出,我们需要明确告诉Docker容器与宿主计算机共享这些资源。

如何用Docker运行GazeTracking

GazeTracking项目提供Dockerfile和辅助脚本build_and_run.sh简化此过程。通常需要执行两个主要操作:

  1. 构建Docker镜像:基于Dockerfile配方创建"便携实验室"
  2. 运行Docker容器:在此实验室中启动GazeTracking应用,连接摄像头和显示

让我们看看自动执行这些步骤的build_and_run.sh脚本。

步骤1:授予显示访问权限

运行Docker容器前,特别是需要显示图形界面(如GazeTracking显示视频)时,需要授予Docker容器使用计算机显示的权限。通过xhost命令实现。

xhost local:root

作用:此命令开放X服务器(管理图形显示的系统),允许本地机器的root用户(Docker内部常用)连接。就像临时解锁门让Docker容器在屏幕上显示窗口。通常在启动容器前运行一次。

步骤2:构建或重用Docker镜像

build_and_run.sh脚本首先检查名为gaze-tracking的Docker镜像是否存在。若不存在则构建。

docker build -t gaze-tracking .
  • docker build:告诉Docker创建镜像
  • -t gaze-tracking:为镜像分配"标签"或名称(gaze-tracking),便于后续引用
  • .:告诉Docker在当前目录查找Dockerfile

作用:Docker逐步读取Dockerfile。下载基础操作系统(Ubuntu),安装必要软件,复制GazeTracking代码,安装Python依赖项。此过程只需执行一次,或修改Dockerfile/requirements.txt时执行。

步骤3:运行Docker容器

构建镜像后,脚本运行容器。这里是连接摄像头和显示的关键。

docker run --rm --device /dev/video0 \-e DISPLAY=${DISPLAY} \-v /tmp/.X11-unix:/tmp/.X11-unix \--env="QT_X11_NO_MITSHM=1" \-it gaze-tracking bash

解析重要docker run选项:

  • docker run:从镜像启动新容器
  • --rm:容器停止后自动删除,适合临时运行
  • --device /dev/video0:**摄像头访问关键!**将容器连接到物理摄像头设备(Linux系统通常位于/dev/video0)
  • -e DISPLAY=${DISPLAY}:**显示访问关键!**将当前DISPLAY环境变量从宿主系统传入容器,告知应用图形输出的位置
  • -v /tmp/.X11-unix:/tmp/.X11-unix:**显示访问另一关键!**将宿主系统的/tmp/.X11-unix目录"挂载"到容器中,此目录包含与X服务器(显示管理器)通信的文件
  • --env="QT_X11_NO_MITSHM=1":设置环境变量,防止图形问题(尤其Qt应用,OpenCV有时会使用)
  • -it:组合-i(交互)和-t(伪终端),允许通过命令行与容器交互
  • gaze-tracking:要运行的Docker镜像名称
  • bash:告诉容器启动bash shell。进入容器shell后,可导航到GazeTracking项目目录(cd /home/GazeTracking)并运行python3 example.py

作用:Docker基于gaze-tracking镜像启动新容器。精心建立与摄像头和显示的连接,确保GazeTracking在容器内运行时,行为与直接在计算机上运行完全一致,且所有依赖项保证正确。

底层原理:Docker构建与运行流程

可视化从构建镜像到运行容器并看到GazeTracking运行的整个过程。

在这里插入图片描述

查看Dockerfile

逐行查看Dockerfile如何编排"便携实验室"环境的设置。

# 从干净的Ubuntu操作系统开始
FROM ubuntu:22.04# 更新软件包列表
RUN apt-get update# 安装Python 3、pip和cmake(用于Dlib编译)
RUN apt install -y python3
RUN apt install -y python3-pip
RUN apt install -y cmake# 安装OpenCV GUI显示所需的系统库
RUN apt install -y libsm6
RUN apt install -y libxext6
RUN apt install -y libxrender1
RUN apt install -y libfontconfig1# 升级pip(Python包安装工具)
RUN pip3 install --upgrade pip# 将GazeTracking项目复制到容器中
COPY .  /home/GazeTracking# 设置容器内的工作目录
WORKDIR /home/GazeTracking# 安装requirements.txt列出的所有Python依赖项
RUN pip3 install -r requirements.txt

说明

  • FROM ubuntu:22.04:第一步。拉取Ubuntu 22.04最小版本作为镜像基础
  • RUN apt-get update:更新新Ubuntu环境中可用软件包列表
  • RUN apt install -y python3 ... libfontconfig1:使用Ubuntu包管理器(apt)安装基本系统软件。包括Python本身、pipcmake(如第4章所述构建Dlib所需)和各种对OpenCV图形显示和处理图像关键的lib
  • RUN pip3 install --upgrade pip:确保容器内的pip工具是最新的
  • COPY . /home/GazeTracking:将当前目录(含DockerfileGazeTracking代码)的所有文件复制到容器内的/home/GazeTracking新目录
  • WORKDIR /home/GazeTracking:将/home/GazeTracking设为后续命令或容器内打开shell时的默认目录
  • RUN pip3 install -r requirements.txt:依赖项的最后一步。让pip读取requirements.txt文件(已复制到/home/GazeTracking)并安装GazeTracking特定的所有Python库

总结

本章掌握了Docker化执行环境的基本理解。学习了Docker如何将GazeTracking及其复杂依赖项打包成自包含、可移植的Docker镜像

我们还看到如何将此镜像作为Docker容器运行,精心连接物理摄像头和图形显示。

使用Docker可确保GazeTracking项目在任何兼容系统上一致、可靠地运行,无需"依赖项头痛",创建真正便携且健壮的应用。

END ★,°:.☆( ̄▽ ̄)/.°★

http://www.dtcms.com/a/469894.html

相关文章:

  • uniapp web-view相互通信方法
  • (2)Kafka架构原理与存储机制
  • uniapp学习【项目创建+项目结构解析】
  • 虚拟机所需的硬件功能在目标主机上不受支持或已禁用:*长模式:对于支持64位客户机操作系统而言是必需的。
  • Uniapp微信小程序开发:http请求封装。
  • 个人可以做商城网站吗合肥制作网站价格
  • 网站制作的前期主要是做好什么工作网站的构思
  • java每小时调动一次,生成任务,基于corn表达式动态调动任务执行
  • 网站模板兼容手机端市场推广是做什么的
  • 企业微信防封防投诉拦截系统:从痛点解决到技术实现
  • vue的组件通信
  • 掌握PINN:从理论到实战的神经网络进阶!!
  • wordpress thremeseo推广排名软件
  • 安平县哪里做网站建立公司网站视频
  • PostgreSql ALL 与 ANY 区别
  • 解决 husky > pre-commit hook failed (add --no-verify to bypass)
  • 模拟器抓包
  • (数据结构)线性表(下):链表分类及双向链表的实现
  • 阿里云短信服务配置说明
  • Java+SpringBoot+Dubbo+Nacos快速入门
  • 【开题答辩全过程】以 办公管理系统为例,包含答辩的问题和答案
  • 天创网站做网站 数据标准
  • 做除尘骨架的网站网页一般用什么语言编写
  • SciPy 常量模块
  • 记录一次在Win7系统中使用C#中的HttpWebRequest连接缓慢、超时等问题(httpclient和restsharp也存在同样的问题)
  • Spring Boot 3零基础教程,Spring Intializer,笔记05
  • spring boot 2.x 与 spring boot 3.x 及对应Tomcat、Jetty、Undertow版本的选择(理论)
  • 织梦 网站栏目管理 很慢国内免费域名申请
  • 建设企业网站的好处是什么门户网站建设的成果
  • 【BUG排查】基于RH850F1KMS1的主控出现系统中断错误,调试FEIC的值为0x11