使用mask Rcnn实现人物黑白剪影

因为涉及到这块内容,就想着分享出来希望能给大家一个参考。
使用的是python+mask,不会用的可以看看气球那个例子(没耐心的不看也行,反正也不复杂)。
生成的是和图片同名的文件夹,里面包含了处理好的每张图片,如果想放到一起修改一下存储路径即可。

原理简介

基于的是mask原理进行识别,然后将“人”这个分类单独提取出来,再进行黑白渲染,生成剪影。
以此类推,如果想对其他物体进行剪影描绘,只需更改需要凸显的分类即可,相当简单粗暴。

准备

需安装opencv,numpy等,这部分参考mask安装要求,下面只贴出处理用的代码部分。
coco的模型可以直接下载使用

代码分析

import cv2
import numpy as np
import os
from samples import coco
from mrcnn import utils
from mrcnn import model as modellib
from datetime import datetime# Load the pre-trained model data
ROOT_DIR = os.getcwd()
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):utils.download_trained_weights(COCO_MODEL_PATH)# Change the config infermation
class InferenceConfig(coco.CocoConfig):GPU_COUNT = 1IMAGES_PER_GPU = 1config = InferenceConfig()# COCO dataset object names
model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config
)
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'
]# ==========================================================
# This function is used to change the colorful background informationdef apply_mask_black(image, mask):image[:, :, 0] = np.where(mask == 0,0,255)image[:, :, 1] = np.where(mask == 0,0,255)image[:, :, 2] = np.where(mask == 0,0,255)return image# This function is used to show the object detection result in original image.
def display_instances(image, boxes, masks, ids, names, scores):# max_area will save the largest object for all the detection resultsmax_area = 0# n_instances saves the amount of all objectsn_instances = boxes.shape[0]if not n_instances:print('NO INSTANCES TO DISPLAY')else:assert boxes.shape[0] == masks.shape[-1] == ids.shape[0]mask = np.array([0])# mask = Falsefor i in range(n_instances):if not np.any(boxes[i]):continue# compute the square of each objecty1, x1, y2, x2 = boxes[i]square = (y2 - y1) * (x2 - x1)# use label to select person object from all the 80 classes in COCO datasetlabel = names[ids[i]]if label == 'person':# save the largest object in the image as main character# other people will be regarded as backgroundif square > max_area:max_area = squaremask = masks[:, :, i]else:continueelse:continue# apply mask for the image# by mistake you put apply_mask inside for loop or you can write continue in if alsoimage = apply_mask_black(image, mask)return image if not mask.sum() ==0 else mask# return imagedef img_black(image_path):images_list = os.listdir(image_path)out_path = /home/nvidia/xxx/for name in sorted(images_list):original_image = os.path.join(image_path, name)image = cv2.imread(original_image)# gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)results = model.detect([image], verbose=0)r = results[0]frame = display_instances(image, r['rois'], r['masks'], r['class_ids'], class_names, r['scores'])if frame.sum() == 0:continueelse:# 生成每个图片对应的同名文件夹,里面放有该图片output_dir = out_path+name+'/'os.mkdir(output_dir)cv2.imwrite(output_dir+name,frame)if __name__ == '__main__':time = datetime.now()# images pathimage_path = '/home/pcm/Mask-GaitSet/IMG/images'img_black(image_path)print('Evaluation complete. Cost:', datetime.now() - time)

最终结果

下面用的是网上随便找的一张图片进行举例,前两张是原图,后二张出来的图片就是剪影效果(应该不算侵权吧?如果有懂的同学麻烦告诉我)



效果貌似还可以的说,但是这玩意要想效果好点,还是自己训练个模型会更准点。

=2022.7更新==
补充一下论文:
论文地址
demo使用下载地址
背景置灰demo

