范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MaskRcv全套多目标物体检测

  1 说明
  ====
  1.1 Mask R-CNN是一个实例分割(Instance segmentation)算法,可以用来做"目标检测"、"目标实例分割"、"目标关键点检测"。
  1.2 即实例分割需要在语义分割的基础上对同类物体进行更精细,给予不同颜色的分割。
  1.3 Mask R-CNN是一个非常灵活的框架,可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、语义分割、实例分割、人体姿势识别等多种任务,真不愧是一个好算法!
  2 准备
  =====
  2.1 环境:python3.8+deepin-linux深度操作系统+微软编辑器vscode。
  2.2 软件:opencv4.2.0+numpy1.19.4
  2.3 代码来源:对代码进行修改bug,注释,调试,方便大家使用。https://github.com/spmallick/learnopencv #里的Mask-RCNN文件夹,感谢开源,别忘了给他个星星!# Copyright (C) 2018-2019, BigVision LLC (LearnOpenCV.com), All Rights Reserved.  # Author : Sunita Nayak # Article : https://www.learnopencv.com/deep-learning-based-object-detection-and-instance-segmentation-using-mask-r-cnn-in-opencv-python-c/ # License: BSD-3-Clause-Attribution (Please read the license file.) # This work is based on OpenCV samples code (https://opencv.org/license.html)
  2.4 frozen_inference_graph.pb需要自己下载#wget http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz #并解压放在代码目录下
  3 效果图
  图片效果图
  视频效果
  4 代码
  =====
  4.1 操作方法#本机操作方法,在代码目录下,打开终端,输入即可 #图片检测方法 #python3.8 11.py --image=12.jpeg #视频mp4文件检测 #python3.8 11.py --video=cars.mp4 #打开摄像头检测 #python3.8 11.py
  4.2 完整代码:#第1步:导入模块 import cv2 as cv import argparse import numpy as np import os.path import sys import random  #第2步:初始参数和终端参数说明和设定 # Initialize the parameters confThreshold = 0.5  # Confidence threshold maskThreshold = 0.3  # Mask threshold  parser = argparse.ArgumentParser(description="Use this script to run Mask-RCNN object detection and segmentation") parser.add_argument("--image", help="Path to image file") parser.add_argument("--video", help="Path to video file.") args = parser.parse_args()  #第3步:画框函数 # Draw the predicted bounding box, colorize and show the mask on the image def drawBox(frame, classId, conf, left, top, right, bottom, classMask):     # Draw a bounding box.     #画框     cv.rectangle(frame, (left, top), (right, bottom), (255, 178, 50), 3)     #文字标签     # Print a label of class.     label = "%.2f" % conf     if classes:         assert(classId < len(classes))         label = "%s:%s" % (classes[classId], label)          # Display the label at the top of the bounding box     labelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1)     top = max(top, labelSize[1])     #画框,天蓝色的框     cv.rectangle(frame, (left, top - round(1.5*labelSize[1])), (left + round(1.5*labelSize[0]), top + baseLine), (255, 255, 255), cv.FILLED)     #画框上的文字输出,黑色的字     cv.putText(frame, label, (left, top), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0,0,0), 1)      # Resize the mask, threshold, color and apply it on the image     classMask = cv.resize(classMask, (right - left + 1, bottom - top + 1))     mask = (classMask > maskThreshold)     roi = frame[top:bottom+1, left:right+1][mask]          #颜色mask掩膜的可变颜色设定     # color = colors[classId%len(colors)]     # Comment the above line and uncomment the two lines below to generate different instance colors     colorIndex = random.randint(0, len(colors)-1)     color = colors[colorIndex]      frame[top:bottom+1, left:right+1][mask] = ([0.3*color[0], 0.3*color[1], 0.3*color[2]] + 0.7 * roi).astype(np.uint8)      # Draw the contours on the image     mask = mask.astype(np.uint8)     #查找边界     #im2, contours, hierarchy = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE) #bug     contours, hierarchy = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE) #修改bug,去掉一个im2      #画识别物体的边界     cv.drawContours(frame[top:bottom+1, left:right+1], contours, -1, color, 3, cv.LINE_8, hierarchy, 100)  #第4步:预侦测 # For each frame, extract the bounding box and mask for each detected object def postprocess(boxes, masks):     # Output size of masks is NxCxHxW where     # N - number of detected boxes     # C - number of classes (excluding background)     # HxW - segmentation shape     numClasses = masks.shape[1]     numDetections = boxes.shape[2]      frameH = frame.shape[0]     frameW = frame.shape[1]      for i in range(numDetections):         box = boxes[0, 0, i]         mask = masks[i]         score = box[2]         if score > confThreshold:             classId = int(box[1])                          # Extract the bounding box             left = int(frameW * box[3])             top = int(frameH * box[4])             right = int(frameW * box[5])             bottom = int(frameH * box[6])                          left = max(0, min(left, frameW - 1))             top = max(0, min(top, frameH - 1))             right = max(0, min(right, frameW - 1))             bottom = max(0, min(bottom, frameH - 1))                          # Extract the mask for the object             classMask = mask[classId]              # Draw bounding box, colorize and show the mask on the image             drawBox(frame, classId, score, left, top, right, bottom, classMask)  #第5步:加载文件 #识别物的分类名文件 # Load names of classes classesFile = "mscoco_labels.names" classes = None with open(classesFile, "rt") as f:    classes = f.read().rstrip(" ").split(" ")  #模型 # Give the textGraph and weight files for the model textGraph = "./mask_rcnn_inception_v2_coco_2018_01_28.pbtxt" #缺少这个frozen_inference_graph.pb,下载地址 #wget http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz  modelWeights = "./mask_rcnn_inception_v2_coco_2018_01_28/frozen_inference_graph.pb"  #加载网络 # Load the network net = cv.dnn.readNetFromTensorflow(modelWeights, textGraph) net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV) net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)  # Load the classes colorsFile = "colors.txt" with open(colorsFile, "rt") as f:     colorsStr = f.read().rstrip(" ").split(" ")  #颜色列表,可变的 colors = [] #[0,0,0] for i in range(len(colorsStr)):     rgb = colorsStr[i].split(" ")     color = np.array([float(rgb[0]), float(rgb[1]), float(rgb[2])])     colors.append(color)   #第6步:窗口设置和保存文件设置 winName = "Mask-RCNN Object detection and Segmentation in OpenCV" cv.namedWindow(winName, cv.WINDOW_NORMAL)  #视频保存 outputFile = "mask_rcnn_out_py.avi" #判断 if (args.image):     # Open the image file,图片的     if not os.path.isfile(args.image):         print("Input image file ", args.image, " doesn"t exist")         sys.exit(1)     #获取图片和保存     cap = cv.VideoCapture(args.image)     outputFile = args.image[:-4]+"_mask_rcnn_out_py.jpg" #视频mp4文件的 elif (args.video):     # Open the video file     if not os.path.isfile(args.video):         print("Input video file ", args.video, " doesn"t exist")         sys.exit(1)     cap = cv.VideoCapture(args.video)     outputFile = args.video[:-4]+"_mask_rcnn_out_py.avi" else:     # Webcam input,摄像头视频     cap = cv.VideoCapture(0)  #如果不是图片,需要保存为视频方法 # Get the video writer initialized to save the output video if (not args.image):     vid_writer = cv.VideoWriter(outputFile, cv.VideoWriter_fourcc("M","J","P","G"), 28, (round(cap.get(cv.CAP_PROP_FRAME_WIDTH)),round(cap.get(cv.CAP_PROP_FRAME_HEIGHT))))   #第7步:循环 while cv.waitKey(1) < 0:          # Get frame from the video     hasFrame, frame = cap.read()          # Stop the program if reached end of video     if not hasFrame:         print("Done processing !!!")         print("Output file is stored as ", outputFile)         cv.waitKey(3000)         break      # Create a 4D blob from a frame.     blob = cv.dnn.blobFromImage(frame, swapRB=True, crop=False)      # Set the input to the network     net.setInput(blob)      # Run the forward pass to get output from the output layers     boxes, masks = net.forward(["detection_out_final", "detection_masks"])      # Extract the bounding box and mask for each of the detected objects     postprocess(boxes, masks)      # Put efficiency information.     t, _ = net.getPerfProfile()     label = "Mask-RCNN on 2.5 GHz Intel Core i7 CPU, Inference time for a frame : %0.0f ms" % abs(t * 1000.0 / cv.getTickFrequency())     cv.putText(frame, label, (0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))          #保存判断     # Write the frame with the detection boxes     #图片就保存为图片     if (args.image):         cv.imwrite(outputFile, frame.astype(np.uint8))     else:         #视频就保存为视频         vid_writer.write(frame.astype(np.uint8))     #显示图片和视频标示过程     cv.imshow(winName, frame)
  自己整理并分享。

