参考:https://www.youtube.com/watch?v=lLM8oAsi32g

import cv2
    import numpy as np
     
     
    def random_colors(N):
        np.random.seed(1)
        colors=[tuple(255*np.random.rand(3)) for _ in range(N)]
        return colors
     
    def apply_mask(image, mask, color, alpha=0.5):
        """Apply the given mask to the image.
        """
        for n, c in enumerate(color):
            image[:, :, n] = np.where(
                mask == 1,
                image[:, :, n] *(1 - alpha) + alpha * c,
                image[:, :, n]
            )
        return image
     
    def display_instances(image,boxes,masks,ids,names,scores):
        n_instances=boxes.shape[0]
        if not n_instances:
            print('No instances to display')
        else:
            assert boxes.shape[0] == masks.shape[-1] == ids.shape[0]
        
        colors=random_colors(n_instances)
        height, width = image.shape[:2]
        
        for i,color in enumerate(colors):
            if not np.any(boxes[i]):
                continue
            
            y1,x1,y2,x2=boxes[i]
            mask=masks[:,:,i]
            image=apply_mask(image,mask,color)
            image=cv2.rectangle(image,(x1,y1),(x2,y2),color,2)
            
            label=names[ids[i]]
            score=scores[i] if scores is not None else None
            
            caption='{}{:.2f}'.format(label,score) if score else label
            image=cv2.putText(
                image,caption,(x1,y1),cv2.FONT_HERSHEY_COMPLEX,0.7,color,2
            )
            
        return image
     
    if __name__=='__main__':
        import os
        import sys
        import random
        import math
        import skimage.io
        import time
        import utils
        #import model as modellib
        
        
        ROOT_DIR = os.path.abspath("../")
        sys.path.append(ROOT_DIR)
        from mrcnn import utils
        import mrcnn.model as modellib
     
     
        sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version
        import coco
        
     
        MODEL_DIR = os.path.join(ROOT_DIR, "logs")
        COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
        if not os.path.exists(COCO_MODEL_PATH):
            print('cannot find coco_model')
            
        class InferenceConfig(coco.CocoConfig):
            GPU_COUNT = 1
            IMAGES_PER_GPU = 1
     
        config = InferenceConfig()
        config.display()
        
        model = modellib.MaskRCNN(
            mode="inference", model_dir=MODEL_DIR, config=config
        )
     
        # Load weights trained on MS-COCO
        model.load_weights(COCO_MODEL_PATH, by_name=True)
        class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane',
                   'bus', 'train', 'truck', 'boat', 'traffic light',
                   'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird',
                   'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear',
                   'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie',
                   'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
                   'kite', 'baseball bat', 'baseball glove', 'skateboard',
                   'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
                   'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
                   'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
                   'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed',
                   'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote',
                   'keyboard', 'cell phone', 'microwave', 'oven', 'toaster',
                   'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
                   'teddy bear', 'hair drier', 'toothbrush']
        
        
        capture=cv2.VideoCapture(0)
        capture.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
        capture.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
        
        while True:
            ret,frame=capture.read()
            results=model.detect([frame],verbose=0)
            r=results[0]
            
            
            frame=display_instances(
                  frame,r['rois'], r['masks'], r['class_ids'],
                                class_names, r['scores']
            )
            
            cv2.imshow('frame',frame)
            if cv2.waitKey(1)&0xFF==ord('q'):
                break
           
        capture.release()
        cv2.destroyAllWindows()

