视觉实验-260304

更新-260304 | 发布-260301

本次实验将使用视觉实验箱体验 3 个视觉功能:

  • 76285 实验1-3:面部检测
  • 76286 实验1-4:人脸检测
  • 76287 实验1-5:手势识别

原理和代码解读,可参考 CG 平台相关说明。本文档主要描述操作相关。

目录


实验箱简介

和常见的台式机很相似。视觉实验箱的相关部件有:

  • 主机。有个小小机箱,内部是英伟达开发板(Nvidia Jetson)。
  • 屏幕。支持 HDMI 接口的屏幕,都可以通过 HDMI 线连接到 Jetson 开发板。
  • 鼠标和键盘。常见的鼠标和键盘,通过 USB 连接 Jetson 开发板。
  • 操作系统。Ubuntu,Linux 的发行版的一种。(常见操作系统有: Windows、MacOS、Linux,等)
  • 机械臂。由 Jetson 开发板控制的一个外部设备。

提示:Jetson开发板安装 VSCode、中文输入法、截图等,可参考:教具相关软件安装使用↗


上电开机

  • 视觉实验箱配有 1 个电源,一端连实验箱,另一端插头插在桌子下面的插座上。
  • 桌子下面有个带开关的的立方体插座。按下开关,电源指示灯亮,即表明接通电源。
  • 稍等片刻可完成启动。视觉实验箱的机械臂站立起来,且屏幕显示 Ubuntu 的主界面,就启动完成。

熟悉 Linux 命令

  • ❇️ 建议:如果还不大熟悉 Linux 命令和操作,尽量手敲以尽快熟悉。
  • ℹ️ 信息:Jetson 开发板账号密码是 jetson / yahboom,如需要。比如在笔记本电脑上通过 ssh jetson@开发板IP地址 登录开发板,。
  • ✨ 提示:在 Ubuntu 主界面左侧导航栏找到对应的 App,或者点击左下角 九宫格 Show Applications 后出现顶部搜索栏输入 App 的名字查找。
  • ✨ 提示:按 tab 键可补齐文字,加快输入。假定当前目录下有 3 个子目录(face_mesh,gesture_recognizer,haar_detection),输入 cd ges 后按 tab 键,则补齐为 cd gesture_recognizer/
  • ✨ 提示:按 esc 键后,再按 ↑↓箭头 键,可以找到输入过的命令。不必每次都重复敲命令。
  • ✨ 提示:浏览器和其他图形界面中,复制/粘贴的快捷键是 ctrl + c 和 ctrl + v。
  • ✨ 提示:在 终端 Terminal App 中,复制/粘贴的快捷键是 ctrl + shift + c 和 ctrl + shift + v。
  • ✨ 提示:win + ←↑↓→箭头键,可排列屏幕。

开始 Linux 操作之旅……

  • 启动浏览器访问网站

    在 Jetson 开发板上启动 Firefox 浏览器 App,访问 https://tnt.gdvzz.com/,找到本次实验的文档:AI Lab → AI实验课 → 视觉实验-260304。

    如果习惯使用 Chrome 浏览器,可以在终端中执行 sudo apt install chromium-browser 安装。

  • 在 Jetson 开发板上启动 终端 Terminal App。

  • 查看 IP 地址:ifconfig | grep 172

  • 创建/切换/显示当前目录:

      # 在用户的 HOME 目录下创建子目录 tmp260304
      mkdir ~/tmp260304
        
      # 切换到 HOME 目录
      cd
      pwd # 执行后屏幕应显示 /home/jetson
        
      # 切换到 tmp260304 子目录
      cd ~/tmp260304
      pwd # 执行后屏幕应显示 /home/jetson/tmp260304
    

    说明:pwd 是 Print Working Directory,显示当前所在的目录路径。

  • 显示信息:ls -l

  • 复制/改名

      # 先切换到 /home/jetson/tmp260304
      cd ~/tmp260304
    
      # 在当前目录下生成文件 test.txt
      echo "Hello, World!" > test.txt
    
      # 复制文件 test.txt 到 hello.txt
      cp test.txt hello.txt
    
      # 修改文件 hello.txt 为 hiworld.txt
      mv hello.txt hiworld.txt
    
      # 列出当前目录下的文件
      ls -l
    
  • 清除屏幕信息

      clear
    

