硬件购买以及注意点

购买硬件之后在网卡后面有个短路帽要加上,否则无法开机。

系统安装

nvidia jetson nano系统安装在SD卡中,请预先准备一个32G的SD卡

系统安装步骤请参考官网

Getting Started With Jetson Nano Developer Kit | NVIDIA Developer

注意:烧录完成会弹出好多个窗口,请求格式化,此处一定要点  取消 不要格式化,因为这是软件在为系统分盘。

开发前准备

检查opencv是否安装

命令行:opencv_version

输出:4.1.1

检查显卡驱动和cuda是否安装

命令行:nvcc -V

输出:bash: nvcc command not found

解决:驱动其实已经安装了,我们需要加入环境变量

sudo vim ~./bashrc

或者也可以直接到本地电脑的Home文件夹中找到.bashrc文件,直接打开文件,在文件的最后位置添加上三行命令。(若进到Home文件夹没看有.bashrc文件,则点击一下Ctrl + H就可以显示出.bashrc

在文件最后添加

export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda

设置完成后可以正常看到nvcc -V 的信息

安装jtop以便查看设备信息

sudo apt-get install git cmake
sudo apt-get install python3-dev
sudo apt-get install libhdf5-serial-dev hdf5-tools
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3-pip
sudo -H pip3 install -U jetson-stats
sudo systemctl restart jetson_stats.service
reboot
jtop

安装opencv

sys Update

sudo apt-get update
sudo apt-get full-upgrade

sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"

sudo apt update

set nvcc

sudo vim ~/.bashrc
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.2/bin:$PATH
source ~/.bashrc
# test

nvcc -V

安装OpenCV with CUDA

sudo apt-get install build-essential

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

sudo apt-get install pkg-config

sudo apt-get install opencv3-pip

unzip opencv4.6-contrib-xfture

build> cmake
-D CMAKE_INSTALL_PREFIX=/usr/local
-D CMAKE_BUILD_TYPE=Release
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2
-D CUDA_ARCH_BIN=5.3
-D CUDA_ARCH_PTX=""
-D BUILD_PNG=OFF
-D BUILD_TIFF=OFF
-D BUILD_TBB=OFF
-D BUILD_JPEG=OFF
-D BUILD_JASPER=OFF
-D BUILD_ZLIB=OFF
-D BUILD_EXAMPLES=ON
-D BUILD_opencv_java=OFF
-D BUILD_opencv_python2=OFF
-D BUILD_opencv_python3=ON
-D ENABLE_PRECOMPILED_HEADERS=OFF
-D WITH_OPENCL=OFF
-D WITH_OPENMP=OFF
-D WITH_FFMPEG=ON
-D WITH_GSTREAMER=OFF
-D WITH_GSTREAMER_0_10=OFF
-D WITH_CUDA=ON
-D WITH_GTK=ON
-D WITH_VTK=OFF
-D WITH_TBB=ON
-D PYTHON_DEFAULT_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)")
-D PYTHON3_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)")
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print (numpy.get_include())")
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
-D WITH_1394=OFF
-D WITH_OPENEXR=OFF
-D INSTALL_C_EXAMPLES=ON -D INSTALL_TESTS=OFF
..
build> make -j4
build> sudo make install
build> sudo python3 setup.py install

if "sudo python3 setup.py install " error :

pip3 install setuptools

pip3 install --upgrade setuptools

pip3 install --upgrade pip

do sudo python3 setup.py install again!

pip3 install Pillow
pip3 install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple/

