1、darknet

darknet是一个c写的可以使用GPU方式来调用深度卷积网络来识别物体的深度学习框架,上手及其简单,易用。

1.1 编译

到官方网站下载后编译darknet,注意一定要下载cudn,编译gpu版本。为了演示方便,这里直接在windows上编译,使用cmake就行,依赖就是opencv,stb,还有就是cuda。

使用cuda静态库

将opencv和cuda,以及pthreads的头目录配置好,编译就行,生成darknet.exe,dark.lib 等等,下面要使用。

1.2 测试

生成darknet.exe,可以使用他来测试,命令行cmd打下命令,

darknet.exe detect cfg/yolov4.cfg yolov4.weights data/dog.jpg


这里将物体识别出来了,使用的是yolov4 的权重文件,当然可以使用自己训练的文件,下一节会讲。下面讲如何使用c++ 调用库文件去识别,并且把英文换成中文。

2、cfg 文件

所有的识别物体名称在cfg文件里面,打开文件可以看见物体的名字,都是英文。所以在代码里面可以使用查表得方式来查出中文名称。

const char *coco_names[] = { "人",
"自行车",
"汽车",
"机车",
"飞机","公共汽车","火车","卡车","船","","","","","","","","狗" };

里面省略了一些,可以自行翻译进去。

3、中文

在opencv这种环境下面写出中文并且要跨平台最简单的方式使用freetype,封装成和opencv一样的方式使用,

int putText(cv::Mat &img, const char    *text, cv::Point pos, cv::Scalar color);

4、show me the code

#define _CRT_SECURE_NO_WARNINGS
#define HAVE_STRUCT_TIMESPEC
#include<iostream>
#include<opencv2/opencv.hpp>
#include "../include/darknet.h"
#include "../include/yolo_v2_class.hpp"
#include "opencv2/opencv.hpp"
#include "c_opencv_text.h"
#pragma comment(lib,"../bin/dark.lib")
#define GPUconst char *coco_names[] = { "人",
"自行车",
"汽车",
"机车",
"飞机","公共汽车","火车","卡车","船","","","","","","","","狗" };int main()
{cv_freetype2 text("STXIHEI.TTF");const char *msg = "输出freetype2 汉字";//cfg 文件路径std::string cfg_file = "./cfg/yolov4.cfg";//weight 文件路径std::string weights_file = "./yolov4.weights";// 图像路径std::string image_file = "./data/dog.jpg";//设置yolo阈值float thresh = 0.5;// 创建检测对象Detector my_detector(cfg_file, weights_file, 0);//yolo检测std::vector<bbox_t> result_vec = my_detector.detect(image_file, thresh);//简单显示检测结果cv::Mat image = cv::imread(image_file);//遍历bbox_t结构体for (std::vector<bbox_t>::iterator iter = result_vec.begin(); iter != result_vec.end(); iter++){//画检测框cv::Rect rect(iter->x, iter->y, iter->w, iter->h);cv::rectangle(image, rect, cv::Scalar(255, 0, 0), 2);const char *str = coco_names[iter->obj_id];cv::Point pos(rect.x, rect.y);text.putText(image, str, pos,cv::Scalar(0,0,255));//cv::putText(image, str, cv::Point(rect.x, rect.y), 0, 1, cv::Scalar(255));}//显示效果图cv::imshow("result", image);cv::waitKey(0);return 0;
}

执行结果

首先如果是GPU版本,会显示出cudnn 和 显卡名称 ,这里是Geforce GTX 1660

结果也就成中文得了。

总结

windows下注意事项:
1 定义HAVE_STRUCT_TIMESPEC,否则和pthread的结构体会有重复定义
2 STXIHEI.TTF 从windows里面复制出来,放到可执行文件同目录下面
3 定义_CRT_SECURE_NO_WARNINGS
darknet本身还有许多可以探索得,执行效率也很高,掌握标注方法,训练自己得权重文件,并且需要知道一些概念和知识,例如他得配置文件里面也有一些需要深入理解得,使用事半功倍,不失为一个良好得AI框架。后面得这些会在下面一节里讲了。

