软件版本信息
软件版本信息
jetpack4.6cuda10.2tensorrt8.0.1opencv4.5.4
导出yolov5 engine文件
前面有一篇文章详细说明了如何在jetson nano上安装yolov5,然后运行,这里只需在导出的时候导出engine模型文件支持,命令行如下:
python export.py --weights yolov5.pt --include onnx engine这里需要注意的tensorrt版本一致问题。如果engine文件不是在jetson nano上生成的,而在其他pc机器上生成,则tensorrt版本必须与jetson nano上使用的版本保持一致。
tensorrt推理
首先创建编译cmakelists.txt文件,然后把下面的内容copy进去:
cmake_minimum_required( version 2.8 )# 声明一个 cmake 工程project(yolov5_tensorrt_demo)# 设置编译模式#set( cmake_build_type release )#添加opencv库#指定opencv版本,代码如下#find_package(opencv 4.5.4 required)#如果不需要指定opencv版本,代码如下find_package(opencv required)find_package(cuda required)include_directories( ./src/)#添加opencv头文件include_directories(${opencv_include_dirs})# 添加cuda10.2头文件include_directories(/usr/local/cuda-10.2/include)link_directories(/usr/local/cuda-10.2/lib64)# tensorrtinclude_directories(/usr/local/cuda/include)link_directories(/usr/lib/arrch64-linux-gnu)#显示opencv_include_dirs的值message(${opencv_include_dirs})file(glob_recurse test_src src/*.cpp )# 添加一个可执行程序# 语法:add_executable( 程序名 源代码文件 )add_executable(target main.cpp ${test_src})# 将库文件链接到可执行程序上target_link_libraries(target nvinfer)target_link_libraries(target cudart)target_link_libraries(target ${opencv_libs})
构建的目录结构如下
然后在jetson nano上打开终端命令行输入:
mkdir buildcd buildcmake ..
运行结果如下:
然后运行make
成功运行之后,执行编译生成的target文件:
./target
运行推理与显示界面如下:
错误与修正
01错误一:
error: 'cudamalloc' was not declared in this scope
这个是因为没有添加下面的头文件:
#include #include
添加之后就可以解决。
02错误二:
engine文件版本一致导致,原因是我之前导出的是在tensorrt8.4版本,jetsonnano是8.0的,重新在jetson nano上导出一下就可以解决。 最后贴一下,演示的程序main c++代码:
#include #include #include #include #include tensorrt_yolov5_demo.husing namespace cv;std::string label_map = classes.txt;int main(int argc, char** argv) { std::vector classnames; std::ifstream fp(label_map); std::string name; while (!fp.eof()) { getline(fp, name); if (name.length()) { classnames.push_back(name); } } fp.close(); auto detector = std::make_shared(); detector->initconfig(yolov5s.engine, 0.25, 0.25); std::vector results; cv::videocapture capture(example_dsh.mp4); cv::mat frame; while (true) { bool ret = capture.read(frame); if (!ret) { break; } detector->detect(frame, results); for (detectresult dr : results) { cv::rect box = dr.box; cv::puttext(frame, classnames[dr.classid], cv::point(box.tl().x, box.tl().y - 10), cv::font_hershey_simplex, .5, cv::scalar(0, 0, 0)); } cv::imshow(yolov5-6.1 + tensorrt8.4 + jetson nano - by gloomyfish, frame); char c = cv::waitkey(1); if (c == 27) { // esc 退出 break; } // reset for next frame results.clear(); } cv::waitkey(0); cv::destroyallwindows(); return 0;}
中国联通清网计划由来已久,2G网络清退进行中
ROHM开发出采用4引脚封装的SiC MOSFET “SCT3xxx xR”系列
体脂秤到底靠不靠谱
基于智能网关的能耗监测系统的建设方案
水厂常用的流量计仪表是什么
在Jetson Nano上使用TensorRT C++实现YOLOv5模型推理
步进电机使用总结——噪声与振动的抑制
用简单的电路增压电换能器声输出
基于FPGA的教学机器人的平台的设计
福日电子转让部分业务股权 将关注LED光电等主营业务的发展
网约车行业步入以服务竞争为主的2.0时代
时分多路复用(TDM),时分多路复用(TDM)的原理是什么?
探索虚拟主参考时钟和5G网络授时架构
verilog编译指令_verilog编译器指示语句(数字IC)
内置诺基亚地图 WP8系统新功能泄露
保时捷可调节式车顶专利,让驾乘人员体验更好
忆芯科技连续第二年入选中国IC独角兽榜单
针对工业和可再生能源应用推出采用紧凑型SMD封装CCPAK的GaN FET
小米8月25日举行发布会 新品确定是红米系
距离OPPOR11发布会还有9天,这些你都知道了嘛?