16、JETSON NANO 对特定目标进行识别和gpio输出高低电平报警
基本思想:需要对特定目标进行识别和报警,TensorRT做的的效果会极其好,但是没时间,先使用ncnn的yolo-fastest做个例子吧,后期修改为TensorRT框架识别吧,该博客主要学习如何控制gpio的输入输出电平
首先JETSON NANO装opencv和基本的配置库;
创建一个工程,然后引入NCNN的基本库,
ubuntu@ubuntu:~/yolo5$ tree -L 2
.
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── main
│ └── Makefile
├── CMakeLists.txt
├── include
│ └── ncnn
├── lib
│ ├── cmake
│ └── libncnn.a
├── main.cpp
└── model├── yolo-fastest.bin└── yolo-fastest.param7 directories, 9 files
CMakelists.txt的设置
cmake_minimum_required(VERSION 3.10)
project(untitled3)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")include_directories(${CMAKE_SOURCE_DIR}/include/ncnn/)
#导入ncnn
add_library(libncnn STATIC IMPORTED)
set_target_properties(libncnn PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libncnn.a)
find_package(OpenCV REQUIRED)
set(CMAKE_CXX_STANDARD 11)add_executable(main main.cpp)
target_link_libraries(main libncnn ${OpenCV_LIBS})
JETSON NANO 的源码
#include <string>
#include <opencv4/opencv2/opencv.hpp>
#include <opencv4/opencv2/core.hpp>
#include <opencv4/opencv2/highgui.hpp>
#include <opencv4/opencv2/imgproc.hpp>
#include <opencv4/opencv2/objdetect.hpp>
#include <opencv4/opencv2/imgproc/types_c.h>
#include <opencv4/opencv2/videoio.hpp>
#include "benchmark.h"
#include "cpu.h"
#include "datareader.h"
#include "net.h"
#include "gpu.h"#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
using namespace cv;
using namespace ncnn;
int demo(cv::Mat& image, ncnn::Net &detector, int detector_size_width, int detector_size_height)
{static const char* class_names[] = {"background","aeroplane", "bicycle", "bird", "boat","bottle", "bus", "car", "cat", "chair","cow", "diningtable", "dog", "horse","motorbike", "person", "pottedplant","sheep", "sofa", "train", "tvmonitor"};cv::Mat bgr = image.clone();int img_w = bgr.cols;int img_h = bgr.rows;ncnn::Mat in = ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR2RGB,\bgr.cols, bgr.rows, detector_size_width, detector_size_height);//数据预处理const float mean_vals[3] = {0.f, 0.f, 0.f};const float norm_vals[3] = {1/255.f, 1/255.f, 1/255.f};in.substract_mean_normalize(mean_vals, norm_vals);ncnn::Extractor ex = detector.create_extractor();ex.set_num_threads(8);ex.input("data", in);ncnn::Mat out;ex.extract("output", out);for (int i = 0; i < out.h; i++){int label;float x1, y1, x2, y2, score;float pw,ph,cx,cy;const float* values = out.row(i);x1 = values[2] * img_w;y1 = values[3] * img_h;x2 = values[4] * img_w;y2 = values[5] * img_h;score = values[1];label = values[0];//处理坐标越界问题if(x1<0) x1=0;if(y1<0) y1=0;if(x2<0) x2=0;if(y2<0) y2=0;if(x1>img_w) x1=img_w;if(y1>img_h) y1=img_h;if(x2>img_w) x2=img_w;if(y2>img_h) y2=img_h;cv::rectangle (image, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(255, 255, 0), 1, 1, 0);char text[256];sprintf(text, "%s %.1f%%", class_names[label], score * 100);int baseLine = 0;cv::Size label_size = cv::getTextSize(text, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);cv::putText(image, text, cv::Point(x1, y1 + label_size.height),cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0));std::cout<<class_names[label]<<endl;if( class_names[label]=="dog") //识别到狗就点亮 检测不到狗 就不点亮{std::cout<<class_names[label]<<endl;system("echo 1 > /sys/class/gpio/gpio79/value");system("echo 0 > /sys/class/gpio/gpio79/value");}}return 0;
}string gstreamer_pipeline (int capture_width, int capture_height, int display_width, int display_height, int framerate, int flip_method)
{return "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=(int)" + to_string(capture_width) + ", height=(int)" +to_string(capture_height) + ", format=(string)NV12, framerate=(fraction)" + to_string(framerate) +"/1 ! nvvidconv flip-method=" + to_string(flip_method) + " ! video/x-raw, width=(int)" + to_string(display_width) + ", height=(int)" +to_string(display_height) + ", format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink";
}//摄像头测试
int test_cam(){//定义yolo-fastest VOC检测器ncnn::Net detector;detector.load_param("/home/li/yolo5/model/yolo-fastest.param");detector.load_model("/home/li/yolo5/model/yolo-fastest.bin");int detector_size_width = 320;int detector_size_height = 320;cv::Mat frame;int capture_width = 1280 ;int capture_height = 720 ;int display_width = 1280 ;int display_height = 720 ;int framerate = 60 ;int flip_method = 0 ;string pipeline = gstreamer_pipeline(capture_width,capture_height,display_width,display_height,framerate,flip_method);std::cout << "使用gstreamer管道: \n\t" << pipeline << "\n";//管道与视频流绑定cv::VideoCapture cap(pipeline, CAP_GSTREAMER); // 该操作是外接 CSI 普通摄像头system("echo 79 > /sys/class/gpio/export");system("echo out > /sys/class/gpio/gpio79/direction");// 对应NVIDIA Jetson Nano 对应pin脚12cv::VideoCapture cap(1); // 该操作是外接 usb 普通摄像头while (true){cap >> frame;double start = ncnn::get_current_time();demo(frame, detector, detector_size_width, detector_size_height);double end = ncnn::get_current_time();double time = end - start;printf("Time:%7.2f \n",time);cv::imshow("demo", frame);//system("echo 1 > /sys/class/gpio/gpio79/value");//system("echo 0 > /sys/class/gpio/gpio79/value");cv::waitKey(1);}return 0;
}
int main()
{test_cam();return 0;
}
后期改TensorRT,,,,原谅我~~ 主要想引入一个例子 如何在nano上控制gpio口
附录接口图
16、JETSON NANO 对特定目标进行识别和gpio输出高低电平报警相关推荐
- Jetson nano 摄像头二维码识别 Opencv zbar QT
环境以及前言 环境 jetson nano Linux ubuntu 18.4 QT版本 QT5.98 摄像头 Csi摄像头 Opencv Jetson nano 自带的-.- 应该是4.1?不太清楚 ...
- Jetson nano部署Yolov5目标检测 + Tensor RT加速(超级详细版)
一.准备工具 二.烧录 三.搭配环境 四.试跑Yolov5 五.tensorRT部署yolov5 前言: 在工作或学习中我们需要进行 ...
- 基于Jetson Nano与STM32通信的颜色识别与伺服驱动器控制
基于Jetson Nano与STM32通信的颜色识别与伺服驱动器控制 jetrson nano部分 颜色识别 串口通信 数据传输 完整代码 stm32 部分 数据解读 电机控制 主函数 电机加减速 硬 ...
- Jetson Nano and VIM3硬件参数对比及目标检测性能对比
文章目录: 1 Jetson Nano and VIM3硬件参数对比及目标检测性能对比 2 Jetson nano在yolov4目标检测性能 3 VIM在yolov3.yolov3-tiny.yolo ...
- Jetson Nano目标检测手把手实战教程(pytorch训练、tensorrt推理,含完整代码和数据)
目录 一.概述 1.1 深度学习和边缘计算 1.2 Jetson Nano简介 二.深度学习环境安装 2.1 Pytorch框架 2.2 在Jetson Nano上安装Pytorch 三.算法原理 四 ...
- 【AI达人创造营三期】Jetson Nano篮球和运动员检测分割的部署
简介 1.1 背景与意义简介 目标跟踪是计算机视觉领域的一个重要问题,目前广泛应用在体育赛事转播.安防监控和无人机.无人车.机器人等领域.在篮球比赛的场景中,主要是针对篮球和运动员的检测.通过对这些目 ...
- 英伟达 nano 新手必读:Jetson Nano 2GB 开发者套件入门指南
引言 NVIDIA®Jetson Nano™ 2GB开发工具包是教学.学习和开发人工智能和机器人技术的理想选择.有了一个活跃的开发人员社区并准备好构建开源项目,您将找到开始工作所需的所有资源.它以低廉 ...
- NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁
在前面的文章中,我已经想大家介绍了NVIDIA Jetson Nano这个板子.今天我将给大家介绍NVIDIA Jetson Nano最重要的一个接口–GPIO.Jetson Nano 和树莓派一样作 ...
- Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测、手势识别)
Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测.手势识别) 此文确保你可以正确搭建jetson nano环境,并跑通官方"hello AI world&q ...
最新文章
- 死锁产生的4个必要条件,如何检测,解除死锁
- Intent跳转传list集合
- 点击出现黑色背景的解决
- 【AI视野·今日NLP 自然语言处理论文速览 第二十四期】Thu, 30 Sep 2021
- java设计与模式_设计模式《JAVA与模式》之状态模式
- Log4j日志使用记录
- 手机APP游戏/软件/资源下载站/软件盒子源码
- 强化学习之Q-learning简介
- 详解二叉树的非递归遍历
- 第一章,用行列式解线性方程组,02-二阶与三阶行列式
- canvas制作呼吸灯
- c语言中竖线的作用,c语言中一条竖线是什么符号?
- 只有蓝色www.zcool.com.cn
- 流媒体、直播解决方案及趋势
- 【研发管理】三手项目 接盘时 必须要做的四件事
- python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1)
- python 版本错误导致的 roscore 问题
- 在线学习和现场学习的比较
- Java实现蓝桥杯 算法提高 身份证号码升级
- 测量相声 同志们过节出个节目有福了
热门文章
- 桌面提醒工具 Active Desktop Calendar
- excel分类_EXCEL分类汇总 快速统计数据
- BlueTeam 取证
- 春眠不觉晓,SQL 知多少?
- Causal Language Modeling和Conditional Generation有什么区别
- 供货理想等近20家主流车企,移远通信5G车载模组交付量大幅增长
- Java学习 (二) 在MAC终端上运行Java程序
- 一起做个刚需的“打卡”软件?对不起,要蹲5年6个月...
- 广东迅视资管 有温度更要守法度
- [译]在HealthKit中用 Swift 进行睡眠分析