darknet--目标检测开源库学习记录

news/2024/7/10 23:50:06 标签: yolo, darknet, 计算机视觉

文章目录

    • 1. 效果展示
    • 2. 安装方法
    • 3. 常用命令
    • 4. GPU加速
    • 5. 安装opencv
    • 6. 几点小提示
    • 7. 使用网络摄像头(手机)之一
    • 8. 使用网络摄像头(手机)之二
    • 9. 保存检测视频到本地

1. 效果展示

官网链接

darknet 实现了c语言版本的yolo v3, 不依赖任何其他库. 因此安装非常简单.

效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2. 安装方法

如何安装?

git clone https://github.com/pjreddie/darknet
cd darknet
make

然后下载yolov3权重, 放到darknet根目录下
wget https://pjreddie.com/media/files/yolov3.weights

执行命令./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg 测试一下效果, 生成的图片保存在darknet根目录下


3. 常用命令

以下是几个常用的检测命令

# 调用摄像头进行目标检测
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

# 对视频进行目标检测
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video_file>

# 检测单独的一张图片
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

# 设置阈值的检测
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0

# 对多张图片的检测, 输入命令后, 输入图片路径
./darknet detect cfg/yolov3.cfg yolov3.weights

# 指定摄像头设备, 加参数 -c
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 1

4. GPU加速

用CPU进行测试非常的慢, 下面是官网的描述, 一张图10s(在我的电脑上还不止)
在这里插入图片描述

使用GPU可以大幅提高速度, 提升有多少呢? 在我的Geforce 940MX 辣鸡显卡上, 都可以实现比较卡顿的摄像头目标检测了! 如果是高性能的显卡, 想必会非常流畅(羡慕)

当然, 用GPU是需要安装好cuda的. 我用的是cuda 10.0

如何开启GPU模式? 修改makefile, GPU=0 改成GPU=1, 然后重新make.
在这里插入图片描述


5. 安装opencv

建议安装C++版本的opencv, 安装好了同样是改成OPENCV=1. (因为装了opencv他才会在屏幕上显示出检测的结果)

如何在ubuntu 18.04 上安装opencv 3.4.6 ? 看这篇教程, 亲测有效. 除了后期有一丁点的不同基本顺利安装.


6. 几点小提示

查看./cfg/yolov3.cfg 文件, 有两种模式, 根据自己的实际需要进行注释. 比如说我们做测试, 就改成testing模式.
在这里插入图片描述
如果GPU太垃圾(比如我), 一测试就报显存溢出错误, 可以设置下面的width 和 height, 将它设小一点就可以了.
在这里插入图片描述


7. 使用网络摄像头(手机)之一

使用网络摄像头, 用手机作为外接摄像头而不只是笔记本的摄像头来做目标检测, 下面是效果图.

在这里插入图片描述
我使用的是Droidcam ip摄像头

手机需要下载Droidcam app, 可以直接在google play上下载

官网: http://www.dev47apps.com/

以及一篇非常好的安装教程

ubuntu 18.04 (linux)下的安装方法是
复制下面这段代码做一个bash脚本, 然后执行它.

cd /tmp/
sudo apt-get install linux-headers-`uname -r`
bits=`getconf LONG_BIT`
wget https://www.dev47apps.com/files/600/droidcam-${bits}bit.tar.bz2
[[ ${bits} -eq 32 ]] && checksum=90cd43b4745c51cffedc352090912eb1
[[ ${bits} -eq 64 ]] && checksum=9507c0b738f427c5f1dde7b2a364fdfb
echo "${checksum}  droidcam-${bits}bit.tar.bz2" | md5sum -c --
# OK?
tar xjf droidcam-${bits}bit.tar.bz2
cd droidcam-${bits}bit/
sudo ./install

建立启动器
gedit ~/.local/share/applications/droidcam.desktop
拷贝下面的代码进去

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=DroidCam
Exec=droidcam
Comment=Use your Android phone as a wireless webcam or an IP Cam!
Icon=droidcam
Categories=GNOME;GTK;Video;
Name[it]=droidcam

就可以找到图形程序的图标

然后就可以使用wifi连接手机上的摄像头. 也可以用usb连接的方式.
在这里插入图片描述


用命令ls /dev/video* 查看电脑上的摄像头设备. 目前有两个. 这个video1就是ip摄像头了.
在这里插入图片描述
在使用darknet的时候, 在后面加参数-c 1 就可以指定摄像头设备了.

比如./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 1


8. 使用网络摄像头(手机)之二

