Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >yolov3-python接口调用

yolov3-python接口调用

作者头像
py3study
发布于 2020-01-08 09:16:42
发布于 2020-01-08 09:16:42
1.7K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

在YOLO官网提供的Darknet源码中,有一个使用python接口的示例程序 darknet.py 示例如下:https://github.com/pjreddie/darknet/blob/master/python/darknet.py 其处理一张图片的代码段如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if __name__ == "__main__":
    net = load_net("cfg/tiny-yolo.cfg", "tiny-yolo.weights", 0)
    meta = load_meta("cfg/coco.data")
    r = detect(net, meta, "data/dog.jpg")
    print r

此时,你可能会觉得这儿很麻烦,因为官网提供的接口用python处理一张图片的时候,只能传入图片路径?要是处理视频帧的话岂不是需要先将图片保存,获得路径后再调用接口?不需要!下面我们就来解决这个问题。

首先,看detect函数的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45):
    im = load_image(image, 0, 0)
    num = c_int(0)
    pnum = pointer(num)
    predict_image(net, im)
    dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0, pnum)
    num = pnum[0]
    if (nms): do_nms_obj(dets, num, meta.classes, nms);
res = []
for j in range(num):
    for i in range(meta.classes):
        if dets[j].prob[i] > 0:
            b = dets[j].bbox
            res.append((meta.names[i], dets[j].prob[i], (b.x, b.y, b.w, b.h)))
res = sorted(res, key=lambda x: -x[1])
free_image(im)
free_detections(dets, num)
return res

传入detect函数的第三个参数image是字符串类型,即路径,随后调用load_image函数加载图片得到im对象,(注意这个im是Darknet中自定义的结构体image类型,定义在include/darknet.h中,该文件的详细注释在群内有分享。)再进行后续处理,那么我们改写接口的时候就可以直接将第三个参数改为image类型。做如下的修改:

1、在darkenet.py中自定义一个函数,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def nparray_to_image(img):
    data = img.ctypes.data_as(POINTER(c_ubyte))
    image = ndarray_image(data, img.ctypes.shape, img.ctypes.strides)
    return image

2、在darknet.py中增加如下行代码,增加位置找到类似代码的位置就好

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ndarray_image = lib.ndarray_to_image
ndarray_image.argtypes = [POINTER(c_ubyte), POINTER(c_long), POINTER(c_long)]
ndarray_image.restype = IMAGE