Python环境准备

为什么需要 Conda

以下信息摘自网络文章“Python中的Anaconda(Conda)是什么?为什么需要它?1,供了解 conda 大致是什么。感兴趣同学还可查看 B 站视频“15分钟彻底搞懂!Anaconda Miniconda conda-forge miniforge Mamba2 获得更多信息。

Python是一种有特别多用处的计算机语言,可以用来做网页开发、数据分析以及AI等几乎大多数事情。每一个目的都需要特定的“包(packages)”。

与此同时,不仅会用到不同包的,甚至用到的Python版本都是不一样的。

问题是,你只有一台电脑,不可能为了新作一个项目就需要买一台新电脑……因此,我们通过“虚拟环境”来完成同一台电脑 开发管理多个项目的事情。我们可以针对具体的项目、逐一对应地开发虚拟环境。可以用多个虚拟环境来做多个数据开发、多个虚拟环境来做网页开发的事情ect.。

因此,在做不同的python项目,用到不同包、不同python版本时,虚拟环境的作用就出来了。

在python官网下载python,与此同时就会下载 pip(Python integrated package managemer)(所以顾名思义,pip的目的就是用来管理包);如果想要管理一台电脑上的多个环节,那就可以下载virtualenv,帮助我们管理虚拟环境(但也并不是说管理虚拟环境只有这一个工具)。

如果想用python,也不一定必须要在python官网下载,替代方案是:下载Ananconda(Anaconda 和 Python 是“包含关系”,Anaconda 包含了 Python)。在下载Anaconda(或者是miniconda)后,Conda就会装在我们的电脑系统上。 Conda既可以做包的管理,也可以管理虚拟环境。(PS:miniconda可以理解为轻量化的Anaconda;miniconda通常在终端操作,Anaconda通常是图形化页面)

那 pip 和 venv 还用不用?

  • Pip 是 Python 官方的包管理工具,更“原生”,适合轻量项目
  • Conda 更适合安装大型包和管理多个项目的环境
  • 二者可以搭配使用:Conda 管环境,pip 装特定包

第1步:安装 conda

在 Jetson 开发板上启动 终端 Terminal App,然后输入 conda 并回车。执行后如果屏幕显示“命令没有找到”之类的信息,则表明尚未安装,请参考如下命令先安装 Conda。如果已经安装 Conda,请跳到第2步。

mkdir ~/tmp2603 # 创建临时目录(目录名随意取)
cd ~/tmp2603    # 切换到临时目录

# 从科大镜像下载安装包
wget https://mirrors.ustc.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-aarch64.sh

# 安装过程中,请仔细阅读提示。并在询问“是否初始化Miniforge3”时输入 yes。
bash Miniforge3-Linux-aarch64.sh

# 安装完成后,关闭并重新打开终端,或者执行以下命令使配置生效:
source ~/.bashrc

# 之后,你的命令行前会出现 (base) 字样,表示基础环境已激活。

第2步:创建虚拟环境

在终端中执行以下 conda create 命令创建 Python3.9 虚拟环境。

conda create -n pye39 python=3.9

pye39 是虚拟环境的名字。可以是其他名字。

第3步:激活虚拟环境

在终端中执行以下 conda activate 命令激活刚创建的虚拟环境。

(base) jetson@jetson-Yahboom:~$ conda activate pye39
(pye39) jetson@jetson-Yahboom:~$ python3 --version
Python 3.9.23 # 屏幕显示的确是 Python3.9
  • pye39 是要激活的虚拟环境的名字。激活后可以看到命令行提示符头部已改为 (pye39),表示已激活该虚拟环境。
  • 可以在该虚拟环境中执行 python3 --version,可以看到屏幕显示的确是 Python3.9。
  • $ 之前的是命令行提示符,仅为说明激活前后的变化。$ 之后的才是要执行的命令。

第4步:在虚拟环境中安装Python包