Tensorflow Mask-RCNN(三)——实时 检测视频的更多相关文章

  1. Mask R-CNN用于目标检测和分割代码实现

    Mask R-CNN用于目标检测和分割代码实现 Mask R-CNN for object detection and instance segmentation on Keras and Tenso ...

  2. 终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)

    介绍 计算机视觉领域的应用继续令人惊叹着.从检测视频中的目标到计算人群中的人数,计算机视觉似乎没有无法克服的挑战. 这篇文章的目的是建立一个自定义Mask R-CNN模型,可以检测汽车上的损坏区域(参 ...

  3. [Network Architecture]Mask R-CNN论文解析(转)

    前言 最近有一个idea需要去验证,比较忙,看完Mask R-CNN论文了,最近会去研究Mask R-CNN的代码,论文解析转载网上的两篇博客 技术挖掘者 remanented 文章1 论文题目:Ma ...

  4. 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割

    前言 前面给大家介绍了使用LabVIEW工具包实现图像分类,目标检测,今天我们来看一下如何使用LabVIEW实现Mask R-CNN图像实例分割. 一.什么是图像实例分割? 图像实例分割(Instan ...

  5. 论文笔记:Mask R-CNN

    之前在一次组会上,师弟诉苦说他用 UNet 处理一个病灶分割的任务,但效果极差,我看了他的数据后发现,那些病灶区域比起整张图而言非常的小,而 UNet 采用的损失函数通常是逐像素的分类损失,如此一来, ...

  6. Tensorflow实现Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)

    Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)   导语:Mask R-CNN是Faster R-CNN的扩展形式,能够有效地检测图像中的目标,同时还能为每个实例生成一个 ...

  7. 物体检测之FPN及Mask R-CNN

    对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...

  8. 物体检测丨从R-CNN到Mask R-CNN

    这篇blog是我刚入目标检测方向,导师发给我的文献导读,深入浅出总结了object detection two-stage流派Faster R-CNN的发展史,读起来非常有趣.我一直想翻译这篇博客,在 ...

  9. 论文阅读笔记三十六:Mask R-CNN(CVPR2017)

    论文源址:https://arxiv.org/pdf/1703.06870.pdf 开源代码:https://github.com/matterport/Mask_RCNN 摘要 Mask R-CNN ...

随机推荐

  1. vs2010编译C++ 友元函数

    // CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...

  2. impala invalidate metadata和impala-shell -r作用相同

    impala的invalidate metadata内部命令,是否和外部命令impala-shell -r的作用相同的? 这个问题的回答: 在invalidate metadata 和 impala- ...

  3. 微信小程序支付功能前端流程

    只是分享一下小程序支付功能的前端流程和代码, 仅供参考(使用的是uni app). handleCreate () { /** 第一步:前台将商品数据发送到后台,后台创建订单入库并返回订单id等信息 ...

  4. 【pwnable.tw】 death_note

    题目逻辑比较简单,大概增加和删除和打印三个功能: show函数中,打印各日记内容,由于这题没有给出libc文件,应该不需要泄露地址,估计用处不大: delete函数中,正常的free,然后指针修改为n ...

  5. BlackArch-Tools

    BlackArch-Tools 简介 安装在ArchLinux之上添加存储库从blackarch存储库安装工具替代安装方法BlackArch Linux Complete Tools List 简介 ...

  6. Python面试常问的10个问题

    很多人想找Python工作,面试往往在基础知识点采坑了 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试 ...

  7. lpwizard 生成的 allegro 封装中 .psx 文件使用方法。

    lpwizard 有时候生成 allegro 封装的时候会生成 .psx 文件,这个文件其实是脚本文件,用于某些特殊形状焊盘的处理. 具体的使用方法如下: 在Allegro中,选择 File > ...

  8. NIO 与 零拷贝

    零拷贝介绍 零拷贝是网络编程的关键, 很多性能优化都需要零拷贝. 在 Java程序中, 常用的零拷贝方式有m(memory)map[内存映射] 和 sendFile.它们在OS中又是怎样的设计? NI ...

  9. 吴裕雄--天生自然java开发常用类库学习笔记:ListIterator接口

    import java.util.ArrayList ; import java.util.List ; import java.util.ListIterator ; public class Li ...

  10. 《ES6标准入门》(阮一峰)--11.对象的新增方法

    1.Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0.J ...