前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「深度学习一遍过」必修27:基于Mask-RCNN的人体姿态估计的设计与实现

「深度学习一遍过」必修27:基于Mask-RCNN的人体姿态估计的设计与实现

作者头像
荣仔_最靓的仔
发布于 2022-01-10 06:03:41
发布于 2022-01-10 06:03:41
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

本专栏用于记录关于深度学习的笔记,不光方便自己复习与查阅,同时也希望能给您解决一些关于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。 专栏地址:「深度学习一遍过」必修篇

目录

项目 GitHub 地址

项目结果展示

项目代码


项目 GitHub 地址

Classic_model_examples/2017_Mask-RCNN_TargetDetectionAndSegmentation at main · zhao302014/Classic_model_examples · GitHub

https://github.com/zhao302014/Classic_model_examples/tree/main/2017_Mask-RCNN_TargetDetectionAndSegmentation

项目结果展示

项目代码

utils.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
# -*- coding:utf-8 -*-
# ------------------------------------------------- #
#      作者:赵泽荣
#      时间:2021926日(农历八月二十)
#      个人站点:1.https://zhao302014.github.io/
#              2.https://blog.csdn.net/IT_charge/
#      个人GitHub地址:https://github.com/zhao302014
# ------------------------------------------------- #
import cv2
import torch
import numpy as np
import torchvision

'''
  创建一个“人体姿态估计器”类
'''
class ConvolutionalPoseMachine(object):
    def __init__(self, pretrained=False):
        # 是否使用 maskrcnn_resnet50_fpn 预训练模型,true 为使用,false 为不使用,默认为 false
        self._maskrcnn = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=pretrained)
        # 是否使用 keypointrcnn_resnet50_fpn 预训练模型,true 为使用,false 为不使用,默认为 false
        self._keypointrcnn = torchvision.models.detection.keypointrcnn_resnet50_fpn(pretrained=pretrained)
        # 是否使用 fasterrcnn_resnet50_fpn 预训练模型,true 为使用,false 为不使用,默认为 false
        self._fasterrcnn = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=pretrained)
        # 如果 GPU 存在,则转为 cuda 运行
        if torch.cuda.is_available():
            self._maskrcnn = self._maskrcnn.cuda()
            self._keypointrcnn = self._keypointrcnn.cuda()
            self._fasterrcnn = self._fasterrcnn.cuda()
        # 将模型转为验证模式
        self._maskrcnn.eval()
        self._keypointrcnn.eval()
        self._fasterrcnn.eval()

    def __call__(self, image, masks=True, keypoints=True, boxs=True):
        # 调用下面定义的 _transform_image 方法传入 image,将 image 转为 tensor 格式
        x = self._transform_image(image)
        # 如果 GPU 存在,则转为 cuda 运行
        if torch.cuda.is_available():
            x = x.cuda()
        # 若 masks 为 True 则进行掩膜操作,否则不执行此语句,默认为 True
        m = self._predict_masks(x) if masks else [None]
        # 若 keypoints 为 True 则进行关键点检测操作,否则不执行此语句,默认为 True
        k = self._predict_keypoints(x) if keypoints else [None]
        # 若 boxes 为 True 则进行关键点检测操作,否则不执行此语句,默认为 True
        b = self._predict_boxes(x) if boxs else [None]
        # 以 “键值对” 形式返回掩膜及关键点检测结果(注:m、k、b 为列表,要获取的是列表里的值,故 “[0]”)
        return {'maskrcnn': m[0], 'keypointrcnn': k[0], 'fasterrcnn': b[0]}

    # 定义转换 image 格式函数
    def _transform_image(self, image):
        # 返回值:将图像由 numpy 格式转为 tensor 格式
        return torchvision.transforms.ToTensor()(image)

    # 定义掩膜预测函数
    def _predict_masks(self, x):
        # 被包含部分不进行梯度计算
        with torch.no_grad():
            # 返回值:将 tensor 格式 image 传入掩膜预测模型
            return self._maskrcnn([x])

    # 定义关键点预测函数
    def _predict_keypoints(self, x):
        # 被包含部分不进行梯度计算
        with torch.no_grad():
            # 返回值:将 tensor 格式 image 传入关键点预测模型
            return self._keypointrcnn([x])

    # 定义预测框预测函数
    def _predict_boxes(self, x):
        # 被包含部分不进行梯度计算
        with torch.no_grad():
            # 返回值:将 tensor 格式 image 传入关键点预测模型
            return self._fasterrcnn([x])

    # 静态方法 类或实例均可调用
    @staticmethod
    def get_masks(dictionary, label=1, score_threshold=0.5):
        # 定义一个空掩膜列表
        masks = []
        # 此处的 dictionary 相当于前面返回值中的 m[0]
        if dictionary:
            # 碾平后,依次循环 非零 且 与 label 相等的 dictionary 中 labels 标签
            for i in (dictionary['labels'] == label).nonzero().view(-1):
                # 若标签对应的 scores (置信度)大于预先设定的阈值,则将掩膜存入列表中
                if dictionary['scores'][i] > score_threshold:
                    # 若标签对应的 masks 值大于 0.5,则将 true 传入 mask,否则传入 false(即大于 0.5 显示掩膜)
                    mask = dictionary['masks'][i].detach().cpu().squeeze().numpy() > 0.5
                    # 将掩膜存入列表中
                    masks.append(mask)
        # return 值:将 masks 转为矩阵格式返回
        return np.asarray(masks, dtype=np.uint8)

    @staticmethod
    def get_keypoints(dictionary, label=1, score_threshold=0.5):
        keypoints = []
        # 此处的 dictionary 相当于前面返回值中的 k[0]
        if dictionary:
            for i in (dictionary['labels'] == label).nonzero().view(-1):
                if dictionary['scores'][i] > score_threshold:
                    keypoint = dictionary['keypoints'][i].detach().cpu().squeeze().numpy()
                    keypoints.append(keypoint)
        return np.asarray(keypoints, dtype=np.int32)

    @staticmethod
    def get_boxes(dictionary, label=1, score_threshold=0.5):
        boxes = []
        # 此处的 dictionary 相当于前面返回值中的 b[0]
        if dictionary:
            for i in (dictionary['labels'] == label).nonzero().view(-1):
                if dictionary['scores'][i] > score_threshold:
                    box = dictionary['boxes'][i].detach().cpu().squeeze().numpy()
                    boxes.append(box)
        return np.asarray(boxes, dtype=np.int32)

