如何使用 opencv 加载 darknet yolo 预训练模型?
如何使用 opencv 加载 darknet yolo 预训练模型?
opencv 版本 > 3.4 以上
constexpr const char *image_path = "darknet.jpg";//待检测图片
constexpr const char *darknet_cfg = "darknet.cfg";//网络文件
constexpr const char *darknet_weights = "darknet.weights";//训练模型
const std::vector<std::string> class_labels = {"darknet","yolo"};//类标签
void darknetDetection(const std::string &path,const std::string &darknet_cfg,const std::string &darknet_weights,std::vector<std::string> class_labels,float confidenceThreshold)
{
// 加载模型
cv::dnn::Net net = cv::dnn::readNetFromDarknet(darknet_cfg,darknet_weights);
// 加载标签集
std::vector<std::string> classLabels = class_labels;
// 读取待检测图片
cv::Mat img = cv::imread(path);
cv::Mat blob = cv::dnn::blobFromImage(img,1.0/255.0,{416,416},0.00392,true);
net.setInput(blob,"data");
// 检测
cv::Mat detectionMat = net.forward("detection_out");// 6 845 1 W x H x C
// 获取网络每层的用时并获取总用时
std::vector<double> layersTimings;
double freq = cv::getTickFrequency() / 1000;
double time = net.getPerfProfile(layersTimings) / freq;
std::ostringstream ss;
ss << "detection time: " << time << " ms";
// 绘制总用时至原始图片
cv::putText(img, ss.str(), cv::Point(20, 20), 0, 0.5, cv::Scalar(0, 0, 255));
// 遍历所有结果集
for(int i = 0;i < detectionMat.rows;++i){
const int probability_index = 5;
const int probability_size = detectionMat.cols - probability_index;
float *prob_array_ptr = &detectionMat.at<float>(i, probability_index);
size_t objectClass = std::max_element(prob_array_ptr, prob_array_ptr + probability_size) - prob_array_ptr;
float confidence = detectionMat.at<float>(i, (int)objectClass + probability_index);
// 比较置信度并绘制满足条件的置信度
if (confidence > confidenceThreshold)
{
float x = detectionMat.at<float>(i, 0);
float y = detectionMat.at<float>(i, 1);
float width = detectionMat.at<float>(i, 2);
float height = detectionMat.at<float>(i, 3);
int xLeftBottom = static_cast<int>((x - width / 2) * img.cols);
int yLeftBottom = static_cast<int>((y - height / 2) * img.rows);
int xRightTop = static_cast<int>((x + width / 2) * img.cols);
int yRightTop = static_cast<int>((y + height / 2) * img.rows);
cv::Rect object(xLeftBottom, yLeftBottom,xRightTop - xLeftBottom,yRightTop - yLeftBottom);//x y w h
cv::rectangle(img, object, cv::Scalar(0, 0, 255), 2, 8);
// 判断类id是否符合标签范围并绘制该标签,也就是矩阵的下标索引
if (objectClass < classLabels.size())
{
cv::String label = cv::String(classLabels[objectClass]) + ": " + std::to_string(confidence);
int baseLine = 0;
cv::Size labelSize = cv::getTextSize(label,cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
cv::rectangle(img, cv::Rect(cv::Point(xLeftBottom, yLeftBottom),cv::Size(labelSize.width, labelSize.height + baseLine)),cv::Scalar(255, 255, 255), cv::FILLED);
cv::putText(img, label, cv::Point(xLeftBottom, yLeftBottom + labelSize.height),cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0));
}
}
}
// 显示图片
cv::imshow("Darknet",img);
cv::waitKey(0);
}
如何使用 opencv 加载 darknet yolo 预训练模型?的更多相关文章
- PyTorch保存模型与加载模型+Finetune预训练模型使用
Pytorch 保存模型与加载模型 PyTorch之保存加载模型 参数初始化参 数的初始化其实就是对参数赋值.而我们需要学习的参数其实都是Variable,它其实是对Tensor的封装,同时提供了da ...
- qt: 打不开png图像以及opencv加载中文路径问题;
经过亲测, QT(版本: 5.9.4)提供的QImageReader或者函数load在加载本地png图像时,均会提示失败, 按照网上的方法,将Qt plugins下的imageformats 拷贝到e ...
- 预加载与智能预加载(iOS)
来源:Draveness(@Draveness) 链接:http://www.jianshu.com/p/1519a5302141 前两次的分享分别介绍了 ASDK 对于渲染的优化以及 ASDK 中使 ...
- Opencv加载网络图片
opencv加载网络图片 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; usin ...
- 【原生JS】图片预加载之无序预加载
图片预加载之无序预加载 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...
- 文字检测模型EAST应用详解 ckpt pb的tf加载,opencv加载
参考链接:https://github.com/argman/EAST (项目来源) https://github.com/opencv/opencv/issues/12491 (遇到的问题) ...
- OpenCV加载图像并显示
从文件中读取一直一张图片,并加载出来 代码: #include "stdafx.h" #include "iostream" using namespace s ...
- 图片预加载 js css预加载
图片预加载, 效果非常明显, 特别是有多个图, 方法很简单 , 体验提升了不少 <div class="hidden"> <script type= ...
- opencv 加载 修改 保存 图像
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; /* 1 加载图像 cv::imre ...
随机推荐
- django 将model转换为字典
from django.forms.models import model_to_dict from projects.models import ProjectInformation site = ...
- 无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
今年年初Facebook AI Research发布了一篇名为Beyond Frontal Faces: Improving Person Recognition Using Multiple Cue ...
- sublime text 2自定义代码片段
本文引用 http://www.blogjava.net/Hafeyang/archive/2012/08/17/how_to_create_code_snippet_in_subline_tex ...
- js post
在进行html5页面的设计时,希望用户加载完成页面后,进行交互时只改变其中的某些元素的内容,这样更像本地APP的呈现效果,但是HTML中的post.get如果使用submit进行提交的话会直接使用返回 ...
- Python pycurl使用
pycurl的学习 (2013-09-26 10:40:31) 转载▼ 分类: python pycurl的使用 pycurl是curl的一个python版本. pycurl的使用说明: pycu ...
- UDP传输原理及数据分片——学习笔记
TCP传输可靠性是:TCP协议里自己做了设计来保证可靠性. IP报文本身是不可靠的 UDP也是 TCP做了很多复杂的协议设计,来保证可靠性. TCP 面向连接,三次握手,四次挥手 拥塞机制 重传机制 ...
- Maven clean命令不能执行问题Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
执行clean tomcat7:run时Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (de ...
- px像素单位与IOS像素单位的换算
本文转载至 http://blog.csdn.net/fanyuna/article/details/24032663 30px转成磅为单位=22磅=二号 磅=(像素/96)*72 =(30/96) ...
- Spring中bean的作用范围
singleton作用域: Spring的scope的默认值是singleton Spring 只会为每一个bean创建一个实例,并保持bean的引用. <bean id="bean的 ...
- 部分常用dos命令
Microsoft Windows XP [版本 ] (C) 版权所有 - Microsoft Corp. C:\Documents and Settings\Administrator>d: ...