python基于mask检测人体并输出黑白剪影相关推荐

  1. Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况)

    Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况) 目录

  2. Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况

    Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况 目录 Python基于MASK信息抽取ROI子图实战:原始影像和mask

  3. python基于tpot训练模型并抑制输出stackingestimator、而是输出单模型例如xgboost设置

    python基于tpot训练模型并抑制输出stackingestimator.而是输出单模型例如xgboost设置 目录 python基于tpot训练模型并抑制输出stackingestimat

  4. python行人检测_行人检测 基于 OpenCV 的人体检测

    原文链接行人检测 基于 OpenCV 的人体检测 - 热分享​hotdog29.com 行人检测 基于 OpenCV 的人体检测 我们都知道,无论性别,种族或种族如何,我们的身体都具有相同的基本结构. ...

  5. opencv canny源码解析_行人检测 基于 OpenCV 的人体检测

    原文链接 行人检测 基于 OpenCV 的人体检测 - 热分享​hotdog29.com 在 2019年8月1日 上张贴 由 hotdog发表回复 行人检测 基于 OpenCV 的人体检测 我们都知道 ...

  6. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  7. python视频人脸检测_OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  8. [智慧农业]Python基于改进YOLOv5的猕猴桃叶病害检测系统(完整源码&数据集&视频教程)

    1.背景 现如今由于农作物病虫害的多样性和复杂性,在特定的条件下其很容易在大范围内发生,导致农产品产量急剧下降.因此,预防和监测农作物病虫害已成为农业生产活动中的重要环节.当前,耕地面积逐渐减少,世界 ...

  9. Python基于OpenCV的指针式表盘检测系统(附带源码&技术文档)

    1.背景 指针式机械表盘具有安装维护方便.结构简单.防电磁干扰等诸多优点, 目前广泛应用于工矿企业.能源及计量等部门.随着仪表数量的增加及精密仪表技术的发展,人工判读已经不能满足实际应用需求.随着计算 ...

最新文章

  1. Consul入门02 - 运行Consul代理
  2. python plot方法的使用_【python】matplotlib.pyplot入门
  3. 安装Xcode在Mac OS X10.7.3上
  4. Access导入文本文件的Schema.ini文件格式
  5. vscode函数跳转插件_人生苦短,我们为 Cocos Creator 开发的插件和工具
  6. seaborn分布数据可视化:直方图|密度图|散点图
  7. 小甲鱼Python第二十二讲课后习题
  8. AndroidStudio_开发工具的设置_代码编辑器使用_新特性---Android原生开发工作笔记73
  9. 小程序入门学习02--导航栏及基础页面布局
  10. c语言给一个函数添加功能,【C语言】请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变...
  11. CSRF 攻击的对象
  12. 华为数据之道(5):华为数字化转型的目标、蓝图和愿景
  13. window MFC桌面下雪程序
  14. 计算机 调剂 学校,考研调剂应该怎样联系学校?这三点一定要注意
  15. Python爬取腾讯招聘信息
  16. resultFul架构
  17. 春天来了,该播种了。久久荒芜的博客重新耕种起来
  18. 1788. 牛为什么过马路
  19. 电脑打字不显示汉字咋办
  20. 【路径规划-TSP问题】基于粒子群结合蚁群算法求解旅行商问题附matlab代码

热门文章

  1. 消防安全相关的微信公众号图文应该怎样排版?
  2. 生成GitHub项目目录的树形结构图
  3. 天刀外装怎么才能不显示服务器,买不起时装不用愁 来看天刀平民外装搭配
  4. android listview 自定义控件,Android 自定义弹性ListView控件实例代码(三种方法)
  5. 睡觉时手机可以放在枕头边吗?需要关机吗?现在终于清楚了!
  6. k8s Labels 和 Selectors
  7. Collection详解
  8. 2017广东省红帽杯网络安全攻防大赛writeup
  9. 对微信小程序的云开发模式的简单理解
  10. 北语计算机基础3,北语网院20秋《计算机基础》作业3题目及答案