CameraCall.py# encoding: utf-8
import cv2 as cv
import subprocessclass CameraCallTool(object):cap = Nonedef __init__(self, width, height, CamIndex):print(f'Init Camera Tool!')if CamIndex == -1:self.CallCameraOnBoard(width, height)elif CamIndex == 0:self.CallCameraOnCSI(width, height)else:print('no usb camera!')def CallCameraOnCSI(self, width, height):self.cap = cv.VideoCapture(0) #设置摄像头 0是默认的摄像头 如果你有多个摄像头的话呢,可以设置1,2,3....self.cap.set(cv.CAP_PROP_FRAME_WIDTH, width)self.cap.set(cv.CAP_PROP_FRAME_HEIGHT, height)self.cap.set(cv.CAP_PROP_EXPOSURE, 0.1)def Test(self):print('CameraCallTool Test')def CameraStatus(self):return self.cap.isOpened()def CallCameraOnBoard(self, width, height):gst_elements = str(subprocess.check_output('gst-inspect-1.0'))if 'nvcamerasrc' in gst_elements:# On versions of L4T prior to 28.1, add 'flip-method=2' into gst_strgst_str = ('nvcamerasrc ! ''video/x-raw(memory:NVMM), ''width=(int)2592, height=(int)1458, ''format=(string)I420, framerate=(fraction)30/1 ! ''nvvidconv ! ''video/x-raw, width=(int){}, height=(int){}, ''format=(string)BGRx ! ''videoconvert ! appsink').format(width, height)elif 'nvarguscamerasrc' in gst_elements:gst_str = ('nvarguscamerasrc ! ''video/x-raw(memory:NVMM), ''width=(int)1920, height=(int)1080, ''format=(string)NV12, framerate=(fraction)30/1 ! ''nvvidconv flip-method=2 ! ''video/x-raw, width=(int){}, height=(int){}, ''format=(string)BGRx ! ''videoconvert ! appsink').format(width, height)else:raise RuntimeError('onboard camera source not found!')# return cv.VideoCapture(gst_str, cv.CAP_GSTREAMER)self.cap = cv.VideoCapture(gst_str, cv.CAP_GSTREAMER)def GetOneFrame(self):if self.cap.isOpened():ret, frame = self.cap.read()if ret is True:# 摄像头是和人对立的,将图像左右调换回来正常显示。frame = cv.flip(frame, 1)frame = cv.flip(frame, 0)return frameelse:return Noneelse:return Nonedef __del__(self):if self.cap is not None:self.cap.release()print('CameraCallTool del')
DnnClass.py# encoding: utf-8
import numpy as np
import cv2 as cv
import os
import timeclass MyDnn(object):# YOLO文件路径 G:\vs2017Project\yolov2-tiny-vocyolo_dir = './yolov3-tiny'# 过滤弱检测的最小概率CONFIDENCE = 0.5  # 非最大值抑制阈值THRESHOLD = 0.4def __init__(self):print('import Dnn Tool Calss!')# YOLO文件路径self.yolo_dir_name = self.yolo_dir  # 权重文件self.weightsPath = os.path.join(self.yolo_dir, 'yolov3.weights')  # 配置文件self.configPath = os.path.join(self.yolo_dir, 'yolov3.cfg')  # label名称self.labelsPath = os.path.join(self.yolo_dir_name, 'coco.names')  # 加载网络、配置权重self.net = cv.dnn.readNetFromDarknet(self.configPath, self.weightsPath)# intel gpu# self.net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV)# self.net.setPreferableTarget(cv.dnn.DNN_TARGET_OPENCL)# cpu# self.net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV)# self.net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)# nvidia gpuself.net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)self.net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)print("[INFO] loading YOLO from disk...")  # # 可以打印下信息def importTest(self):print('dnn import test!')def DecodeImage(self, img):start = time.time()# 加载图片、转为blob格式、送入网络输入层# img = imagePath# net需要的输入是blob格式的,用blobFromImage这个函数来转格式blobImg = cv.dnn.blobFromImage(img, 1.0/255.0, (416, 416), None, True, False)# 调用setInput函数将图片送入输入层self.net.setInput(blobImg)# 前面的yolov3架构也讲了,yolo在每个scale都有输出,outInfo是每个scale的名字信息,供net.forward使用outInfo = self.net.getUnconnectedOutLayersNames()  # 得到各个输出层的、各个检测框等信息,是二维结构。layerOutputs = self.net.forward(outInfo)  end = time.time()print("[INFO] YOLO took {:.6f} seconds".format(end - start))# 拿到图片尺寸(H, W) = img.shape[:2]# 过滤layerOutputs# layerOutputs的第1维的元素内容: [center_x, center_y, width, height, objectness, N-class score data]# 过滤后的结果放入:# 所有边界框(各层结果放一起)boxes = []# 所有置信度confidences = []# 所有分类IDclassIDs = []# # 1)过滤掉置信度低的框框# 各个输出层for out in layerOutputs:# 各个框框for detection in out:# 拿到置信度# 各个类别的置信度scores = detection[5:]# 最高置信度的id即为分类idclassID = np.argmax(scores)# 拿到置信度confidence = scores[classID]# 根据置信度筛查if confidence > self.CONFIDENCE:# 将边界框放会图片尺寸box = detection[0:4] * np.array([W, H, W, H])(centerX, centerY, width, height) = box.astype("int")x = int(centerX - (width / 2))y = int(centerY - (height / 2))boxes.append([x, y, int(width), int(height)])   # 框confidences.append(float(confidence))           # 置信度classIDs.append(classID)                        # 分类ID# # 2)应用非最大值抑制(non-maxima suppression,nms)进一步筛掉# boxes中,保留的box的索引index存入idxsidxs = cv.dnn.NMSBoxes(boxes, confidences, self.CONFIDENCE, self.THRESHOLD)# 得到labels列表with open(self.labelsPath, 'rt') as f:labels = f.read().rstrip('\n').split('\n')np.random.seed(42)# 框框显示颜色,每一类有不同的颜色,每种颜色都是由RGB三个值组成的,所以size为(len(labels), 3)COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8")  if len(idxs) > 0:# alarm picfor i in idxs.flatten():  # indxs是二维的,第0维是输出层,所以这里把它展平成1维(x, y) = (boxes[i][0], boxes[i][1])(w, h) = (boxes[i][2], boxes[i][3])color = [int(c) for c in COLORS[classIDs[i]]]# 线条粗细为2pxcv.rectangle(img, (x, y), (x+w, y+h), color, 2)cv.rectangle(img, (x, y), (x+w, y+h), color, 2)# 线条粗细为2pxtext = "{}: {:.4f}".format(labels[classIDs[i]], confidences[i])# cv.FONT_HERSHEY_SIMPLEX字体风格、0.5字体大小、粗细2pxcv.putText(img, text, (x, y-5), cv.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)print('alarm pic!')cv.imshow('decode', img)return imgelse:# normal picprint('normal pic!')return None
DnnMain.py# encoding: utf-8
import cv2 as cv
from DnnClass import MyDnn
from CameraCall import CameraCallTool
import pygame
from PIL import Image, ImageDraw, ImageFont
import threading
import subprocessdef LoadMusic():pygame.mixer.init()pygame.mixer.music.load('./audio/succ.wav')pygame.mixer.music.set_volume(0.5)def PlaySuccess():pygame.mixer.music.play()def DrawTextOnImage(img, text1, text2, left, top, textColor=(0,255,0), textSize=20):if(isinstance(img, np.ndarray)):img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# create a draw to draw textdraw = ImageDraw.Draw(img)fontstyle = ImageFont.truetype('./font/simsun.ttc', textSize, encoding='utf-8')draw.text((left,top), text1, textColor, font=fontstyle)draw.text((left,int(top + textSize + 2)), text2, textColor, font=fontstyle)return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)def CallCameraOnBoard(width, height):gst_elements = str(subprocess.check_output('gst-inspect-1.0'))if 'nvcamerasrc' in gst_elements:# On versions of L4T prior to 28.1, add 'flip-method=2' into gst_strgst_str = ('nvcamerasrc ! ''video/x-raw(memory:NVMM), ''width=(int)2592, height=(int)1458, ''format=(string)I420, framerate=(fraction)30/1 ! ''nvvidconv ! ''video/x-raw, width=(int){}, height=(int){}, ''format=(string)BGRx ! ''videoconvert ! appsink').format(width, height)elif 'nvarguscamerasrc' in gst_elements:gst_str = ('nvarguscamerasrc ! ''video/x-raw(memory:NVMM), ''width=(int)1920, height=(int)1080, ''format=(string)NV12, framerate=(fraction)30/1 ! ''nvvidconv flip-method=2 ! ''video/x-raw, width=(int){}, height=(int){}, ''format=(string)BGRx ! ''videoconvert ! appsink').format(width, height)else:raise RuntimeError('onboard camera source not found!')return cv.VideoCapture(gst_str, cv.CAP_GSTREAMER)if __name__ == "__main__":print('camera onboard')DnnTool = MyDnn()cameraCallTool = CameraCallTool(1024, 768, 0)t = 0try:while cameraCallTool.CameraStatus():CameraFrame = cameraCallTool.GetOneFrame()if CameraFrame is not None:cv.imshow('Video', CameraFrame)if t == 0 or t.is_alive() is False:# image_np = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)t = threading.Thread(target=DnnTool.DecodeImage, args=(CameraFrame, ))t.start()#判断退出的条件 当按下'Q'键的时候呢,就退出c = cv.waitKey(1)# 如果按下q 就截图保存并退出if c == ord('q'):  saveFile = "Capture.jpg"  # 带有中文的保存文件路径img_write = cv.imencode(".jpg", CameraFrame)[1].tofile(saveFile)breakexcept:print('Camera Show Exception!')finally:del cameraCallToolcv.destroyAllWindows()

