基本思想:需要对特定目标进行识别和报警,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输出高低电平报警相关推荐

  1. Jetson nano 摄像头二维码识别 Opencv zbar QT

    环境以及前言 环境 jetson nano Linux ubuntu 18.4 QT版本 QT5.98 摄像头 Csi摄像头 Opencv Jetson nano 自带的-.- 应该是4.1?不太清楚 ...

  2. Jetson nano部署Yolov5目标检测 + Tensor RT加速(超级详细版)

            一.准备工具   二.烧录         三.搭配环境         四.试跑Yolov5         五.tensorRT部署yolov5 前言: 在工作或学习中我们需要进行 ...

  3. 基于Jetson Nano与STM32通信的颜色识别与伺服驱动器控制

    基于Jetson Nano与STM32通信的颜色识别与伺服驱动器控制 jetrson nano部分 颜色识别 串口通信 数据传输 完整代码 stm32 部分 数据解读 电机控制 主函数 电机加减速 硬 ...

  4. Jetson Nano and VIM3硬件参数对比及目标检测性能对比

    文章目录: 1 Jetson Nano and VIM3硬件参数对比及目标检测性能对比 2 Jetson nano在yolov4目标检测性能 3 VIM在yolov3.yolov3-tiny.yolo ...

  5. Jetson Nano目标检测手把手实战教程(pytorch训练、tensorrt推理,含完整代码和数据)

    目录 一.概述 1.1 深度学习和边缘计算 1.2 Jetson Nano简介 二.深度学习环境安装 2.1 Pytorch框架 2.2 在Jetson Nano上安装Pytorch 三.算法原理 四 ...

  6. 【AI达人创造营三期】Jetson Nano篮球和运动员检测分割的部署

    简介 1.1 背景与意义简介 目标跟踪是计算机视觉领域的一个重要问题,目前广泛应用在体育赛事转播.安防监控和无人机.无人车.机器人等领域.在篮球比赛的场景中,主要是针对篮球和运动员的检测.通过对这些目 ...

  7. 英伟达 nano 新手必读:Jetson Nano 2GB 开发者套件入门指南

    引言 NVIDIA®Jetson Nano™ 2GB开发工具包是教学.学习和开发人工智能和机器人技术的理想选择.有了一个活跃的开发人员社区并准备好构建开源项目,您将找到开始工作所需的所有资源.它以低廉 ...

  8. NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁

    在前面的文章中,我已经想大家介绍了NVIDIA Jetson Nano这个板子.今天我将给大家介绍NVIDIA Jetson Nano最重要的一个接口–GPIO.Jetson Nano 和树莓派一样作 ...

  9. Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测、手势识别)

    Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测.手势识别) 此文确保你可以正确搭建jetson nano环境,并跑通官方"hello AI world&q ...

最新文章

  1. 死锁产生的4个必要条件,如何检测,解除死锁
  2. Intent跳转传list集合
  3. 点击出现黑色背景的解决
  4. 【AI视野·今日NLP 自然语言处理论文速览 第二十四期】Thu, 30 Sep 2021
  5. java设计与模式_设计模式《JAVA与模式》之状态模式
  6. Log4j日志使用记录
  7. 手机APP游戏/软件/资源下载站/软件盒子源码
  8. 强化学习之Q-learning简介
  9. 详解二叉树的非递归遍历
  10. 第一章,用行列式解线性方程组,02-二阶与三阶行列式
  11. canvas制作呼吸灯
  12. c语言中竖线的作用,c语言中一条竖线是什么符号?
  13. 只有蓝色www.zcool.com.cn
  14. 流媒体、直播解决方案及趋势
  15. 【研发管理】三手项目 接盘时 必须要做的四件事
  16. python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1)
  17. python 版本错误导致的 roscore 问题
  18. 在线学习和现场学习的比较
  19. Java实现蓝桥杯 算法提高 身份证号码升级
  20. 测量相声 同志们过节出个节目有福了

热门文章

  1. 桌面提醒工具 Active Desktop Calendar
  2. excel分类_EXCEL分类汇总 快速统计数据
  3. BlueTeam 取证
  4. 春眠不觉晓,SQL 知多少?
  5. Causal Language Modeling和Conditional Generation有什么区别
  6. 供货理想等近20家主流车企,移远通信5G车载模组交付量大幅增长
  7. Java学习 (二) 在MAC终端上运行Java程序
  8. 一起做个刚需的“打卡”软件?对不起,要蹲5年6个月...
  9. 广东迅视资管 有温度更要守法度
  10. [译]在HealthKit中用 Swift 进行睡眠分析