'''
  定义一系列绘制掩膜、绘制关键点、连接关键点、绘制预测框的函数
'''
# 定义一个掩膜颜色定义函数
def _colorize_mask(mask, color=None):
    # 没有传入颜色则随机产生颜色,若传入颜色则按传入颜色来绘制
    b = mask * np.random.randint(0, 255) if not color else mask * color[0]
    g = mask * np.random.randint(0, 255) if not color else mask * color[1]
    r = mask * np.random.randint(0, 255) if not color else mask * color[2]
    # 返回值:RGB 三通道合并后的图
    return cv2.merge((b, g, r))

# 定义一个关键点绘制函数
def _draw_keypoint(image, point, color, radius=1):
    # point返回值是包含三个数字的列表,分别表示横、纵坐标及点半径
    x, y, r = point
    if int(r):
        # 用原点形式绘制关键点(注:cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑)
        cv2.circle(image, (int(x), int(y)), radius, color, -1, cv2.LINE_AA)
    return image

# 定义一个关键点连接函数
def _draw_connection(image, point1, point2, color, thickness=1):
    x1, y1, v1 = point1
    x2, y2, v2 = point2
    if int(v1) and int(v2):
        # 连接关键点用直线(注:cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑)
        cv2.line(image, (int(x1), int(y1)), (int(x2), int(y2)), color, thickness, cv2.LINE_AA)
    return image