在终端中依次执行以下 pip3 install 命令,安装本次实验所需的 Python 包到创建的虚拟环境中。

pip3 install mediapipe==0.10.9
pip3 install opencv-python==4.12.0.88
pip3 install numpy==2.0.2

相关 Python包安装完成后,可以依次执行以下 pip3 list | grep 命令检查的确安装完成。

pip3 list | grep mediapipe
mediapipe 0.10.9 # 屏幕显示

pip3 list | grep opencv-python
opencv-python 4.12.0.88 # 屏幕显示

pip3 list | grep numpy
numpy 2.0.2 # 屏幕显示
  • 一定要把相关的 Python 包安装到对应的虚拟环境中。不能安装到其他虚拟环境(比如 base)或非虚拟环境。否则后续执行实验样例代码时,会报错“xx 找不到”。
  • 和 CG 平台上要求的 Python 版本不一致(本文-3.9,CG-3.8),相关包的版本也不完全一样。可尝试参考本文的版本。

✅ 至此 Python 环境准备已完成。如何查看虚拟环境列表、激活/去激活、删除虚拟环境,请参考 conda常用命令

conda常用命令

  • 显示虚拟环境列表

      conda env list
    
  • 激活/去激活某个虚拟环境

    执行如下命令可激活某个虚拟环境:

      conda activate 虚拟环境名
    

    比如要激活虚拟环境名称叫 abc,则执行 conda activate abc。执行成功后,命令行提示符头部会显示(abc)

    在某个虚拟环境中,执行如下命令可去激活该虚拟环境:

      conda deactivate
    

    假定当前在虚拟环境 abc 中。执行上述去激活命令后,命令行提示符头部的 (abc) 会变化:消失(回到非虚拟环境);或者显示 (base)(假定是从 (base) 虚拟环境执行 conda activate abc 激活 abc 虚拟环境的)

  • 删除虚拟环境

    执行 conda remove 命令可删除虚拟环境:

      conda remove -n 虚拟环境名 --all
    

    比如执行 conda remove -n myenv --all,可以 remove all packages from environment myenv and the environment itself。


下载解压样例代码

将本次实验使用的样例代码,下载解压到 Jetson 开发板上。

  1. 下载 zip 压缩包

    样例代码下载链接如下:

    样例代码也可从 CG 平台相关链接下载。CG 平台下载的 zip 包的名字是一长串数据字符,可从文件的时间确认哪个是哪个。

  2. 解压

    在 Jetson 开发板上通过 Firefox 浏览器下载,默认存放在用户家目录(HOME目录)的 Downloads 子目录下。按 CG 平台手册建议,先新建 exp 子目录,再将样例代码从 Downloads 子目录移动到 exp 子目录。

     mkdir ~/exp                                 # 家目录下新建 exp 子目录
     mv ~/Downloads/face_mesh.zip ~/exp          # zip 包移动到 exp 子目录
     mv ~/Downloads/haar_detection.zip ~/exp
     mv ~/Downloads/gesture_recognizer.zip ~/exp
    

    解压 3 个 zip 包

     cd ~/exp # 先切换到 exp 目录
     unzip -oq face_mesh.zip -d ./  # 再执行 unzip解压
     unzip -oq haar_detection.zip -d ./
     unzip -oq gesture_recognizer.zip -d ./
    

    执行 ls -l 查看解压结果。应该有 3 个目录和 3 个 zip 文件。

     (pye39) jetson@jetson-Yahboom:~/exp$ ls -l
     face_mesh  gesture_recognizer  haar_detection  face_mesh.zip  gesture_recognizer.zip  haar_detection.zip # 屏幕显示应该有 3 个目录和 3 个 zip 文件
    

连接USB摄像头

  1. 先将机械臂的摄像头的 USB 连接线,从 Jetson 开发板上拔下来。
  2. 再把桌子上的单目摄像头(海康 hikvision)的 USB 连接线,插入实验箱的 USB 扩展坞中。
  3. 在 Jetson 开发板启动 终端 Terminal App,在终端中执行 cheese 命令,可在弹出的窗口中看到图像,即表明摄像头能正常工作。