使用darknet-dnn-GPU方式识别物体(一)相关推荐

  1. 利用modelarts和物体检测方式识别验证码

    近来有朋友让老山帮忙识别验证码.在github上查看了下,目前开源社区中主要流行以下几种验证码识别方式: tesseract-ocr模块: 这是HP实验室开发由Google 维护的开源 OCR引擎,内 ...

  2. OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体

    本博客是转载的 本文章源博客地址:https://blog.csdn.net/qq21497936/article/details/109194717 各位读者,知识无穷而人力有穷,要么改需求,要么找 ...

  3. wpf esc key 检测不到_自己动手丰衣足食!想让你的车能检测和识别物体?试试这个实验...

    全文共7733字,预计学习时长23分钟 来源:Pexels 几个月前,笔者有一些想法,想让自己的车能检测和识别物体.笔者之所以有如此想法,主要是因为已经见识了特斯拉的能力,虽然并不想马上买一辆特斯拉( ...

  4. 【触觉AI】麻省理工研发带550个传感器的触觉手套,通过触摸识别物体|湾区人工智能...

    点击上方蓝色字体,关注我们 麻省理工学院计算机科学与人工智能实验室(MIT-CSAIL)的研究人员近日开发了一种低成本的传感器手套,旨在使人工智能能够"弄清楚"人类如何通过触摸识别 ...

  5. 计算机识别键盘流程,通过计算机视觉的方式识别并判断键盘输入

    通过计算机视觉的方式识别并判断键盘输入 发布时间:2013/11/10 16:13:17 访问次数:1204 综合起来看,我们需要设计一种视觉处理算法,AT28HC256-12DM/883它可以在一幅 ...

  6. 训练自己haar-like特征分类器并识别物体(1)

    本系列文章旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别.该过程大致可以分为一下几个大步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本 ...

  7. php客户反馈发邮箱,PHP实现通过get方式识别用户发送邮件的方法

    本文实例讲述了PHP实现通过get方式识别用户发送邮件的方法.分享给大家供大家参考.具体如下: send_email.php如下: $conn=mysql_connect("localhos ...

  8. openmv识别物体并与单片机通信(STM32)

    openmv识别物体并与单片机通信(STM32) OPENMV端 物体识别 感光元件 寻找色块 画图 距离判断 距离 实际距离 串口发送 STM32段 串口接收 串口2配置 数据处理 数据显示 Ope ...

  9. 数字图像处理与机器视觉_简单自动智能识别物体程序(机器视觉+数字图像处理)...

    非常好的识别物体的机器视觉程序.附有完整的说明文档和代码.代码由matlab写成,并附有测试图片.图片中含有各种物体,通过数字图像处理的知识,自动识别出图片中的各类物体. 文件:n459.com/f/ ...

最新文章

  1. Visual Studio 2005 创建Windows服务程序(C#)
  2. 【算法数据结构Java实现】折半查找
  3. python一行没写完用什么隔离_在CherryPy中请求隔离是如何工作的。我不明白基本的想法...
  4. swoole mysql 并发_Swoole4 如何打造高并发的PHP7协程Mysql连接池?
  5. Codeforces 1106F Lunar New Year and a Recursive Sequence (线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
  6. 励遍图块中的实体_如何删除CAD中的顽固图层?【AutoCAD教程】
  7. install pyinstaller
  8. 【C#公共帮助类】 Image帮助类
  9. bzoj2662:[BeiJing wc2012]冻结
  10. C语言char对应的码,char码值对应列表大全
  11. python实现列表去重改变顺序_python实现文本去重且不打乱原本顺序
  12. StringUtil.isNotEmpty(转)
  13. 计算机技术应用于测量,在测量绘图中计算机技术的应用分析
  14. ShowType=0,● 交换机命令show interfaces type 0/port_# switchport|trunk用于显示中继连接的配置情况,下面 - 赏学吧...
  15. Q_D以及Q_Q指针理解
  16. 1183: 【入门】判断能否构成三角形
  17. HTML常用颜色RGB值
  18. 断点回归matlab,【独家发布】使用地理边界进行断点回归设计
  19. anemometer mysql_使用Anemometer分析MySQL慢查询记录
  20. 通过XtraBackup进行数据库表备份和表空间传输实例

热门文章

  1. 零基础入门图像语义分割必备概念整理,复制文件内容到Word观看效果更佳
  2. 实录:有钱男性的真实私生活
  3. 最简单的基于时间片轮转任务调度模型
  4. Asp学习者完整攻略之三:操作SQL:SQL基础:
  5. linux5 多用户模式,centos7设置以多用户模式启动
  6. 历史上杀伤力最大的笑话!!!
  7. 老师也不是什么好东西
  8. 百度Apollo自动驾驶车辆将在苏州太湖面向民众开放
  9. 蚂蚁森林:不存在网友反馈的“没有造林”的情况 干旱造成梭梭矮小
  10. 广汽埃安总经理古惠南:8分钟快充也不光是电池的问题 ,跟充电桩有关