# 定义一个预测框预测函数
def _draw_box(image, point1, point2, point3, point4, color, thickness=1):
    # point1 ~ point4 代表框选人物矩形的四个点位置(注:yolo 中也是用同样的定点法)
    cv2.rectangle(image, (int(point1), int(point2)), (int(point3), int(point4)), color, thickness, cv2.LINE_AA)
    return image

# 绘制掩膜
def draw_masks(image, masks, color=None, alpha=0.5):
    # 在拷贝的image附件中执行下述代码
    result = image.copy()
    for mask in masks:
        # 显示图片前必须先转为uint8格式
        mask_bin = np.uint8(mask > 0)
        # 通道融合
        mask_inv = cv2.merge([1 - mask_bin] * 3)
        # 绘制关键语句,调用前面定义的_colorize_mask函数
        mask_rgb = _colorize_mask(mask_bin, color)
        # 彩色图像数组和掩膜图像数组相乘
        result = cv2.multiply(result, mask_inv)
        # 彩色图像数组和掩膜图像数组相加
        result = cv2.add(result, mask_rgb)
    # 返回值:将原图像与掩膜叠加
    return cv2.addWeighted(result, alpha, image, 1.0 - alpha, 0)

# 绘制关键点
def draw_keypoints(image, keypoints, radius=1, alpha=1.0):
    result = image.copy()
    for kp in keypoints:
        for p in kp:
            # 绘制关键语句,调用前面定义的_draw_keypoint函数
            result = _draw_keypoint(result, p, (0, 255, 0), radius)
    return cv2.addWeighted(result, alpha, image, 1.0 - alpha, 0)

# 连接关键点
def draw_body_connections(image, keypoints, thickness=1, alpha=1.0):
    result = image.copy()
    b_conn = [(0, 5), (0, 6), (5, 6), (5, 11), (6, 12), (11, 12)]
    h_conn = [(0, 1), (0, 2), (1, 3), (2, 4)]
    l_conn = [(5, 7), (7, 9), (11, 13), (13, 15)]
    r_conn = [(6, 8), (8, 10), (12, 14), (14, 16)]
    for kp in keypoints:
        for i, j in b_conn:
            result = _draw_connection(result, kp[i], kp[j], (0, 255, 255), thickness)
        for i, j in h_conn:
            result = _draw_connection(result, kp[i], kp[j], (0, 255, 255), thickness)
        for i, j in l_conn:
            result = _draw_connection(result, kp[i], kp[j], (255, 255, 0), thickness)
        for i, j in r_conn:
            result = _draw_connection(result, kp[i], kp[j], (255, 0, 255), thickness)
    return cv2.addWeighted(result, alpha, image, 1.0 - alpha, 0)

# 绘制预测框
def draw_body_box(image, keypoints, thickness=1):
    result = image.copy()
    for kp in keypoints:
        result = _draw_box(result, kp[0], kp[1], kp[2], kp[3], (0, 255, 255), thickness)
    return cv2.addWeighted(result, 0.5, image, 1.0 - 0.5, 0)

video_test.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
# -*- coding:utf-8 -*-
# ------------------------------------------------- #
#      作者:赵泽荣
#      时间:2021926日(农历八月二十)
#      个人站点:1.https://zhao302014.github.io/
#              2.https://blog.csdn.net/IT_charge/
#      个人GitHub地址:https://github.com/zhao302014
# ------------------------------------------------- #
import cv2
import numpy as np
from utils.utils import ConvolutionalPoseMachine, draw_body_connections, draw_keypoints, draw_masks, draw_body_box

# 实例化 ConvolutionalPoseMachine 类(True 为使用预训练模型)
estimator = ConvolutionalPoseMachine(pretrained=True)
# opencv 读入视频
cap = cv2.VideoCapture('data/video.mp4')