lost : audo  font  yolov3-tiny

nvidia jetson nano 操作指南相关推荐

  1. NVIDIA Jetson Nano B01 安装Ubuntu 18.04.3 LTS

    几乎完美安装! NVIDIA Jetson Nano B01 Ubuntu 18.04.3 LTS 的 ROS 安装和菜鸟的踩坑记录 NVIDIA Jetson Nano B01技术规格 Ubuntu ...

  2. python怎么另起一行阅读答案_使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)...

    Nvidia Jetson Nano 2GB开发板是一款新的单板机 售价59美元 运行带有GPU加速的人工智能软件.在2020年 你可以从一台售价59美元的单板计算机中获得令人惊叹的性能 让我们用它来 ...

  3. Nvidia jetson nano,控制风扇开启和关闭。

    Nvidia jetson nano,控制风扇开启和关闭. 1.将风扇转速开到最大: sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm ...

  4. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统...

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

  5. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统 - 人工智能遇见磐创...

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

  6. NVIDIA Jetson Nano主机的autoware的学习与demo运行-第1章-操作环境的搭建

    操作环境的搭建   计算机平台介绍 NVIDIA 在2019年NVIDIA GPU技术大会(GTC)上发布了Jetson Nano开发套件,这是一款售价99美元的计算机,现在可供嵌入式设计人员,研究人 ...

  7. 使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)

    Nvidia Jetson Nano 2GB开发板是一款新的单板机,售价59美元,运行带有GPU加速的人工智能软件. 在2020年,你可以从一台售价59美元的单板计算机中获得令人惊叹的性能,让我们用它 ...

  8. 我的NVIDIA开发者之旅——作为一名初学者,我是如何开启 NVIDIA Jetson Nano 开发的

    "我的NVIDIA开发者之旅" | 征文活动进行中- ⭐️ 作者:前端修罗场 ⭐️ 本文名称:我的NVIDIA开发者之旅--作为一名初学者,我是如何开启 NVIDIA Jetson ...

  9. 几乎完美安装! NVIDIA Jetson Nano B01 Ubuntu 18.04.3 LTS 的 ROS 安装和菜鸟的踩坑记录【会继续完善】

    几乎完美安装! NVIDIA Jetson Nano B01 Ubuntu 18.04.3 LTS 的 ROS 安装和菜鸟的踩坑记录 NVIDIA Jetson Nano B01技术规格 Ubuntu ...