但如果用ip摄像头的话, 一来比较卡顿, 二来如果在外面没有wifi怎么办呢? 那么用usb就是个更好的选择. 参考这篇文章弄好了usb摄像头
https://xpenxpen.iteye.com/blog/2182397

安装adb sudo apt-get install adb

查看设备adb devices

输入adb forward tcp:4747 tcp:4747 启用摄像头 (改成自己的端口)

手机打开开发者模式, 进开发者选项把usb调试打开

客户端开启usb模式

在这里插入图片描述


9. 保存检测视频到本地

darknet官方似乎并没有一个简单的参数可以将检测的视频保存在本地, 找了好多文章后终于找到一个靠谱的方法.

来源链接

在这里插入图片描述

思路是, darknet提供了一种参数, -prefix, 可以将视频检测的结果输出为一系列的图片. 我们将这些图片保存在tmp文件夹, 然后使用视频转化工具ffmpeg 将这一系列的图片转化为视频.

下面是修改了的bash脚本, 保存为run.sh

#!/bin/bash

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights $1 -prefix ./tmp/pictures
ffmpeg -i ./tmp/pictures_%08d.jpg $2

rm ./tmp/pictures_*.jpg

我稍微修改了github issue上的脚本, 使得我们可以指定输入和输出的文件.
执行这条命令就可以保存视频了

./run.sh ./data/test-5.mp4 ./outputfiles/test-5.mp4

调用摄像头然后保存的话, 也稍微修改一下脚本就好了


perfect


http://www.niftyadmin.cn/n/1686555.html

相关文章

矩阵的卷积核运算(一个简单小例子的讲解)

卷积运算&#xff1a;假设有一个卷积核h&#xff0c;就一般为3*3的矩阵&#xff1a;有一个待处理矩阵A&#xff1a;h*A的计算过程分为三步 第一步&#xff0c;将卷积核翻转180&#xff0c;也就是成为了第二步&#xff0c;将卷积核h的中心对准x的第一个元素&#xff0c;然后对应…

java学习-类的比较与排序

文章目录1. static关键字2. 自定义toString()方法3. 自定义compareTo()方法4. java.util.List 等工具5. 完整代码今天第一天学习java, 看菜鸟教程语言介绍有点无聊, 毕竟语法知识和其他语言有大量重叠. 就自己学习了解一下java类比较和排序的知识. 做中学. 估计以后这个知识点应…

在集群中各节点上离线安装python3.6

说明&#xff1a;该计算node100为主节点&#xff0c;可连外网&#xff0c;其他节点通过内部网络连接&#xff0c;无法连接外网。 1.假设编译环境已经准备完善。否则执行下面命令yum groupinstall Development Toolsyum install zlib-devel bzip2-devel openssl-develncurses-d…

SQL学习笔记-基本操作

文章目录0. 推荐书 << sql必知必会>>1. 安装好mysql后, 进入mysql2. 显示所有数据库3. 创建数据库4. 选定使用某个数据库5. 显示数据库的表6. 查看表的列信息7. 从表table_1中选定所有列8. 选出其中的两列9. 新建一个表(增)10. 删除数据表 (删)11. 插入一行到表中(…

两台linux之间拷贝文件(简单高效)

将文件从本地拷贝到服务器&#xff1a;将当前目录下的filename文件拷贝到远程服务器192.168.2.208的/home/username/Documents下&#xff0c;如果不用root可能由于权限不够&#xff0c;无法拷贝。 scp filename root192.168.2.208&#xff1a;/home/username/Documents 如果出现…

IDEA及其他开发工具日常使用指南

文章目录1. 引入依赖包2. 单独运行一个java文件3. 修改class的模板4. 生成javadoc5. git版本控制6. 操作数据库7. ctrl 点击 可跳转到类的实现处8. 设置终端9. 设置代理10. 格式化html11. Sphinx 自动生成python文档12. 使用read the Doc 托管文档13. IDEA补全快捷键1. for循环…

一台Linux电脑连接另一台Linux(SSH实现linux之间的免密码登陆)

首先查看是否安装ssh服务&#xff1a;systemctl status sshd.service启动服务&#xff1a;systemctl start sshd.service重启服务&#xff1a;systemctl restart sshd.service开机自启&#xff1a;systemctl enable sshd.service若已安装就行&#xff0c;否则 输入&#xff1a;…

查看整个Hadoop集群的进程

hadoop集群工作状态查询时&#xff0c;需要ssh在每台机器上进行jps。可以使用了脚本查看集群各机器工作状态&#xff0c;比之前来回切换方便很多。以下是针对我个人搭建hadoop集群&#xff0c;具体业务需要具体分析。查看hadoop集群工作脚本#!/bin/bash #我们将脚本存入在node…