# 读取成功意味着 cap.isOpened()==True,持续运行
while True:
    # frame 相当于一帧一帧的图像
    _, frame = cap.read()
    # 传入视频帧至实例化后的 ConvolutionalPoseMachine 类
    pred_dict = estimator(frame, masks=True, keypoints=True)
    # 调用定义的 get_masks 静态方法获取掩膜
    masks = estimator.get_masks(pred_dict['maskrcnn'], score_threshold=0.99)
    # 调用定义的 get_keypoints 静态方法获取关键点
    keypoints = estimator.get_keypoints(pred_dict['keypointrcnn'], score_threshold=0.99)
    # 调用定义的 get_boxes 静态方法获取关键点
    boxs = estimator.get_boxes(pred_dict['fasterrcnn'], score_threshold=0.99)
    # BGR 转灰度图像
    frame_dst = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 合并单通道成多通道
    frame_dst = cv2.merge([frame_dst] * 3)
    # 绘制掩膜
    overlay_m = draw_masks(frame_dst, masks, color=(0, 255, 0), alpha=0.5)
    # 绘制预测框
    overlay_b = draw_body_box(frame_dst, boxs, thickness=3)
    # 连接关键点
    overlay_k = draw_body_connections(frame, keypoints, thickness=2, alpha=0.7)
    # 绘制关键点
    overlay_k = draw_keypoints(overlay_k, keypoints, radius=4, alpha=0.8)
    # 将参数元组的元素数组按水平方向及垂直方向进行叠加
    # 预计显示结果如下示意:
    #      —————————————————————————————————
    #     |       原图       |   掩膜预测图   |
    #      —————————————————————————————————
    #     | 关键点及连接绘制图  |  预测框绘制图  |
    #      —————————————————————————————————
    # 水平排列
    image_h1 = np.hstack((frame, overlay_m))
    image_h2 = np.hstack((overlay_k, overlay_b))
    # 垂直排列
    image_v_and_h = np.vstack((image_h1, image_h2))
    # 处理后的视频帧显示
    cv2.imshow('Video Show', image_v_and_h)
    # cv2.waitKey(x):x数值越小,理论上运行越快(运行速度也与电脑硬件运行处理图片速度有关)
    if cv2.waitKey(1) & 0xff == 27:  # exit if pressed `ESC`(或按ESC退出)
        break
# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

camera_test.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
# -*- coding:utf-8 -*-
# ------------------------------------------------- #
#      作者:赵泽荣
#      时间:2021926日(农历八月二十)
#      个人站点:1.https://zhao302014.github.io/
#              2.https://blog.csdn.net/IT_charge/
#      个人GitHub地址:https://github.com/zhao302014
# ------------------------------------------------- #
import cv2
import numpy as np
from utils.utils import ConvolutionalPoseMachine, draw_body_connections, draw_keypoints, draw_masks, draw_body_box

# 实例化 ConvolutionalPoseMachine 类(True 为使用预训练模型)
estimator = ConvolutionalPoseMachine(pretrained=True)
# opencv 调用摄像头
cap = cv2.VideoCapture(0)