书画欣赏赵孟頫书札致景亮赵孟頫致景亮书札,纸本,纵29厘米,横11厘米。这件书札是赵孟頫写给其外甥张景亮,内述代人向张景亮之女求婚之事。赵孟頫(一二五四一三二二),字子昂,号松雪道人水精宫道人。宋朝宗室,贾平凹最好的风景是在街头上看人最好的风景是在街头上看人。嚼了口香糖,悠然悠然从一个商店门口踱到另一个商店门口,要买东西又似乎没多带钱,或衔一支烟的,立于电车站牌下要等一个朋友的,等得抓耳搔腮,火燎火燎。遇得人交每日一字玺(2600)2021。10。11应书友们的要求,今天继续解析田英章先生楷书皇甫君碑。需要说明的是,单字是从下面里摘取制作的,已解析过的字请在本公众号里(从主界面里进入下部中间的每日一字菜单)查阅。玺空留,銮跸莫反民国书法5大派一吴昌硕与吴派吴昌硕是个资质良好,才华横溢,既按自身条件审美取向去接受传统,又善于变法的艺术大师。他久寓上海,承海派之余韵,逐渐形成自己的流派。1艺术创作路子宽。诗书画印都有强烈的芭乐兔富养女儿穷养儿?精神上的富足比物质上的更重要富养女儿穷养儿是近年来特别流行的古训,虽然还不知道所谓的古训一说是不是真的,但是效仿的家长还是有不少的,并且大有女儿儿子共同富养的发展趋势,毕竟二孩三孩政策刚刚落地不久,一家一个孩秋天,收红芋的季节红芋,也就是红薯,收红芋又叫出红芋,顾名思义,红芋从土里出来。农历七八月份,收春红芋,而秋红芋,一般在十月份左右,最晚霜降前要把红芋收回来。出红芋我家的春红芋种的不多,成熟后是吃一疤痕增生期需要多长时间?近期有不少的疤友在增生期的时候,都会抱一些侥幸心理,以为自身的疤痕增生可以不治疗就会自动消退,但是疤友还是会担心疤痕增生会变的更严重,那么,疤痕增生期是多久?疤痕增生期是多久?疤痕明宣德皇帝朱瞻基行书新春诗,俊健舒朗朱瞻基行书新春诗翰卷,故宫博物院藏。释文御制新春诗三元凤历开新春,乾坤一气回洪钧。柔风东来布和煦,六合万象皆维新。山中涓流动泉脉,长河坚冰一朝释。淡霭轻云弄野姿,鱼跃鸢飞咸自适。人故宫博物院,是他蹲在地上写出来的李煜瀛题故宫博物院匾额故宫博物院成立之初需要重新书写匾额昭示国人故将清室的旧门(神武门)改为故宫博物院的大门1925年10月10日故宫博物院成立当日神武门外搭起了花牌楼门洞上镶嵌故大LOGO,展示出来的东西是很LOW大LOGO有2700万的粉丝,其中就有我一个。他之前的视频我没有看到,但后期所谓炫富的视频,我还是看到了。说起来,第一次看到大LOGO的视频,是他在视频里展示天价产品。价格是很高,毛泽东到武汉,住在东湖招待所毛泽东到武汉,住在东湖招待所。地方上同志不知道他的睡眠习惯,就弄了一张弹簧床。第二天卫士走进卧室,吓了一大跳。原来,主席睡在地板上!一张又宽又大的木板床,上边放着一个荞麦皮塞成的白
你对自己的身体了解多少?人的身体也能发光婴儿的骨骼比成人多你可能听说过一个人有206块骨头。这是真的大多数成年人接近这个数字。无论如何,你永远不会确切知道你有多少,因为它们中的许多都是像你指关节里的芝麻一样的小骨头。宝宝亲兄弟姐妹之间,贫富差距悬殊,作为条件好的那个应该怎么做?我的家有兄弟姐妹8人,7个儿子,1个女儿,女儿是最小的。这样的家庭,在中国的解放初期,即50年代来说,真是英雄的父母了。父亲是务农的,还是早期入党的中国共产党员,帮助当地的游击队,又一个我身边的孩子跳楼了。因为要玩手机的要求遭到妈妈拒绝图片来自网络,与内容无关又一个我身边的孩子跳楼了。因为要玩手机的要求遭到妈妈拒绝。是个小姑娘,12岁,妈妈在华莱城做保洁。刚开始传出来的消息是妈妈在华莱城做保洁,孩子帮忙,不小心掉带孩子出门,哭闹非要买玩具,该怎么办?小朋友新鲜感劲头足,有时带他们出去玩,路过玩具店非进去买个才行。但是同样类似的玩具,家里有好多。不给买,小孩就开始哭闹。有的父母,怕别人指指点点,赶紧买了就走人,有的父母则比较强硬一个来自真实二胎妈妈的口述一个真实的故事,如果你喜欢这篇文章欢迎转发,让更多的二胎妈妈看到!谢谢!01hr都说出生顺序决定性格,这个,我真信。比如我姐,比我早出生三年,作为老大,她在我眼里,简直是倔得自讨苦孩子被打,能不能还手?这位妈妈的回答太智慧,值得借鉴文章金城妈咪Vivi上周礼拜四,邻居给我打电话说她临时有事脱不开身,让我帮忙去接一下她上大班的女儿。当我到学校门口的时候,已经有很多小朋友被家长接到了,但还是逗留在幼儿园门口嬉戏打有个猪队友是多么可怕CC妈要忙吐血,CC上周上了三天幼儿园,又开始咳嗽,前车之鉴,CC一家都紧张死,上周四就赶紧起大早去挂专家号(还是起大清早让专家加号)。这段时间,小朋友感冒发烧咳嗽的要把医院挤爆炸别拿贫穷当懒惰的理由最近,朋友经常抱怨孩子不好管,作业不写,功课也不温习。我问她平时跟孩子交流吗?她回答我哪有时间跟她交流,穷的饭都快吃不上了,我天天思考着怎样赚钱。我问那你想到怎样赚钱了吗?她叹口气快生了每周都要做胎心监护吗?胎心监护主要是衡量胎儿的心率,和心电图一样,是一条锯齿状的波形曲线。一般胎儿的心率在120160次分是正常范围,胎心超过160次分持续时间超过10分钟以上属于心动过速。低于110次一胎生娃大出血,二胎生产孕婴公益献血联盟全程保驾护航人们总说没事别进医院,但是有一种进医院的方式却是让人心怀喜悦之情幸福之感的,那就是孕妇生孩子,这意寓着新生和命脉的延续。但是产妇生孩子也是险象环生,搞不好就会出现生命危险,鬼门关前孩子冬天吃水果,家长记住3吃5不吃,吃对了才能增强抵抗力文开心果妈妈(原创文章,欢迎个人转载分享)冬天到了,天气凉了,很多家长也不太敢给孩子吃太多水果了,毕竟,水果这么凉,孩子吃多了,对肠胃也不好。但是,适当的水果补给,也是必须的,毕竟