【jetson nano】在ubuntu18.04下,c++调用链接库实现yolov3

2023-05-16

目录

0. 前言

1. 下载安装opencv 3.4.0

1.1 配置相应的以来库

1.2 下载opencv 3.4.0(源码)

1.3 编译(时间较长)

1.4 安装

1.5 配置opencv路径

1.6 测试opencv3.4.0

2. c++使用darknet链接库调用yolov3

2.1 准备工作

下图中,可以看到存在darknet、libdarknet.so两个文件(网上有很多darknet资源)​2.2 在终端创建一个新文件夹yolov3_test

2.3 丰富yolov3_test

2.4 编写源码

2.5 编译

2.6 测试效果

3. 后续目标


0. 前言

在正文之前,交代背景。不同与PC端的是,这里采用的是Jetson nano上位机(我感觉与树霉派差不多)。Jeston nano上搭载的是ubuntuu18.04,至于系统问题请自行搜索。

系统:Ubuntu 18.04

软件:opencv 3.4.0、CMake

外设(必须):5V2A直流电源线、摄像头、屏幕、键盘、鼠标

1. 下载安装opencv 3.4.0

先附上两篇参考博客,我按照这两篇博客操作下来是没问题的:第一篇,第二篇。

以下内容几乎是复制粘贴:

1.1 配置相应的以来库

sudo apt-get install build-essential
# 必须的,gcc编译环境
 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
# 必须的,包括cmake等工具
 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
# 可选的,看个人需要,总共5M左右

1.2 下载opencv 3.4.0(源码)

官网地址:https://opencv.org/releases.html

1.3 编译(时间较长)

cd opencv-3.4.0
mkdir build
# 创建编译文件
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 生成后的Makefile在build文件夹中,而需要的CMakeLists.txt在 ".."中,即上一级文件夹中(opencv-3.4.0)

1.4 安装

# 4个线程编译,查看cpu核数量
# grep "model name" /proc/cpuinfo | wc -l 
make -j4
 
# 安装
sudo make install

1.5 配置opencv路径

#终端中输入

sudo vim /etc/ld.so.conf.d/opencv.conf

在打开的文件内添加:

/usr/local/lib

#终端中输入

sudo ldconfig

sudo vim /etc/bash.bashrc

在打开的文件夹末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

#终端中输入

source /etc/bash.bashrc

1.6 测试opencv3.4.0

#上一个终端不用关闭,继续输入

cd ../samples/cpp/example_cmake
cmake .
make
./opencv_example

2. c++使用darknet链接库调用yolov3

2.1 准备工作

下图中,可以看到存在darknet、libdarknet.so两个文件(网上有很多darknet资源)
2.2 在终端创建一个新文件夹yolov3_test

 创建完成后,在文件夹内创建CMakeLists.txt文件,并将以下内容粘贴到文件里。

cmake_minimum_required(VERSION 2.8) # 最低版本需求
project(yolov3) #项目名
#opencv
add_definitions(-std=c++11) 
ADD_DEFINITIONS(-DOPENCV)
ADD_DEFINITIONS(-DGPU)
#########   opencv   #########
set(OpenCV_DIR "/home/zzp/opencv-3.4.0")
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
#########         darknet   #########
include_directories(/home/zzp/darknet-master/include)
find_library(darknet libdarknet.so /home/zzp/darknet-master)
add_executable(${PROJECT_NAME} "/home/zzp/yolov3/yolov3_test.cpp" )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}  ${darknet})

接下来,在yolov3_test文件夹内新建cfg、img、data、include、weights文件夹,结果如下图所示。 

2.3 丰富yolov3_test

回到darknet-master文件夹,将coco.names、yolov-tiny.cfg放入cfg文件,将dog.jpg放入img,将yolo_v2_class.hpp放入Include,将yolov3-tiny.weights放入weights。

2.4 编写源码

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <vector>
#include <iostream>
#include <fstream>
#include "/home/zzp/yolov3/include/yolo_v2_class.hpp"//引用yolo动态链接库中的头文件

using namespace std;
using namespace cv;