# 调用成功,持续运行
while True:
    # success 在视频读取时一直为 true,img 相当于一帧一帧的图像
    success, img = cap.read()
    # 传入视频帧至实例化后的 ConvolutionalPoseMachine 类
    pred_dict = estimator(img, masks=True, keypoints=True)
    # 调用定义的 get_masks 静态方法获取掩膜
    masks = estimator.get_masks(pred_dict['maskrcnn'], score_threshold=0.99)
    # 调用定义的 get_keypoints 静态方法获取关键点
    keypoints = estimator.get_keypoints(pred_dict['keypointrcnn'], score_threshold=0.99)
    # 调用定义的 get_boxes 静态方法获取关键点
    boxs = estimator.get_boxes(pred_dict['fasterrcnn'], score_threshold=0.99)
    # BGR 转灰度图像
    frame_dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 合并单通道成多通道
    frame_dst = cv2.merge([frame_dst] * 3)
    # 绘制掩膜
    overlay_m = draw_masks(frame_dst, masks, color=(0, 255, 0), alpha=0.5)
    # 绘制预测框
    overlay_b = draw_body_box(frame_dst, boxs, thickness=3)
    # 连接关键点
    overlay_k = draw_body_connections(img, keypoints, thickness=2, alpha=0.7)
    # 绘制关键点
    overlay_k = draw_keypoints(overlay_k, keypoints, radius=4, alpha=0.8)
    # 将参数元组的元素数组按水平方向及垂直方向进行叠加
    # 预计显示结果如下示意:
    #      —————————————————————————————————
    #     |       原图       |   掩膜预测图   |
    #      —————————————————————————————————
    #     | 关键点及连接绘制图  |  预测框绘制图  |
    #      —————————————————————————————————
    # 水平排列
    image_h1 = np.hstack((img, overlay_m))
    image_h2 = np.hstack((overlay_k, overlay_b))
    # 垂直排列
    image_v_and_h = np.vstack((image_h1, image_h2))
    # 处理后的视频帧显示
    cv2.imshow('Camera Show', image_v_and_h)
    # cv2.waitKey(x):x数值越小,理论上运行越快(运行速度也与电脑硬件运行处理图片速度有关)
    if cv2.waitKey(1) & 0xff == 27:  # exit if pressed `ESC`(或按ESC退出)
        break
# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

image_test.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
# -*- coding:utf-8 -*-
# ------------------------------------------------- #
#      作者:赵泽荣
#      时间:2021926日(农历八月二十)
#      个人站点:1.https://zhao302014.github.io/
#              2.https://blog.csdn.net/IT_charge/
#      个人GitHub地址:https://github.com/zhao302014
# ------------------------------------------------- #
import cv2
import numpy as np
from utils.utils import ConvolutionalPoseMachine, draw_body_connections, draw_keypoints, draw_masks, draw_body_box