最新文章

  1. CentOS7 安装和配置 mysql5.7
  2. arduino 操纵杆_用Arduino做一台FPV(第一人称视角)遥控履带车
  3. hyper-V环境下虚拟机和宿主机之间时钟不统一
  4. DNS术语,组件和概念介绍
  5. c语言长整数除法,大整数除法
  6. Nodejs windows的安装
  7. Logstash配置语法
  8. memcache和redis本质区别在哪里?
  9. 关于Matlab生成批量文件文件名统一数字位数方法
  10. 不购买2021新款MacBook Pro的理由
  11. 瑞星个人防火墙万能序列号ID号
  12. 转载:SolidWorks 2014 安装完成破解成功,用过一段时间后提示重新激活(win10系统)...
  13. 计算机常用软件英文读音,学习英文在线发音的软件有哪些?宝妈推荐的这些超级实用...
  14. 作计算机报告用英语怎么写,计算机专业英语报告.doc
  15. 昨天,我的大学学习[5]--转载自:www.cstc.net.cn
  16. 洪柱森老师介绍--沪师经纪-刘建
  17. MATLAB中resample函数使用
  18. Golang FlameGraph(火焰图)
  19. R Packages for GWAS and GS
  20. 软件设计师考试注意事项

热门文章

  1. PCI e 转 PXI 远程 转接 套件 PCI e / PXI 远程控制 器 模块 板卡
  2. IDEA去除重复代码黄色下滑波浪线提示
  3. (转)《浪潮之巅》作者吴军前言:有幸见证历史(内有目录和作者简介)
  4. 热搜第一除了本科生月均5千工资,还告诉了我们什么?
  5. DOA定位算法源码程序
  6. 李航《统计学习方法》朴素贝叶斯的python实现
  7. Oracle-多表查询
  8. 问题: Mac外联硬盘不能更改“-”中的一个或多个项目,因为它们正在使用中
  9. 从字节码指令分析i=i++(i是long类型时)
  10. SiI9136 -3 HDMI Transmitter 寄存器配置