说明:也可以用机械臂的摄像头做本次几个实验。但该摄像头固定在机械臂的顶部,不大方便移动而已。


体验视觉功能

在 Jetson 开发板上启动 终端 Terminal App,并激活本实验所需的 Python 虚拟环境(请参考 conda常用命令)。然后可体验以下视觉功能:面部检测,人脸检测,手势识别。

面部检测

  1. 确保已激活本次实验所需 Python 虚拟环境

    如未激活或不确定,请参考 conda常用命令

  2. 执行 python3 main.py 启动程序

     cd ~/exp
     cd face_mesh
     python3 main.py
    

    程序启动后会自动打开摄像头,实时检测画面中的人脸,并在窗口中显示检测结果。窗口被分为左右两部分:

    • 左侧窗口: 原始的摄像头画面(已做镜像翻转),并叠加了检测到的人脸轮廓线(绿色线条)和所有468个关键点(红色微小圆点)。左上角实时显示帧率(FPS)。
    • 右侧窗口: 在纯黑背景上只显示人脸网格和关键点,可以更清晰地观察细节。
    • 按 q 键(或 ctrl + c)退出程序。

    更多信息请参考 CG 平台之“76285 实验1-3:面部检测”。

人脸检测

  1. 确保已激活本次实验所需 Python 虚拟环境

    如未激活或不确定,请参考 conda常用命令

  2. 执行 python3 main.py 启动程序

     cd ~/exp
     cd haar_detection
     python3 main.py
    

    程序启动后会自动打开摄像头,并进入默认的“人脸检测”模式。你可以通过键盘进行交互:

    • 按 f 键: 在三种模式间循环切换:face (仅人脸检测), eye (仅眼睛检测), face_eye (同时检测人脸和眼睛)。
    • 按 q 键(或 ctrl + c)退出程序。

    窗口中会实时显示检测结果:

    • 人脸: 会被一个带有装饰性边角的紫色矩形框標出。
    • 眼睛: 会被一个红色的圆形框標出。
    • 左上角: 实时显示当前的FPS(帧率)和检测模式(Mode)。

    更多信息请参考 CG 平台之“76286 实验1-4:人脸检测”。

手势识别

  1. 确保已激活本次实验所需 Python 虚拟环境

    如未激活或不确定,请参考 conda常用命令

  2. 执行 python3 main.py 启动程序

     cd ~/exp
     cd gesture_recognizer
     python3 main.py
    

    程序启动后会自动打开摄像头,实时检测画面中的单只手并识别其手势。窗口被分为左右两部分:

    • 左侧窗口: 原始的摄像头画面(已做镜像翻转),并叠加了检测到的手部骨架(绿色线条)和关键点(红色圆点)。左上角会实时显示识别出的手势名称(如 “Five”, “OK”, “Thumb_up”),右上角显示FPS(帧率)。
    • 右侧窗口: 在纯黑背景上只显示手部骨架,方便观察。
    • 按 q 键(或 ctrl + c)退出程序。

    更多信息请参考 CG 平台之“76287 实验1-5:手势识别”。


关机&复原&离开

实验结束离开前,请各位同学完成以下事项:

关机

  1. 在终端中执行关机命令 shutdown -h now。或者屏幕右上角:电源标志 → power off。
  2. 观察开发板小机箱的散热风扇。风扇停止后,按桌子下面的立方体插座上的开关,电源指示灯熄灭。
  3. 起身正对机械臂,将竖立的机械臂向前轻轻推倒,水平卧在 Jetson 开发板小机箱上即可。
  4. 机械臂的摄像头,插回到 Jetson 开发板上。
  5. 单目摄像头,拔下后还回实验室后方柜子里。

🚫 电源线:不必从视觉实验箱拔下来;也不必从桌子下面的插座上拔下来。
🚫 机械臂:水平自然卧倒在小机箱上即可。不必整理、扭成很好看的造型(可能导致下次启动时无法站立)。

椅子复原

椅子推到桌子下面。1 个桌子配备 6 个椅子。多余的椅子放到实验室的左右两侧。

带走物品

请带走个人物品。

THE END