0. 前言
本人比较痴迷于硬件方向,最近得到老师的支持,从老师手里借到一块Nvidia Jetson nano 的板子(狂喜),下文简述nano。刚拿到板子经过已经完成点灯的操作,老师指示点完灯可以配置opencv的环境,前往图像处理的指示海洋。而配置opencv的过程曲折而痛苦,这里主要总结并分享配置过程及踩坑、填坑的起起伏伏。
0.1 Jetson Nano简介
Jetson Nano是一款体积小巧、功能强大的人工智能嵌入式开发板,于2019年3月由英伟达推出。预装Ubuntu 18.04LTS系统,搭载英伟达研发的128核Maxwell GPU,可以快速将AI技术落地并应用于各种智能设备。相比于Jetson之前的几款产品(Jetson TK1、Jetson TX1、Jetson TX2、Jetson Xavier),Jetson Nano售价仅需99美元,大幅减少了人工智能终端的研发成本。因此,一经推出,便受到了广泛的关注
以下是nano的几点优势:
(1) 体型小巧,性能强大,价格实惠,整体采用类似树莓派的硬件设计,支持一系列流行的AI框架,并且英伟达投入了大量的研发精力为其打造了与之配套的Jetpack SDK开发包,通过该开发包可以使学习和开发AI产品变得更加简单和便捷。
(2) 专为AI而设计,性能相比树莓派更强大,搭载四核Cortex-A57处理器,128核Maxwell GPU及4GB LPDDR内存,可为机器人终端、工业视觉终端带来足够的AI算力。
(3) 可提供472 GFLOP,支持高分辨率传感器,可以并行处理多个传感器,并可在每个传感器流上运行多个现代神经网络。
(4) 支持英伟达的NVIDIA JetPack组件包,其中包括用于深度学习、计算机视觉、GPU计算、多媒体处理等的板级支持包,CUDA,cuDNN和TensorRT软件库。
(5) 支持一系列流行的AI框架和算法,比如TensorFlow,PyTorch,Caffe / Caffe2,Keras,MXNet等,使得开发人员能够简单快速的将AI模型和框架集成到产品中,轻松实现图像识别,目标检测,姿势估计,语义分割,视频增强和智能分析等强大功能。
说了一通,其实是跑边缘计算太贵的1080Ti等PC显卡咱买不起,而nano这样的单板计算机体积小还自带GUP,简直是大众福音。
————————————————
1.0 Jetson 裸机硬件介绍
先上张图
可以看到,nano的体积只比一个Romoss充电宝大一点,而它竟然自带GPU。
下面来看看小黑盒里到底是啥
先拆壳子
拆散热
以上就是Jetson nano的裸机硬件的简单介绍。
2.0 Jetson nano 的初步配置
安装系统
本人使用tf卡启动,其他安装微雪官网或其他都很详细,我就不在赘述啦
2.0.1下载镜像
英伟达官方地址
https://developer.nvidia.com/embedded/dlc/jetson-nano-dev-kit-sd-card-image
2.0.2格式化tf卡
本人比较懒,没有安装网上的教程用其他应用格式化,直接电脑选择tf卡按右键然后格式化
2.0.3使用balenatcher写出镜像
2.0.4愉快开机~
2.1 开发环境配置
安装完镜像后换源,否则后续更新和升级会非常慢。但是由于Jetson Nano采用的是aarch64架构的Ubuntu 18.04.2 LTS系统,与AMD架构的Ubuntu系统不同,因此需要替换成aarch64的源。
然后,备份原来的源,终端输入:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
换源,这里会打开一个窗口,会有一堆网址,如果没有弹出,检查命令是否正确
sudo gedit /etc/apt/sources.list
然后删除所有,复制下面的粘贴进去:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
换源结束,更新源:
sudo apt-get update``
sudo apt-get full-upgrade
失败就多试几遍
3. opencv配置及人脸识别案例的实现
本节使用Python来完成人脸识别的案例
3.1 安装pip
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
可以直接使用系统预装的Python3.6直接安装。
终端输入:sudo apt-get install python3-pip python3-dev
然后升级一下:python3 -m pip install --upgrade pip
注意,这里pip的升级巨慢,而且经常会失败,非常考验耐心,也非常搞心态。
3.2 安装Python常用学习包
sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-sklearn
同样,有些包可能会下载失败,保持耐心。
3.3配置用于python的opencv
这里直接使用原镜像预装的opencv4.1.1
使用下述命令可以查看版本号
opencv_version
3.4基于opencv的人脸检测
原教程中使用Code OSS(可以理解为适用于nano的vscode)。但下载OSS非常搞心态,本人直接用vim编辑器编辑。
注:Vim编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器。
终端输入命令
sudo vi face_detect.py
生成python脚本并进入
然后按a 进如编辑模式,复制粘贴示例
import cv2
filepath = "test.jpg"
img = cv2.imread(filepath) # 读取图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换灰色
#OpenCV人脸识别分类器
classifier = cv2.CascadeClassifier( "haarcascade_frontalface_default.xml" )
color = (0, 255, 0) # 定义绘制颜色
#调用识别人脸
faceRects = classifier.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects): # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
# 框出人脸
cv2.rectangle(img, (x, y), (x + h, y + w), color, 2)
cv2.imshow("image", img) # 显示图像
c = cv2.waitKey(10)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果还没开始学习opencv人脸识别的相关知识,这里要特别注意,示例需要一张test.jpg的图片在py脚本所在的路径下(见第二行代码。以及人脸识别配置文件(以xml为后缀的文件)(见第6行代码)。本人就是不懂原教程中的人脸识别配置文件是啥,然后报错了。
然后终端输入
$ python3 face_detect.py
即可正常运行示例,识别出test.jpg的人脸 ~
4.总结
Jetson nano 下Opencv的配置曲折而玄学,总结几点:
- 耐心安装软件和库,失败多试几次就好了。
- 教程不是给我们单独定制的,有些不懂的还需要自己好好的百度。
- 善用工具,比如搜索引擎,有些东西搜不到就换个搜索引擎,说不定有惊喜,灵活运用必应、百度等。有条件可以直接Chat GPT,很强大,对于初学者来说是一个debug、提高学习效率等的强大工具。
- 如果找学长或者老师问问题一定要注意提问方式,不要发送即时消息给老师,因为老师可能需要用qq、wx接收重要通知,发送即时消息会打扰到老师,特别是老师在忙的时候。可以用邮箱,把问题背景、错误日志、自己的思路写在一块发送给老师。
- 最后一点,也是最重要的一点,要善于debug,程序出错是很常见的,而找出错误非常关键。用错误日志的关键词来利用工具找错误是效率最高的,注意,是关键词,尽量缩短错误内容,多包含关键词去百度。
稚辉君说,过于先进的技术对于普通人来说,像魔法一样。对我来说,能够用这些小小的元器件来实现各种操作是一件很神奇的事情。我也很喜欢埋头在电子世界中,一切都很神奇。希望大家能够找到自己热爱的事情,去追自己想追的梦。
参考原文链接:
https://blog.csdn.net/qianbin3200896/article/details/103760640
JETSON NANO - Waveshare Wiki
(39条消息) Jetson Nano(一):系统烧录_热爱学习的栾宝宝的博客-CSDN博客
版权归原作者 aururopt 所有, 如有侵权,请联系我们删除。