3、在image.c中增加如下代码段,增加位置大概558行,灵活修改就好

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifdef NUMPY
image ndarray_to_image(unsigned char* src, long* shape, long* strides)
{
    int h = shape[0];
    int w = shape[1];
    int c = shape[2];
    int step_h = strides[0];
    int step_w = strides[1];
    int step_c = strides[2];
    image im = make_image(w, h, c);
    int i, j, k;
    int index1, index2 = 0;
for(i = 0; i < h; ++i){
        for(k= 0; k < c; ++k){
            for(j = 0; j < w; ++j){

                index1 = k*w*h + i*w + j;
                index2 = step_h*i + step_w*j + step_c*k;
                //fprintf(stderr, "w=%d h=%d c=%d step_w=%d step_h=%d step_c=%d \n", w, h, c, step_w, step_h, step_c);
                //fprintf(stderr, "im.data[%d]=%u data[%d]=%f \n", index1, src[index2], index2, src[index2]/255.);
                im.data[index1] = src[index2]/255.;
            }
        }
    }

rgbgr_image(im);

return im;

4、在image.h的19行后面加如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifdef NUMPY
image ndarray_to_image(unsigned char* src, long* shape, long* strides);
#endif

5、在makefile的47行后面中加如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifeq ($(NUMPY), 1) 
COMMON+= -DNUMPY -I/usr/include/python2.7/ -I/usr/lib/python2.7/dist-packages/numpy/core/include/numpy/
CFLAGS+= -DNUMPY
endif
1234

前几行加 一条 NUMPY=1,增加后为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
NUMPY=1
DEBUG=0

6、重新编译make clean + make 7、修改darknet.py的后续处理,示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if __name__ == "__main__":
    net = load_net(b"cfg/yolov3.cfg", b"yolov3.weights", 0)
    meta = load_meta(b"cfg/coco.data")
    vid = cv2.VideoCapture(' 1pondo.avi  ')
    while True:
        return_value,arr=vid.read()
        im=nparray_to_image(arr)
        r = detect(net, meta, im)
        此时r中返回了检测到的边框信息,老铁你要怎么处理随便你!
       ......

8、更改detect函数的前面几行,更改后为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def detect(net, meta, im, thresh=.5, hier_thresh=.5, nms=.45):
    num = c_int(0)
    pnum = pointer(num)

说明:更改了形参image为im,直接使用im,不需要再读取,去掉了加载图片行的代码。 9、加群一起讨论交流

参考链接 https://github.com/pjreddie/darknet/issues/289#issuecomment-342448358 欢迎大家一起讨论交流,共同做好目标检测!码字不易,且行且珍惜!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        </div>
					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-448c2d19d9.css" rel="stylesheet">
            </div>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手教你用深度学习做物体检测(四):模型使用
上一篇《手把手教你用深度学习做物体检测(三):模型训练》中介绍了如何使用yolov3训练我们自己的物体检测模型,本篇文章将重点介绍如何使用我们训练好的模型来检测图片或视频中的物体。
AI粉嫩特工队
2019/09/05
1.5K0
手把手教你用深度学习做物体检测(四):模型使用
从零开始带你一步一步使用YOLOv3测试自己的数据
我给大家详细介绍了如何使用 YOLOv3 模型来训练自己的数据集。训练部分完成,本文将继续给大家详细介绍如何使用我们训练好的模型来进行图片的批量测试。
红色石头
2022/01/10
2910
从零开始带你一步一步使用YOLOv3测试自己的数据
Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪
原文:Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪 - AIUAI
AIHGF
2019/02/27
5.8K0
Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪
人脸检测——滑动窗口篇(训练和实现)
该文章介绍了如何使用深度学习实现人脸检测和识别。首先介绍了基于深度学习的人脸检测技术,包括基于Haar特征的级联分类器、Dlib库、人脸检测框架等。然后介绍了基于深度学习的人脸识别技术,包括DeepFace、FaceNet、ArcFace等。最后介绍了如何基于深度学习实现人脸检测和识别的应用,包括人脸门禁、人脸签到、人脸支付等。
MachineLP
2018/01/09
2.3K0
人脸检测——滑动窗口篇(训练和实现)
Caffe2 - (二十三) Detectron 之 utils 函数(1)
Caffe2 - (二十三) Detectron 之 utils 函数(1) 1. blob.py # Based on: Fast R-CNN # Written by Ross Girshick # -------------------------------------------------------- """Caffe2 blob helper functions.""" from __future__ import absolute_import from __future__ impo
AIHGF
2018/05/17
1.3K0
人脸检测——fcn
该文章介绍了基于深度学习的图像检测技术中的面部检测算法。文章首先介绍了传统的面部检测算法,然后介绍了基于深度学习的方法,包括卷积神经网络(CNN)、生成对抗网络(GAN)和神经网络。文章还介绍了基于深度学习的方法在面部检测中的具体应用,包括使用CNN进行面部检测、使用GAN进行面部检测、使用神经网络进行面部检测等。
MachineLP
2018/01/09
2.4K0
人脸检测——fcn
目标检测基本概念与性能评价指标计算
不同的问题和不同的数据集都会有不同的模型评价指标,比如分类问题,数据集类别平衡的情况下可以使用准确率作为评价指标,但是现实中的数据集几乎都是类别不平衡的,所以一般都是采用 AP 作为评价指标,分别计算每个类别的 AP,再计算mAP。
嵌入式视觉
2022/09/05
9810
目标检测基本概念与性能评价指标计算
Github 项目 - YOLOV3 的 TensorFlow 复现
原文:Github 项目 - YOLOV3 的 TensorFlow 复现 - AIUAI
AIHGF
2019/02/27
4.5K0
faster rcnn demo.py:在一个窗口显示所有类别标注
本文介绍了如何使用 Faster R-CNN 实现目标检测,并通过示例进行了演示。首先介绍了 Faster R-CNN 的整体架构,然后阐述了其网络结构和配置参数。接着,通过四个示例进行了演示,包括预训练模型的选择、配置参数、检测结果的展示以及最后的网络热启动。通过本文的介绍,可以快速上手使用 Faster R-CNN 进行目标检测任务。
10km
2018/01/03
1.2K0
faster rcnn demo.py:在一个窗口显示所有类别标注
论文实践学习 - Faster R-CNN 测试
Faster R-CNN 的 caffe-fast-rcnn 版本没有更新,导致新版的 cudnn 不能使用,Makefile.config 添加 cudnn:=1 时,编译无法通过. 对此,作以下修改: 将 caffe-fast-rcnn 中的以下文件替换为 BAIR(BVLC) 的 caffe 的对应文件:
AIHGF
2019/02/18
5880
论文实践学习 - Faster R-CNN 测试
手把手教你使用yolo进行对象检测
古语云“不进则退,不喜则忧” ,在ai大变革的时代,掌握基本的ai技能是技术人员必备生存之道。本文从对象检测应用出发,一步一步的给出使用yolo进行对象检测的流程。这里主要关注利用已有工具(yolo模型)进行对象检测应用(即模型的推理),不注重原理解析和模型训练。
用户7680342
2020/09/23
2.6K0
4.记一个特别的坑。
最近在写yolo_kcf,前面的测试其实还算比较顺利,关于状态切换,今天遇到了一个坑,现在还没有解决,写出来记录一下,看是不是自己知识有盲区啊。
和蔼的zhxing
2019/03/11
5790
4.记一个特别的坑。
cv2.getTextSize()
项目:chainer-faster-rcnn 作者:mitmul | 项目源码 | 文件源码
狼啸风云
2021/03/03
1.9K0
零基础入门深度学习(十一):目标检测之YOLOv3算法实现下篇
本课程是百度官方开设的零基础入门深度学习课程,主要面向没有深度学习技术基础或者基础薄弱的同学,帮助大家在深度学习领域实现从0到1+的跨越。从本系列课程中,你将学习到:
用户1386409
2020/02/19
1.3K0
里程碑式成果Faster RCNN复现难?我们试了一下 | 附完整代码
【导读】2019年以来,除各AI 大厂私有网络范围外,MaskRCNN,CascadeRCNN 成为了支撑很多业务得以开展的基础,而以 Faster RCNN 为基础去复现其他的检测网络既省时又省力,也算得上是里程碑性成果了。因此本文主要以简洁易懂的文字复现了 Resnet - Faster R-CNN 。
AI科技大本营
2019/08/23
2.3K0
里程碑式成果Faster RCNN复现难?我们试了一下 | 附完整代码
【AlexeyAB DarkNet框架解析】九,YOLOV3损失函数代码详解(yolo_layer.c)
前面已经讲完了YOLOV1/V2的损失函数代码解析,今天为大家带来YOLOv3的损失函数解析。YOLOV3的损失函数在YOLOV2的基础上,用多个独立的逻辑回归损失代替了YOLOV2里面的softmax损失,然后去掉了对Anchor在前12800次训练轮次中的回归损失,也即是YOLOV2损失函数的第二项。另外新增了一个ignore_thresh参数来忽略一些和GT box的IOU大于ignore_thresh的预测框的objectness损失。除了以上细节,其它部分和YOLOV2的处理类似。
BBuf
2020/02/21
3.3K0
YOLOV3目标检测模型训练实例
从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集。
WindRunnerMax
2020/08/27
1.2K0
YOLOV3目标检测模型训练实例
[Tensorflow] Faster R-CNN 和自定义 VOC 数据集
看了pascal_voc.py代码,可以把代码的jpg拼接改成png,这样可以不做上一步.
wOw
2018/09/18
3.1K4
Caffe2 - (二十五) Detectron 之 utils 函数(3)
Caffe2 - (二十五) Detectron 之 utils 函数(3) 1. lr_policy.py """Learning rate policies.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import numpy as np
AIHGF
2018/05/17
1.7K0
DL开源框架Caffe | 目标检测Faster-rcnn问题全解析
本文介绍了如何使用深度学习检测物体,并提供了相关代码和教程。主要包括以下内容:1.基于Faster R-CNN的物体检测;2.使用PyTorch实现Faster R-CNN;3.训练自己的数据集进行物体检测;4.如何优化物体检测的精度;5.使用多GPU进行训练。
码科智能
2018/01/02
1.3K0
DL开源框架Caffe | 目标检测Faster-rcnn问题全解析
相关推荐
手把手教你用深度学习做物体检测(四):模型使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档