#pragma comment(lib, "yolo_cpp_dll.lib")//引用yolo动态链接库

//画出检测框和相关信息
void DrawBoxes(Mat &frame, vector<string> classes, int classId, float conf, int left, int top, int right, int bottom)
{
	//画检测框
	rectangle(frame, Point(left, top), Point(right, bottom), Scalar(255, 178, 50), 3);
	//该检测框对应的类别和置信度
	string label = format("%.2f", conf);
	if (!classes.empty())
	{
		CV_Assert(classId < (int)classes.size());
		label = classes[classId] + ":" + label;
	}
	//将标签显示在检测框顶部
	int baseLine;
	Size labelSize = getTextSize(label, FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
	top = max(top, labelSize.height);
	rectangle(frame, Point(left, top - round(1.5*labelSize.height)), Point(left + round(1.5*labelSize.width), top + baseLine), Scalar(255, 255, 255), FILLED);
	putText(frame, label, Point(left, top), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(0, 0, 0), 1);
}

//画出检测结果
void Drawer(Mat &frame, vector<bbox_t> outs, vector<string> classes)
{
	//获取所有最佳检测框信息
	for (int i = 0; i < outs.size(); i++)
	{
		DrawBoxes(frame, classes, outs[i].obj_id, outs[i].prob, outs[i].x, outs[i].y,
			outs[i].x + outs[i].w, outs[i].y + outs[i].h);
	}
}

int main(void)
{
	string classesFile = "/home/zzp/yolov3/cfg/coco.names";
	string modelConfig = "/home/zzp/yolov3/cfg/yolov3-tiny.cfg";
	string modelWeights = "/home/zzp/yolov3/weights/yolov3-tiny.weights";

	//加载类别名
	vector<string> classes;
	ifstream ifs(classesFile.c_str());
	string line;
	while (getline(ifs, line)) classes.push_back(line);
	//加载网络模型,0是指定第一块GPU
	Detector detector(modelConfig, modelWeights, 0);

	string mode = "video";
	//图像
	if (mode == "image")
	{
		Mat frame = imread("/home/zzp/yolov3/img/test.jpeg");
		std::vector<bbox_t> result_vec = detector.detect(frame);
		Drawer(frame, result_vec, classes);
		cv::namedWindow("CV_WINDOW", CV_WINDOW_NORMAL);
		cv::imshow("CV_IMAGE", frame);
		cv::imwrite("/home/zzp/yolov3/img/result.jpg",frame);
		cv::waitKey(0);
	}
	//视频
	else if (mode == "video")
	{
		VideoCapture cap(0);
		Size size(640, 480);
		VideoWriter writer("/home/zzp/yolov3/data/result.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25, size);
		while (1)
		{
			Mat frame;
			cap >> frame;
			if (frame.empty()) 
				break;

			std::vector<bbox_t> result_vec = detector.detect(frame);
			//画图
			Drawer(frame, result_vec, classes);
			cv::imshow("YOLO V3 Camera", frame);
			for(int i = 0; i < result_vec.size(); i++)
			{    
                //检测到人就告知用户此人所在区域
				if(result_vec[i].obj_id == 0)
				{
					cout << "-----------------------------------------------------------------------" << endl;
					cout << "检测到一个人,他(她)位于视频中这个位置: " << endl;
					cout << "起始点(左上):(" << result_vec[i].x << "," << result_vec[i].y << ")"
						<< "\t宽与高:(" << result_vec[i].w << "," << result_vec[i].h << ")." << endl; 
					cout << "-----------------------------------------------------------------------" << endl;
				}
			}
            //ESC退出程序
			if(waitKey(3) == 27) break;
			writer << frame;
		}
		cv::destroyAllWindows();
		cap.release();
	}
    return 0;
}

2.5 编译

此时yolov3_test文件夹有如下文件:

#在终端中输入

cd yolov3_test

cmake .

make

结果如下图所示:

2.6 测试效果

 #测试图片(将源码string mode修改为 image)

cd yolov3_test

./yolov3

#测试视频(自己测试吧,我这里是没毛病的!)

3. 后续目标

探索Jetson nano串口功能,实现检测到目标后实时反馈数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【jetson nano】在ubuntu18.04下,c++调用链接库实现yolov3 的相关文章

  • VINS-FUSION-GPU在jetson nx上的实现

    需要安装经过修改的Ubuntu18系统 https span class token operator span span class token comment developer nvidia com zh cn embedded do
  • ubuntu18.04下cmake的安装

    一 使用安装命令 span class token function sudo span span class token function apt span span class token function install span c
  • ubuntu18.04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper

    ubuntu18 04安装Realsense D435i 摄像头的驱动SDK和ROS Wrapper 2022年更新 xff1a 安装教程同 xff1b 进更新安装包下载方式和下载链接 见文末 1 安装Realsense SDK 1 下载s
  • Ubuntu18.04+思岚激光雷达A2M7+ROS测试

    Ubuntu18 04 43 思岚激光雷达A2M7 43 ROS测试 1 测试环境搭建 测试环境 xff1a Ubuntu18 04 43 ROS Melodic测试工具 xff1a 思岚科技激光雷达A2M7 43 USB转接工具 2 下载
  • Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪

    文章目录 安装过程运行效果用python代码来打开CSI摄像头实现CSI摄像头目标跟踪报错 AttributeError 39 NoneType 39 object has no attribute 39 shape 39 运行效果 参考文
  • Nvidia Jetson Xavier 上使用CAN

    为了利于回忆 xff0c 将自己查询到的资料在这里记录一下 资料一 xff1a 20条消息 NVIDIA Xavier CAN weifengdq的专栏 CSDN博客 资料二 xff1a 英文版Enabling CAN on Nvidia
  • Ubuntu18.04+ROS+kalibr标定工具箱安装编译

    目录 前言 一 安装ROS 1 设置镜像源 2 更新软件包索引 3 安装ROS 4 测试ROS是否安装成功 二 安装kalibr melodic 1 kalibr简介 2 安装kalibr 3 测试kalibr 参考文献 xff1a 前言
  • 基于Jetson NX的模型部署

    系统安装 系统安装过程分为3步 xff1a 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https developer nvidia com jetson nano sd card image Wi
  • NVIDIA Jetson TX2 上手指南

    文章目录 一个性能强大的边缘设备我和 NVIDIA Jetson TX2 的初体验Fresh Your TX2为什么在第一步取消Host Machine可能遇到的问题 用上最好的性能 xff0c 小风扇跳舞吧 xff5e xff5e 运行一
  • Ubuntu18.04 ,安装opencv4.5.4

    背景 手眼标定时候 xff0c 需要用到opencv4的findChessboardCornersSB 所以需要下载opencv4 5 4 安装 Ubuntu 18 04 安装opencv4 2 0 遇到的问题 安装结束后 xff0c 出现
  • 在Jetson Nano上实现单目相机 apritag_ros识别

    一 xff0c apritag ros安装 最开始采用克隆源码编译的方式进行安装 xff0c 后来在Jetson nano上有opencv4与opencv3的依赖问题 xff0c 后来索性直接采用二进制安装 xff1a sudo apt g
  • jetson镜像克隆到固态再扩容简单方法

    jetson克隆方法很多 xff0c 我是自己把之前的sd镜像克隆做成img镜像了 然后烧写后之前是64g的后续烧写都是64g的不能把新的储存设备占满 这里有一个扩容和移植到固态的方法 主要分三步 xff1a 镜像克隆和烧录到sd卡使用固态
  • Jetson TX2零基础学习(二)——安装pip3、pytorch、torchvision

    目录 一 安装pip3 二 安装pytorch 三 安装torchvision 系列文章 大家好 xff0c 很开心又见面了 xff0c 这次接着上篇博客 xff0c 为大家详细介绍在Jetson TX2中搭环境的方法 一 安装pip3 首
  • Linux之Nano文本编辑器的使用

    nano 的使用其实很简单 你可以直接加上档名就能够开启一个旧档或新档 比如 nano text txt 第一行反白的部分 那仅是在宣告 nano 的版本的档名 File text txt 而已 之后你会看到最底下的三行 分别是档案的状态
  • Jetson AGX Xavier踩坑记录

    1 联网后 升级所有安装包 并且更新了一下系统 sudo apt get update 2 安装中文输入法 sudo apt get install fcitx googlepinyin 3 安装nano文本编辑器 比较喜欢这个文本编辑器
  • YOLOv3计算模型的mAP

    一 先测试一下大神的数据 在这里下载 https github com Cartucho mAP 1 解压之后如下图所示 input文件夹里面放的是测试集的ground truth 模型的测试结果 和测试集 scripts文件夹里面放的是一
  • 目标检测标签文件txt转成xml

    最近在用ppyolo训练好的模型对新采集的数据进行标记 再人工微调 减少从头打标签的时间 但是推理保存的结果都是txt格式的 想要在labelimg中可视化 那就需要将txt转换成xml 以下代码即可完成这一功能 coding UTF 8
  • yolov8系列[四]-yolov8模型部署

    yolov8系列 四 yolov8模型部署jetson平台 jetson平台 0 安装环境 1 下载源代码 2 pt 转换模型转换为 onnx 模型 3 配置deepstream yolo 4 运行 jetson平台 0 安装环境 下载to
  • [orin] nvidia orin 上配置tensorrt

    版本 jetpack 5 0 1 tensorrt 8 4 1 5 概述 tensorrt会跟着jetpack的包一起安装 系统本身自带的python是3 8的版本 tensorrt的python包位于这个路径下 cd usr lib py
  • Ubuntu使用darknet实现YOLOv4-tiny预训练模型测试+训练自己的数据集+评估自己的模型

    文章目录 1 使用YOLOv4 tiny预训练模型 2 训练自己的数据集 2 1 建立yolov4 tiny数据格式 2 2 开始训练 2 3 多GPU训练 3 评估自己的模型 参考博客 YOLOv4 tiny的原理本文不做讲解 只有应用方

随机推荐

  • 使用vs2019将libtorch或者网络打包成dll

    最近在搞一个程序 xff0c 需要把libtorch打包成dll xff0c 让别人使用 xff0c 在网上找了好久都没只有找到合适的答案 xff0c 最后在一个博主大哥那里找到了 xff0c 很是感激这位大哥与我们分享自己的经验 xff0
  • 【无标题】 libtorch C++ vs2017 debug模式可以正确加载模型,release模式错误

    转发 xff1a libtorch C 43 43 vs2017 debug模式可以正确加载模型 xff0c release模式错误 https blog csdn net weixin 43862688 article details 1
  • targetcli

    Linux IO LIO Target is an open source implementation of the SCSI target thathas become the standard one included in the
  • libtorch-加载预训练模型出现No such serialized submodule: ‘xxx‘

    今天在用libtorch训练得时候 xff0c 想用预训练模型加速训练 xff0c 居然报错 xff0c 以为是模型得问题 xff0c 然后重新训练了一个模型 xff0c 作为预训练模型 xff0c 还是报错 xff0c 一时找不到原因 x
  • QT学习之路-记事本

    1 在创建记事本之前先明白有哪些功能 xff1a 先创建一个菜单栏 xff0c 菜单栏是用来装各种功能的一个地方如上图所示 xff0c 文件 编辑所在的地方为菜单栏 xff0c span class token comment 创建菜单栏
  • yolov5-pytorch导出模型问题

    在官网提供的代码中 xff0c 很方便的可以把pytorch的模型转为libtorch的模型 xff0c 但是在转换前要明白自己转换后的模型是仅仅为了推理部署 xff0c 还是说用转换后的模型作为libtorch的预训练模型继续使用呢 xf
  • libtorch与pytorch索引张量值操作([:]与index)

    由于我最近在学习libtorch相关的东西 xff0c 所以就记录一下使用libtorch与pytorch一样对张量操作的语法 下面是我转载的一位大佬的文章 xff0c 这里只做技术探讨 xff0c 不做其他用途 想要学习的可以参考一下大佬
  • QT 报 QMetaObject::connectSlotsByName: No matching signal for on_btn_clicked()

    在QT中 xff0c 自己编写命名信号和槽的时候 xff0c 在用connect的时候报出以下错误 xff1a QMetaObject span class token double colon punctuation span conne
  • CRNN-模型转换问题Missing Errorin loading state_dict for CRNN

    在将CRNN pytorch模型转为libtorch模型的时候出现报错情况 xff0c Missing Errorin loading state dict span class token keyword for span CRNN 96
  • CRNN-libtorch模型推理的时候报错std:runtime_error

    使用libtorch模型推理的时候出现报错std runtime error 这里报错的情况一般是数据不同步的问题 xff0c 也就是说我们的模型是在gpu上 xff0c 而数据是在cpu上 xff0c 那么要做的一件事就是检查forwar
  • 数据集txt格式划分为多个txt文件夹

    简单记录一下数据标签txt格式划分为多个文件 xff0c 通常我们标注号的标签 xff0c 都是在一个txt文件夹中 xff0c 我们训练的时候需要把txt中的标签按照一定的比例划分为多个文件 xff0c 这里贴出划分为三个文件的代码 xf
  • 租用终端训练网络遇到的一些坑

    最近由于电脑配置和经济的问题 xff0c 想训练模型 xff0c 无奈只能选择在平台上训练了 xff0c 我使用的是AutoDL这个平台 xff0c 感觉还行 xff0c 还是挺划算 感兴趣或者需要的老铁可以点击蓝色字体进去尝试一下 接下来
  • CRNN-pytorch模型转libtorch模型踩坑记录

    这段时间一直在做CRNN文字识别的问题 xff0c 从pytorch中训练好的模型然后转到libtorch中去 xff0c 但是CRNN提供的代码没有转libtorch模型的部分 xff0c 于是就在网上到处乱找 xff0c 其中找到了这篇
  • 如何升级gcc版本

    下面将整个过程更新的过程写下来 xff0c 希望对有需要的人提供一些帮助 首先需要准备需要材料 xff1a gcc4 4 2版需要安装gmp4 2 0 43 和mpfr2 3 0 43 xff0c 到GMP的网站 xff08 http gm
  • 召回率与精确率的理解

    写在前面 识别精度主要由召回率 xff08 recall xff09 和精确率 xff08 precision xff09 两个指标决定 xff0c 在训练结束时可以通过re pre曲线来表示模型的准确度 xff0c 也可以根据二者之间的关
  • vs常见的错误集锦-error C4996: ‘wcstombs‘: This function or variable may be unsafe

    问题所在 xff1a 缺少宏定义 在使用wcstombs这个函数时遇到了题目所说的这个情况 xff0c 查找得知是缺少宏定义 xff0c 按照网上查找的问题 xff0c 在vs的配置中添加宏定义就行了 xff1b 在以下的位置 xff1a
  • Keil左侧Function列表无法显示(已解决)

    左侧的Functions框框会显示所有的库函数 xff0c 方便查找 查找的来源是工程所在的目录 如果把目录放得太深 xff0c 就会导致扫描不出来 在工程文件里面并列新建一个LIB文件夹用来存放 xff0c 把Inc和Src放进去 打开F
  • Linux服务器配置ulimit的常用参数介绍

    最近在小鸟云配置了一个Linux服务器 xff0c 实例是debian 7 5 系统 xff0c 在进行系统优化的过程中遇到一些有关Ulimit的事项 xff0c 整理了相关的参数介绍和配置介绍 xff0c 有需要可以简单看看 Ulimit
  • 【视觉检测C++接口实现】vs2019使用动态链接库yolo_cpp_dll调用yolov3

    目录 0 前言 1 准备工作 1 1 yolo cpp dll dll和yolo cpp dll lib的获取 1 2 pthreadGC2 dll和pthreadVC2 dll的获取 1 3 yolo v2 class hpp的获取 1
  • 【jetson nano】在ubuntu18.04下,c++调用链接库实现yolov3

    目录 0 前言 1 下载安装opencv 3 4 0 1 1 配置相应的以来库 1 2 下载opencv 3 4 0 xff08 源码 xff09 1 3 编译 xff08 时间较长 xff09 1 4 安装 1 5 配置opencv路径