php 显示不同网站内容,网络公司网站报价,官方网站案例,泉州网站建设企业FreiHAND #xff08;handposeX-json 格式#xff09;数据集-release 注意#xff1a;
1)为了方便使用#xff0c;按照 handposeX json 自定义格式存储
2)使用常见依赖库进行调用,降低数据集使用难度。
3)部分数据集获取请加入#xff1a;DataBall-X数据球(free)
4)完… FreiHAND handposeX-json 格式数据集-release 注意
1)为了方便使用按照 handposeX json 自定义格式存储
2)使用常见依赖库进行调用,降低数据集使用难度。
3)部分数据集获取请加入DataBall-X数据球(free)
4)完整数据集获取请加入DataBall-X数据球(vip) FreiHAND 数据集官方项目地址https://github.com/lmb-freiburg/freihand
handposeX-json 格式 项目地址GitHub - XIAN-HHappy/handpose_x_plus
---------------
一、handposeX json 格式示例
cx,cy,fx,fy为相机内参。
label:左右手标签
joint3d:三维手部21关键点
vertex3d:三维手mesh网格点
{author: XIAN,img_name:: ,cx: 112.0,cy: 112.0,fx: 388.9018310596544,fy: 388.71231836584275,hands: [{label: right,joint3d: [[29.402047395706177,-27.920207008719444,587.0807766914368],······],vertex3d: [[10.056010007858276,29.915300235152245,-626.9440693855286],······]}]}
---------------
二、脚本运行
cd script/FreiHANDpython read_handposex_json.py
read_handposex_json.py具体实现如下简洁明了
#-*-coding:utf-8-*-
# date:2024-02-23
# Author: XIAN
# function: handposeX json 格式读取数据标签
import sys
sys.path.append(./)
import os
import cv2
import json
import numpy as np
import randomfunction: 绘制二维关键点连线def draw_joints(img_,hand_,x,y):thick 2colors [(0,215,255),(255,115,55),(5,255,55),(25,15,255),(225,15,55)]#cv2.line(img_, (int(hand_[0][x]x), int(hand_[0][y]y)),(int(hand_[1][x]x), int(hand_[1][y]y)), colors[0], thick)cv2.line(img_, (int(hand_[1][x]x), int(hand_[1][y]y)),(int(hand_[2][x]x), int(hand_[2][y]y)), colors[0], thick)cv2.line(img_, (int(hand_[2][x]x), int(hand_[2][y]y)),(int(hand_[3][x]x), int(hand_[3][y]y)), colors[0], thick)cv2.line(img_, (int(hand_[3][x]x), int(hand_[3][y]y)),(int(hand_[4][x]x), int(hand_[4][y]y)), colors[0], thick)cv2.line(img_, (int(hand_[0][x]x), int(hand_[0][y]y)),(int(hand_[5][x]x), int(hand_[5][y]y)), colors[1], thick)cv2.line(img_, (int(hand_[5][x]x), int(hand_[5][y]y)),(int(hand_[6][x]x), int(hand_[6][y]y)), colors[1], thick)cv2.line(img_, (int(hand_[6][x]x), int(hand_[6][y]y)),(int(hand_[7][x]x), int(hand_[7][y]y)), colors[1], thick)cv2.line(img_, (int(hand_[7][x]x), int(hand_[7][y]y)),(int(hand_[8][x]x), int(hand_[8][y]y)), colors[1], thick)cv2.line(img_, (int(hand_[0][x]x), int(hand_[0][y]y)),(int(hand_[9][x]x), int(hand_[9][y]y)), colors[2], thick)cv2.line(img_, (int(hand_[9][x]x), int(hand_[9][y]y)),(int(hand_[10][x]x), int(hand_[10][y]y)), colors[2], thick)cv2.line(img_, (int(hand_[10][x]x), int(hand_[10][y]y)),(int(hand_[11][x]x), int(hand_[11][y]y)), colors[2], thick)cv2.line(img_, (int(hand_[11][x]x), int(hand_[11][y]y)),(int(hand_[12][x]x), int(hand_[12][y]y)), colors[2], thick)cv2.line(img_, (int(hand_[0][x]x), int(hand_[0][y]y)),(int(hand_[13][x]x), int(hand_[13][y]y)), colors[3], thick)cv2.line(img_, (int(hand_[13][x]x), int(hand_[13][y]y)),(int(hand_[14][x]x), int(hand_[14][y]y)), colors[3], thick)cv2.line(img_, (int(hand_[14][x]x), int(hand_[14][y]y)),(int(hand_[15][x]x), int(hand_[15][y]y)), colors[3], thick)cv2.line(img_, (int(hand_[15][x]x), int(hand_[15][y]y)),(int(hand_[16][x]x), int(hand_[16][y]y)), colors[3], thick)cv2.line(img_, (int(hand_[0][x]x), int(hand_[0][y]y)),(int(hand_[17][x]x), int(hand_[17][y]y)), colors[4], thick)cv2.line(img_, (int(hand_[17][x]x), int(hand_[17][y]y)),(int(hand_[18][x]x), int(hand_[18][y]y)), colors[4], thick)cv2.line(img_, (int(hand_[18][x]x), int(hand_[18][y]y)),(int(hand_[19][x]x), int(hand_[19][y]y)), colors[4], thick)cv2.line(img_, (int(hand_[19][x]x), int(hand_[19][y]y)),(int(hand_[20][x]x), int(hand_[20][y]y)), colors[4], thick)function: 21个三维关键点转为二维点并进行绘制def Draw_KeyPoints3D(img,Joints_,fx,fy,cx,cy):#----------------------------------- 计算 3D到 2D相机的投影X Joints_[:,0]Y Joints_[:,1]Z Joints_[:,2]x_p X / Zy_p Y / Z#三维点转为二维点x_2d fx* x_p cxy_2d fy* y_p cypts2d_list {}pts2d_ss []for ii in range(x_2d.shape[0]):x_,y_ x_2d[ii],y_2d[ii]pts2d_list[str(ii)]{x:x_,y:y_}cv2.circle(img, (int(x_),int(y_)), 4, (25,155,255), -1)cv2.circle(img, (int(x_),int(y_)), 2, (255,0,55), -1)pts2d_ss.append((x_,y_))draw_joints(img,pts2d_list,0,0)pts2d_ss np.array(pts2d_ss)return pts2d_ssdef Draw_Vertex_KeyPoints(img,img_mesh,Vertex,fx_d,fy_d,cx_d,cy_d,triangles_index,RGB_ (245, 125, 35)):#----------------------------------- 计算 Mano 到 相机的投影Xdc -Vertex[:,0].reshape(-1)Ydc -Vertex[:,1].reshape(-1)Zdc -Vertex[:,2].reshape(-1)x_mano_p Xdc / Zdcy_mano_p Ydc / Zdc#点云转为二维图x_mano fx_d* x_mano_p cx_dy_mano fy_d* y_mano_p cy_dmanopts_list []mesh_list []color_rr (random.randint(100,230),random.randint(120,250),random.randint(100,240))for ii in range(triangles_index.shape[0]):a,b,c triangles_index[ii]x1_,y1_ x_mano[a].astype(np.int32),y_mano[a].astype(np.int32)x2_,y2_ x_mano[b].astype(np.int32),y_mano[b].astype(np.int32)x3_,y3_ x_mano[c].astype(np.int32),y_mano[c].astype(np.int32)area_ np.array([[int(x1_), int(y1_)], [int(x2_), int(y2_)], [int(x3_),int(y3_)]])color_ (255, 0, 0)# cv2.fillPoly(mask_v, [area_], (255))cv2.fillPoly(img_mesh, [area_], color_rr)mesh_list.append(area_)cv2.fillPoly(img, mesh_list, RGB_)
if __name__ __main__:path_root datasets/path_s_image {}/image/.format(path_root)path_s_label {}/label/.format(path_root)triangles_index np.load(../../config/triangles_index.npy).reshape(-1,3)out_cnt 0hand_cnt 0for f_ in os.listdir(path_s_image):path_img path_s_image f_path_json path_s_label f_.replace(.jpg,.json)with open(path_json, r, encodingutf-8) as file:data_json json.load(file)hands_json data_json[hands]cx,cy,fx,fy data_json[cx],data_json[cy],data_json[fx],data_json[fy]img_ cv2.imread(path_img)img_joint img_.copy()img_mesh img_.copy()img_mask np.zeros(img_.shape).astype(np.uint8)img_mask[:,:,:]255for msg_ in hands_json:RGB_ (245, 55, 133)if msg_[label] left:RGB_ (25, 255, 133)Joints3D np.array(msg_[joint3d])Vertex3D np.array(msg_[vertex3d])pts2d_ss Draw_KeyPoints3D(img_joint,Joints3D,fx,fy,cx,cy)Draw_Vertex_KeyPoints(img_mesh,img_mask,Vertex3D,fx,fy,cx,cy,triangles_index,RGB_ RGB_)hand_cnt 1stk_1 np.hstack((img_,img_joint))stk_2 np.hstack((img_mesh,img_mask))stk_ np.vstack((stk_1,stk_2))cv2.namedWindow(img_stk,0)cv2.imshow(img_stk,stk_)out_cnt 1print(---------imgs_num : [{}] , hands_num: [{}].format(out_cnt,hand_cnt))key_id cv2.waitKey(0)cv2.imwrite(f1.jpg,stk_)if key_id 27:break 助力快速掌握数据集的信息和使用方式。
数据可以如此美好