当前位置: 首页 > news >正文

对于图像的关键点数据提取openpose

import cv2
import matplotlib.pyplot as plt
import copy
import numpy as npfrom src import model
from src import util
from src.body import Body
from src.hand import Hand# 初始化模型,
body_estimation = Body('model/body_pose_model.pth')
hand_estimation = Hand('model/hand_pose_model.pth')# 从指定路径读取一张测试图像,并存储在oriImg变量中。图像以 B(蓝色)、G(绿色)、R(红色)的顺序存储。
test_image = 'images/demo.jpg'
oriImg = cv2.imread(test_image)  # B,G,R order
# 使用body_estimation模型对输入图像进行人体姿态估计,
# 得到候选关键点candidate和连接信息subset。然后创建一个原始图像的副本canvas,
# 并使用util.draw_bodypose函数在canvas上绘制人体姿态。
candidate, subset = body_estimation(oriImg)
canvas = copy.deepcopy(oriImg)
canvas = util.draw_bodypose(canvas, candidate, subset)
# print(canvas)
# detect hand
# 使用util.handDetect函数根据人体姿态估计的结果检测手部区域,
# 得到手部区域的列表hands_list,其中每个元素包含手部区域的左上角坐标(x, y)、
# 宽度w以及是否为左手的标志is_left。
hands_list = util.handDetect(candidate, subset, oriImg)
# 创建一个空列表all_hand_peaks用于存储所有手部关键点
all_hand_peaks = []
for x, y, w, is_left in hands_list:# cv2.rectangle(canvas, (x, y), (x+w, y+w), (0, 255, 0), 2, lineType=cv2.LINE_AA)# cv2.putText(canvas, 'left' if is_left else 'right', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)# if is_left:# plt.imshow(oriImg[y:y+w, x:x+w, :][:, :, [2, 1, 0]])# plt.show()# 使用hand_estimation模型对手部区域图像进行手部姿态估计,得到关键点peaks。# 对于关键点的横坐标,如果为 0,则保持为 0,# 否则加上手部区域左上角的横坐标x,对纵坐标进行类似处理,这样将局部坐标转换为全局坐标peaks = hand_estimation(oriImg[y:y + w, x:x + w, :])peaks[:, 0] = np.where(peaks[:, 0] == 0, peaks[:, 0], peaks[:, 0] + x)peaks[:, 1] = np.where(peaks[:, 1] == 0, peaks[:, 1], peaks[:, 1] + y)# else:#     peaks = hand_estimation(cv2.flip(oriImg[y:y+w, x:x+w, :], 1))#     peaks[:, 0] = np.where(peaks[:, 0]==0, peaks[:, 0], w-peaks[:, 0]-1+x)#     peaks[:, 1] = np.where(peaks[:, 1]==0, peaks[:, 1], peaks[:, 1]+y)#     print(peaks)all_hand_peaks.append(peaks)
canvas = util.draw_handpose(canvas, all_hand_peaks)plt.imshow(canvas[:, :, [2, 1, 0]])
plt.axis('off')
plt.show()

对上述关键点,提取,与直接在模型body、hand提取出的有很大的差异。


http://www.mrgr.cn/news/63953.html

相关文章:

  • Java 用户随机选择导入ZIP文件,解压内部word模板并入库,Windows/可视化Linux系统某麒麟国防系统...均可适配
  • Qt 学习第十五天:连接mysql数据库进行增删查改操作
  • 【5.5】指针算法-三指针解决颜色分类
  • 弃用 RestTemplate,来了解一下官方推荐的 WebClient !
  • Axios 请求库 + OpenAPI 前端代码生成
  • android浏览器源码 可输入地址或关键词搜索 android studio 2024 可开发可改地址
  • 第三百零八节 Log4j教程 - Log4j日志到数据库
  • AWS RDS MySQL内存使用
  • Caffeine 手动策略缓存 put() 方法源码解析
  • Copilot功能
  • 单例模式的五种实现方式及优缺点
  • 从0开始学统计-什么是Z-score
  • 【国产MCU系列】-GD32F4开发环境搭建(基于Embedded Builder)
  • 自动化测试工具Ranorex Studio(十九)-其他编辑选项
  • HTML 基础标签——分组标签 <div>、<span> 和基础语义容器
  • magic-api简单使用六:删除接口(支持路径传参)
  • 从实验室到生活:超分子水凝胶湿电发电机的应用之路
  • 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!
  • 学生党百元预算如何选到高性价比头戴耳机?四款百元热门耳机推荐
  • 国密SM2 非对称加解密前后端工具
  • 在 openEuler 22.03 服务器上搭建 web 服务教程
  • 100种算法【Python版】第34篇——PageRank算法
  • 构建高效信息学科平台:Spring Boot实践
  • 小区搜索和SSB简介
  • 华为机试HJ17 坐标移动
  • 基于java+SpringBoot+Vue的美容院管理系统设计与实现