# 实例化 ConvolutionalPoseMachine 类(True 为使用预训练模型)
estimator = ConvolutionalPoseMachine(pretrained=True)
# opencv 读入图片
img = cv2.imread('data/image.jpg')
# 传入图片至实例化后的 ConvolutionalPoseMachine 类
pred_dict = estimator(img, masks=True, keypoints=True)
# 调用定义的 get_masks 静态方法获取掩膜
masks = estimator.get_masks(pred_dict['maskrcnn'], score_threshold=0.99)
# 调用定义的 get_keypoints 静态方法获取关键点
keypoints = estimator.get_keypoints(pred_dict['keypointrcnn'], score_threshold=0.99)
# 调用定义的 get_boxes 静态方法获取关键点
boxs = estimator.get_boxes(pred_dict['fasterrcnn'], score_threshold=0.99)
# BGR转灰度图像
image_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 合并单通道成多通道
image_dst = cv2.merge([image_gray] * 3)
# 绘制掩膜
result_m = draw_masks(image_dst, masks, color=(0, 255, 0), alpha=0.5)
# 绘制预测框
result_b = draw_body_box(img, boxs, thickness=3)
# 连接关键点
result_k = draw_body_connections(img, keypoints, thickness=4, alpha=0.7)
# 绘制关键点
result_k = draw_keypoints(result_k, keypoints, radius=5, alpha=0.8)
# 全部绘制在一张图上
result1 = draw_body_box(result_m, boxs, thickness=3)
result = draw_body_connections(result1, keypoints, thickness=4, alpha=0.7)
result = draw_keypoints(result, keypoints, radius=5, alpha=0.8)
# 将参数元组的元素数组按水平方向及垂直方向进行叠加
# 预计显示结果如下示意:
#      —————————————————————————————————
#     |       原图       |   掩膜预测图   |
#      —————————————————————————————————
#     | 关键点及连接绘制图  |  预测框绘制图  |
#      —————————————————————————————————
# 水平排列
image_h1 = np.hstack((img, result_m))
image_h2 = np.hstack((result_k, result_b))
# 垂直排列
image_v_and_h = np.vstack((image_h1, image_h2))
# 展现单图结果
cv2.imshow('Image Separate Show', image_v_and_h)
cv2.imshow('Image Total Show', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MaskRCNN 基于OpenCV DNN的目标检测与实例分割
这里主要记录基于 OpenCV 4.x DNN 模块和 TensorFlow MaskRCNN 开源模型的目标检测与实例分割 的实现.
AIHGF
2019/05/13
1.9K0
MaskRCNN 基于OpenCV DNN的目标检测与实例分割
轻松学Pytorch –Mask-RCNN图像实例分割
前面介绍了torchvison框架下Faster-RCNN对象检测模型使用与自定义对象检测的数据集制作与训练。在计算机视觉所要面对的任务中,最常见的就是对象检测、图像语义分割跟实例分割,torchvision支持Mask-RCNN模型的调用与自定义数据训练,可以同时实现对象检测与实例分割任务。本文主要跟大家分享一下如何使用mask-rcnn网络实现对象检测与实例分割,下一篇将会介绍如何制作数据集训练Mask-RCNN网络。
OpenCV学堂
2020/08/17
2.5K0
Yolov8 源码解析(四十三)
ApacheCN_飞龙
2024/09/13
2930
OpenCV DNN模块教程(四)Mask-RCNN实例分割
本文为OpenCV DNN模块官方教程的扩展,介绍如何使用OpenCV加载TensorFlow Object Detection API训练的模型做实例分割,以Mask-RCNN为例来检测缺陷。TensorFlow Object Detection API的github链接地址如下:https://github.com/tensorflow/models/tree/master/research/object_detection
Color Space
2020/10/29
1.1K0
OpenCV DNN模块教程(四)Mask-RCNN实例分割
轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
大家好,这个是轻松学Pytorch的第20篇的文章分享,主要是给大家分享一下,如何使用数据集基于Mask-RCNN训练一个行人检测与实例分割网络。这个例子是来自Pytorch官方的教程,我这里是根据我自己的实践重新整理跟解读了一下,分享给大家。
OpenCV学堂
2020/08/20
3.5K0
轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
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
恺明大神 Mask R-CNN 超实用教程
翻 译 | 天字一号(郑州大学)、李美丽(华南师范大学)、had_in(电子科技大学)、nengdaiper(北京科技大学)
AI研习社
2019/09/25
2.5K1
恺明大神 Mask R-CNN 超实用教程
使用Python和Mask R-CNN自动寻找停车位,这是什么神操作?
作者想用深度学习来解决一个小麻烦,于是用 Python 和 Mask R-CNN 设计了一个模型。该模型可以自动检测停车位并在发现可用车位后向他发送短信。这是什么神仙(sao)操作?
昱良
2019/03/07
1.7K0
使用YOLO11和霍夫变换追踪站台黄线穿越者
大家都知道,在地铁站等车时,广播里总是提醒我们:“别越过黄线哦!”但是,总有那么一些人,因为分心或者不注意,就站在了黄线边上,甚至跨了过去。这可是很危险的!今天,就让我带大家看看,怎么用人工智能来做个智能监控系统,一旦有人跨过黄线,系统就能立刻发出警告,保护大家的安全。
小白学视觉
2024/12/06
3360
使用YOLO11和霍夫变换追踪站台黄线穿越者
挑战任务: 车道检测
本次挑战内容来自Udacity自动驾驶纳米学位课程,素材中车道保持不变,车道线清晰明确,易于检测,是车道检测的基础版本,网上也有很多针对复杂场景的高级实现,感兴趣的童鞋可以自行了解。
CodecWang
2021/12/07
5560
挑战任务: 车道检测
cv2.getTextSize()
项目:chainer-faster-rcnn 作者:mitmul | 项目源码 | 文件源码
狼啸风云
2021/03/03
1.9K0
教程 | 基于计算机视觉使用Python和OpenCV计算道路交通
本文介绍了不使用复杂的深度学习算法计算道路交通的方法。该方法基于计算机视觉,仅使用 Python 和 OpenCV,在背景提取算法的帮助下,使用简单的移动侦测来完成任务。 今天我们将学习如何在没有复
刘盼
2018/03/16
1.9K0
教程 | 基于计算机视觉使用Python和OpenCV计算道路交通
(Python)用Mask R-CNN检测空闲车位
我住在一个大城市。 但就像大多数城市一样,在这里寻找停车位总是一件很困难的事情。 停车位通常很快被抢走,即使你有一个专门的停车位,朋友们来拜访你也是一件很困难的事,因为他们找不到停车位。
AI研习社
2019/03/14
2.3K0
使用opencv实现实例分割,一学就会|附源码
无论是从酒店房间接听电话、在办公里楼工作,还是根本不想在家庭办公室等情况,电话会议模糊功能都可以让会议与会者专注于自己,这样的功能对于在家工作并希望保护其家庭成员隐私的人特别有用。 为了实现这样的功能,微软利用计算机视觉、深度学习以及实例分割技术实现。 在之前的博文中,介绍了如何利用YOLO以及OpenCV实现目标检测的功能,今天将采用Mask R-CNN来构建视频模糊功能。
用户3578099
2019/08/15
2.4K0
基于OpenCV的实时车道检测
自动驾驶汽车是人工智能领域最具颠覆性的创新之一。它们借助深度学习算法不断推动社会发展,并在移动领域创造新的机遇。自动驾驶汽车可以去任何传统汽车可以去的地方,也能像经验丰富的人类驾驶员一样完成各种操作。但是,正确的训练是非常重要的。在自动驾驶汽车的训练过程中,车道检测是其中的一个重要步骤,也是最初要完成的步骤。今天,我们将学习如何使用视频进行车道检测。
一点人工一点智能
2023/08/21
1K0
基于OpenCV的实时车道检测
OpenCV4中如何使用Mask RCNN网络
Mask-RCNN可以看成是在Faster-RCNN的基础上多出一个分支实现的实例分割网络二值化mask层输出,而且这个分支mask分割网络是全卷积网络,结构显示如下:
OpenCV学堂
2019/07/25
1.6K0
OpenCV4中如何使用Mask RCNN网络
基于Aidlux平台的人脸关键点检测以及换脸算法
运行Aidlux中examples的自带Demo:人脸、人体、手关键点检测、头发语义分割、人像语义分割、人脸检测、图像风格迁移、句子分类等,
用户10686717
2023/08/01
3350
手把手教你用深度学习做物体检测(一): 快速感受物体检测的酷炫
如上图所示, 物体检测就是需要检测出图像中有哪些目标物体,并且框出其在图像中的位置。
AI粉嫩特工队
2019/09/05
1.6K0
手把手教你用深度学习做物体检测(一): 快速感受物体检测的酷炫
python+OpenCV 特征点检测
Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。基本原理是根据公式:
流川疯
2019/01/18
1.4K0
实战角度!图片去水印及图片匹配替换几种方法分析
最近手上有一批图片需要去水印,同时也要对于大图中某个小部分做替换。之前网站的很多图片水印的处理方式都比较简单粗暴,确定水印加在图片上的大致位置,然后做一个不透明度100%的图片覆盖上去,完美解决问题,但是不理想的地方也显而易见,用户观感特别不好。所以,借着这次处理的机会,想把问题根除掉。本文会分四部分,零部分(你没有看错!)主要是自己尝试的路径,如果想简单直接,不失为一种有效方式。第一部分把可以应用的计算机视觉领域可能会用到的算法或者对思路有拓展的算法进行总结,同时对于有些算法的使用过程中遇到的问题,结合我自己的实战经验给出一些实践避坑指南。第二部分,对应第一部分的总结,会给出通用的实现demo,第三部分,会对本文进行总结,相信你在图片匹配替换或者去水印领域遇到相关问题,我的文章都能给你些许思路。
用户1413827
2023/11/28
5110
实战角度!图片去水印及图片匹配替换几种方法分析
推荐阅读
相关推荐
MaskRCNN 基于OpenCV DNN的目标检测与实例分割
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验