记录::关键点检测数据转化和可视化LSP、FLIC转yolov8-pose的txt

2024-01-19 18:04

本文主要是介绍记录::关键点检测数据转化和可视化LSP、FLIC转yolov8-pose的txt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近想试一下关键点检测的效果,先从yolov8-pose开始,不想跑coco那么大的数据集,就找了两个比较小的

yolov8-pose的txt数据格式如下:

        类别、box、节点,数据做了归一化

可视化只显示了点,没有连线

参数:

        mat_path 是 数据集mat文件所在地址,包含mat文件名
        image_path 是 数据集图像的地址,不包含图像名
        save_path 是 转换为txt后保存的地址
        save_path 是可视化结果保存的地址

1、lsp

LSP:运动场景,单人数据集,截取后的单人区域,图片很小,2000张图片,14个节点

def save_joints_lsp(mat_path, image_path, save_path,save_path1):"""mat_path 是 lsp数据集mat文件所在地址,包含mat文件名image_path 是 lsp数据集图像的地址,不包含图像名save_path 是 转换为txt后保存的地址save_path 是可视化结果保存的地址lsp数据集共2000张图片"""joints = loadmat(mat_path)joints = joints["joints"].transpose(2, 0, 1)joints = joints[:, :, :]#num = 0for img_path in glob.glob("%s/*.jpg" % image_path):img_name = img_path.split("/")[-1].split(".")[0]img = Image.open(img_path)img = np.array(img, dtype=np.uint8)img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)imgh, imgw = img.shape[:2]num = int(img_name[2:])cen_points = joints[num-1, ...]points_num = cen_points.shape[-1]point_dict = {}ps = []for points_ in range(points_num):point_x = cen_points[0, points_]point_y = cen_points[1, points_]vi = cen_points[2, points_]if vi==0:vi = 2.0elif vi==2:print(name)point_dict[str(points_)] = [point_x/imgw, point_y/imgh,vi]# cv2.circle(img, (int(point_x), int(point_y)), 5, colors[points_],#                   thickness=-1)ps.append([int(point_x), int(point_y)])# x, y, w, h = cv2.boundingRect(np.array([ps]))# x = (x+w/2)/imgw# y = (y+h/2)/imgh# w = (w+6)/imgw# h = (h+6)/imghx =0.5y = 0.5w =1h=1with open(os.path.join(save_path, img_name + ".txt"), "w") as f:f.write(str(0)+" "+str(x)+" "+str(y)+" "+str(w)+" "+str(h))cv2.rectangle(img,(int(x*imgw-w*imgw/2),int(y*imgh-h*imgh/2)),(int(x*imgw+w*imgw/2),int(y*imgh+h*imgh/2)),(0,0,255),5)for i in point_dict:p = point_dict[i]f.write(" "+str(p[0]) + " " + str(p[1]) + " " + str(p[2]))cv2.circle(img, (int(p[0]*imgw), int(p[1]*imgh)), 5, colors[points_],thickness=-1)f.write("\n")#img_txt.write(str(point_dict))f.close()#num += 1# 若不想看图片中关键点的位置是否准确,请注释掉后面两行# cv2.imshow("img", img)# cv2.waitKey()cv2.imwrite(save_path1+"/"+img_name+".jpg",img)

2、FLIC

FLIC:电影场景,多人情况下label也只有单人,labels有29个节点,大多为nan,选了9个节点

def save_flic(mat_path, image_path, save_path,save_path1):examples = loadmat(mat_path)examples = examples["examples"][0]joint_ids = ['lsho', 'lelb', 'lwri', 'rsho', 'relb', 'rwri', 'lhip','lkne', 'lank', 'rhip', 'rkne', 'rank', 'leye', 'reye','lear', 'rear', 'nose', 'msho', 'mhip', 'mear', 'mtorso','mluarm', 'mruarm', 'mllarm', 'mrlarm', 'mluleg', 'mruleg','mllleg', 'mrlleg']available = ['lsho', 'lelb', 'lwri', 'rsho', 'relb', 'rwri', 'lhip','rhip', 'head']for i, example in enumerate(examples):joint = example[2].Timg_name = example[3][0]joints = dict(zip(joint_ids, joint))img =cv2.imread(image_path+"/"+img_name)img_name = img_name.split(".")[0]imgh, imgw = img.shape[:2]point_dict = {}ps = []head = np.asarray(joints['reye']) + \np.asarray(joints['leye']) + \np.asarray(joints['nose'])head /= 3joints['head'] = head.tolist()for name in available:#joint_pos.append(joints[name])point = joints[name]point_dict[name] = [point[0]/imgw, point[1]/imgh,2.0]ps.append([int(point[0]), int(point[1])])x, y, w, h = cv2.boundingRect(np.array([ps]))x = (x+w/2)/imgwy = (y+h/2)/imghw = (w+20)/imgwh = (h+20)/imghwith open(os.path.join(save_path, img_name + ".txt"), "w") as f:f.write(str(0) + " " + str(x) + " " + str(y) + " " + str(w) + " " + str(h))cv2.rectangle(img, (int(x * imgw - w * imgw / 2), int(y * imgh - h * imgh / 2)),(int(x * imgw + w * imgw / 2), int(y * imgh + h * imgh / 2)),(0, 0, 255), 5)c =0for i in point_dict:p = point_dict[i]f.write(" " + str(p[0]) + " " + str(p[1]) + " " + str(p[2]))cv2.circle(img, (int(p[0] * imgw), int(p[1] * imgh)), 5, colors[c],thickness=-1)f.write("\n")c = c+1# img_txt.write(str(point_dict))f.close()# num += 1# 若不想看图片中关键点的位置是否准确,请注释掉后面两行# cv2.imshow("img", img)# cv2.waitKey()cv2.imwrite(save_path1 + "/" + img_name + ".jpg", img)

完整代码:https://github.com/ziyaoma/detect-pose

参考:LSP数据集与MPII数据集标签转txt文件(字典形式储存)_mpii标注文件修改成txt-CSDN博客

https://github.com/Fangyh09/PoseDatasets

这篇关于记录::关键点检测数据转化和可视化LSP、FLIC转yolov8-pose的txt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623229

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论