{"id":2075,"date":"2021-08-11T17:42:40","date_gmt":"2021-08-11T09:42:40","guid":{"rendered":"http:\/\/www.yatenglg.cn\/?p=2075"},"modified":"2022-10-18T16:34:39","modified_gmt":"2022-10-18T08:34:39","slug":"open3d-%e7%bd%91%e6%a0%bc%e5%8f%8a%e5%85%b6%e6%93%8d%e4%bd%9c","status":"publish","type":"post","link":"https:\/\/www.yatenglg.cn\/blog\/?p=2075","title":{"rendered":"open3d-\u7f51\u683c\u53ca\u5176\u64cd\u4f5c"},"content":{"rendered":"\n<h1>open3d\u63d0\u4f9b\u4e86\u4e00\u4e2a\u4e09\u89d2\u7f51\u683c\u6570\u636e\u7ed3\u6784 <strong>TriangleMesh<\/strong><\/h1>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>class TriangleMesh(MeshBase):\n    adjacency_list          # \u6bcf\u4e2a\u9876\u70b9\u76f8\u90bb\u9876\u70b9\u96c6\u5408\n    textures                # \u7eb9\u7406\n    triangles               # \u4e09\u89d2\u5f62\n    triangle_material_ids   # \u6750\u8d28\u7d22\u5f15\n    triangle_normals        # \u4e09\u89d2\u5f62\u6cd5\u5411\u91cf\n    triangle_uvs            # uv\u5750\u6807\n    vertex_colors           # \u9876\u70b9\u989c\u8272\n    vertex_normals          # \u9876\u70b9\u6cd5\u5411\u91cf\n    vertices                # \u9876\u70b9\n    def __init__(self, *args, **kwargs):\n        &quot;&quot;&quot;\n        __init__(*args, **kwargs)\n        Overloaded function.\n        1. __init__(self: open3d.cpu.pybind.geometry.TriangleMesh) -&gt; None\n        Default constructor\n        2. __init__(self: open3d.cpu.pybind.geometry.TriangleMesh, arg0: open3d.cpu.pybind.geometry.TriangleMesh) -&gt; None\n        Copy constructor\n        3. __init__(self: open3d.cpu.pybind.geometry.TriangleMesh, vertices: open3d.cpu.pybind.utility.Vector3dVector, triangles: open3d.cpu.pybind.utility.Vector3iVector) -&gt; None\n        Create a triangle mesh from vertices and triangle indices\n        &quot;&quot;&quot;\n    # \u4e09\u89d2\u5f62\u8fde\u901a\u7c07\u3002 \u8fd4\u56de\u6bcf\u4e2a\u7c07\u4e2d\u4e09\u89d2\u5f62\u7d22\u5f15\uff0c\u7c07\u4e2d\u4e09\u89d2\u5f62\u4e2a\u6570\uff0c\u7c07\u9762\u79ef\u3002\n    def cluster_connected_triangles(self):\n    # \u8ba1\u7b97\u6bcf\u4e2a\u9876\u70b9\u7684\u76f8\u90bb\u9876\u70b9\u96c6\u5408\u3002\n    def compute_adjacency_list(self):\n    # \u8ba1\u7b97\u51f8\u5305\n    def compute_convex_hull(self): \n    # \u8ba1\u7b97\u4e09\u89d2\u5f62\u6cd5\u5411\u91cf\n    def compute_triangle_normals(self, normalized=True):\n    # \u8ba1\u7b97\u8868\u9762\u6cd5\u5411\u91cf\n    def compute_vertex_normals(self, normalized=True):\n    def create_arrow(self, cylinder_radius=1.0, cone_radius=1.5, cylinder_height=5.0, cone_height=4.0, resolution=20, cylinder_split=4, cone_split=1): \n    def create_box(self, width=1.0, height=1.0, depth=1.0, create_uv_map=False, map_texture_to_each_face=False): \n    def create_cone(self, radius=1.0, height=2.0, resolution=20, split=1, create_uv_map=False): \n    def create_coordinate_frame(self, size=1.0, origin=None, *args, **kwargs): \n    def create_cylinder(self, radius=1.0, height=2.0, resolution=20, split=4, create_uv_map=False): \n    def create_from_point_cloud_alpha_shape(self, *args, **kwargs): \n    def create_from_point_cloud_ball_pivoting(self, pcd, radii): \n    def create_from_point_cloud_poisson(self, pcd, depth=8, width=0, scale=1.1, linear_fit=False, n_threads=-1): \n    def create_icosahedron(self, radius=1.0, create_uv_map=False): \n    def create_moebius(self, length_split=70, width_split=15, twists=1, raidus=1, flatness=1, width=1, scale=1): \n    def create_octahedron(self, radius=1.0, create_uv_map=False): \n    def create_sphere(self, radius=1.0, resolution=20, create_uv_map=False):\n    def create_tetrahedron(self, radius=1.0, create_uv_map=False):\n    def create_torus(self, torus_radius=1.0, tube_radius=0.5, radial_resolution=30, tubular_resolution=20): \n    # \u88c1\u526a\u3002 \u8f93\u5165aabb \u6216 obb\n    def crop(self, *args, **kwargs): \n    def deform_as_rigid_as_possible(self, constraint_vertex_indices, constraint_vertex_positions, max_iter, energy=None, smoothed_alpha=0.01):\n    def euler_poincare_characteristic(self): \n    def filter_sharpen(self, number_of_iterations=1, strength=1, filter_scope=None): \n    # \u62c9\u666e\u62c9\u65af\u7b97\u5b50\n    def filter_smooth_laplacian(self, number_of_iterations=1, lambda=0.5, filter_scope=None): \n    # \u7b80\u5355\u90bb\u57df\u5e73\u5747\u503c \u4e09\u89d2\u5f62\u5e73\u6ed1\n    def filter_smooth_simple(self, number_of_iterations=1, filter_scope=None): \n    # Taubin \u4e09\u89d2\u5f62\u5e73\u6ed1\n    def filter_smooth_taubin(self, number_of_iterations=1, lambda=0.5, mu=-0.53, filter_scope=None): \n    def get_non_manifold_edges(self, allow_boundary_edges=True): \n    def get_non_manifold_vertices(self): \n    def get_self_intersecting_triangles(self): \n    def get_surface_area(self): \n    def get_volume(self): \n    def has_adjacency_list(self): \n    def has_textures(self): \n    def has_triangles(self): \n    def has_triangle_material_ids(self): \n    def has_triangle_normals(self): \n    def has_triangle_uvs(self): \n    def has_vertex_colors(self): \n    def has_vertex_normals(self): \n    def has_vertices(self):\n    # \u662f\u5426\u662f\u8fb9\u6d41\u5f62\n    def is_edge_manifold(self, allow_boundary_edges=True):\n    # \u5224\u65ad\u5f53\u524d\u4e09\u89d2\u7f51\u662f\u5426\u4e0e\u7ed9\u5b9a\u4e09\u89d2\u7f51\u76f8\u4ea4\n    def is_intersecting(self, arg0):\n    # \u662f\u5426\u53ef\u5b9a\u5411\u3002 \u4e09\u89d2\u7f51\u662f\u5426\u53ef\u4ee5\u4ee5\u6240\u6709\u6cd5\u5411\u91cf\u6307\u5411\u5916\u90e8\u7684\u65b9\u5f0f\u5b9a\u5411\n    def is_orientable(self): \n    # \u5224\u65ad\u662f\u5426\u81ea\u76f8\u4ea4\n    def is_self_intersecting(self):\n    # \u662f\u5426\u662f\u9876\u70b9\u6d41\u5f62\n    def is_vertex_manifold(self): \n    # \u662f\u5426\u662f\u6c34\u5bc6\u7f51\u683c\n    def is_watertight(self): \n    # \u5408\u5e76\u9876\u70b9\u3002 \u8f93\u5165\u9876\u70b9\u95f4\u8ddd\u79bb\n    def merge_close_vertices(self, eps): \n    # \u5f52\u4e00\u5316\u6cd5\u5411\u91cf\n    def normalize_normals(self): \n    # \u6cd5\u5411\u91cf\u65b9\u5411\u4e00\u81f4\u3002 \u5982\u679c\u6cd5\u5411\u91cf\u53ef\u4ee5\u5b9a\u5411\uff0c\u4f7f\u6240\u6709\u6cd5\u5411\u91cf\u6307\u5411\u540c\u4e00\u65b9\u5411\n    def orient_triangles(self): \n    # \u4e0a\u8272\u3002 \u989c\u8272rgb, \u8303\u56f40~1\n    def paint_uniform_color(self, arg0): \n    # \u5220\u9664\u591a\u4f59\u7684\u4e09\u89d2\u5f62\u3002 \u8fd9\u4e2a\u95ee\u9898\u4e00\u822c\u662f\u7531\u4e8e\u5408\u5e76\u9876\u70b9\u9020\u6210\u7684\u3002\n    def remove_degenerate_triangles(self): \n    # \u5220\u9664\u91cd\u590d\u7684\u4e09\u89d2\u5f62\u3002\n    def remove_duplicated_triangles(self): \n    # \u5220\u9664\u91cd\u590d\u7684\u9876\u70b9\u3002\n    def remove_duplicated_vertices(self): \n    # \u5220\u9664\u975e\u6d41\u5f62\u8fb9\u3002\n    def remove_non_manifold_edges(self): \n    # \u901a\u8fc7\u7d22\u5f15\u5220\u9664\u4e09\u89d2\u5f62\u3002\n    def remove_triangles_by_index(self, triangle_indices): \n    # \u901a\u8fc7\u63a9\u7801\u5220\u9664\u4e09\u89d2\u5f62\u3002\n    def remove_triangles_by_mask(self, triangle_mask):\n    # \u5220\u9664\u4e3a\u5f15\u7528\u7684\u9876\u70b9\u3002\n    def remove_unreferenced_vertices(self): \n    # \u901a\u8fc7\u7d22\u5f15\u5220\u9664\u9876\u70b9\u3002\n    def remove_vertices_by_index(self, vertex_indices): \n    # \u901a\u8fc7\u63a9\u7801\u5220\u9664\u9876\u70b9\u3002\n    def remove_vertices_by_mask(self, vertex_mask): \n    # \n    def sample_points_poisson_disk(self, number_of_points, init_factor=5, pcl=None, use_triangle_normal=False, seed=-1): \n    # \u91c7\u6837\u70b9\u3002 \u4ece\u5e73\u9762\u5747\u5300\u91c7\u6837\u70b9\u3002\n    def sample_points_uniformly(self, number_of_points=100, use_triangle_normal=False, seed=-1): \n    # \u901a\u8fc7\u7d22\u5f15\u7b5b\u9009\n    def select_by_index(self, indices, cleanup=True): \n    # \u7f51\u683c\u62bd\u53d6\u3002 \u7528\u4e8e\u7b80\u5316\u7f51\u683c\n    def simplify_quadric_decimation(self, target_number_of_triangles, maximum_error=None, boundary_weight=1.0): \n    # \u9876\u70b9\u805a\u7c7b\u3002 \u7528\u4e8e\u7b80\u5316\u7f51\u683c\n    def simplify_vertex_clustering(self, voxel_size, contraction=None): \n    # \u5faa\u73af\u7b97\u6cd5\u3002 \u7528\u4e8e\u7ec6\u5206\u7f51\u683c\n    def subdivide_loop(self, number_of_iterations=1): \n    # \u4e2d\u70b9\u7b97\u6cd5\u3002 \u7528\u4e8e\u7ec6\u5206\u7f51\u683c\n    def subdivide_midpoint(self, number_of_iterations=1): \n<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>import open3d as o3d\nimport numpy as np\nfrom open3d.web_visualizer import draw\nfrom open3d.visualization import draw_geometries\nimport copy<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>mesh = o3d.io.read_triangle_mesh(&#39;datas\/knot.ply&#39;)<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"470\" height=\"344\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-8V1570.png\" alt=\"\" class=\"wp-image-2088\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-8V1570.png 470w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-8V1570-300x220.png 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/figure>\n\n\n\n<h2>1.\u8868\u9762\u6cd5\u5411\u91cf\u4f30\u8ba1<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>mesh.compute_vertex_normals()<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"773\" height=\"557\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-KHXU70.png\" alt=\"\" class=\"wp-image-2094\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-KHXU70.png 773w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-KHXU70-300x216.png 300w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<h2>2.\u88c1\u526a\u4e09\u89d2\u7f51<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code># \u8fd9\u91cc\u901a\u8fc7numpy\u8fdb\u884c\u88c1\u526a\u64cd\u4f5c\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u88c1\u526a\u540e\u9700\u8981\u8f6c\u6362\u6570\u636e\u683c\u5f0f\u3002\nmesh1 = copy.deepcopy(mesh)\nmesh1.triangles = o3d.utility.Vector3iVector(\n    np.asarray(mesh1.triangles)[:len(mesh1.triangles) \/\/ 2, :])\n\nmesh1.triangle_normals = o3d.utility.Vector3dVector(\n    np.asarray(mesh1.triangle_normals)[:len(mesh1.triangle_normals)\/\/2, :]\n)\ndraw(mesh1)<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"642\" height=\"541\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-CRFY70.png\" alt=\"\" class=\"wp-image-2096\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-CRFY70.png 642w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-CRFY70-300x253.png 300w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/figure>\n\n\n\n<h2>3. \u4e09\u89d2\u7f51\u4e0a\u8272<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>mesh1.paint_uniform_color([1,0,0])<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"687\" height=\"513\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-RPJY70.png\" alt=\"\" class=\"wp-image-2097\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-RPJY70.png 687w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-RPJY70-300x224.png 300w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/figure>\n\n\n\n<h2>4. \u5408\u5e76\u4e09\u89d2\u7f51\u9876\u70b9<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>print(mesh)\n-&gt;TriangleMesh with 1440 points and 2880 triangles.<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>mesh1 = mesh.merge_close_vertices(5)\nprint(mesh1)\n-&gt;TriangleMesh with 1316 points and 2880 triangles.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"724\" height=\"529\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-5IY970.png\" alt=\"\" class=\"wp-image-2099\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-5IY970.png 724w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-5IY970-300x219.png 300w\" sizes=\"(max-width: 724px) 100vw, 724px\" \/><\/figure>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>mesh1 = mesh1.remove_degenerate_triangles()\nprint(mesh1)\n-&gt;TriangleMesh with 1316 points and 2632 triangles.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"744\" height=\"545\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-NVI070.png\" alt=\"\" class=\"wp-image-2101\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-NVI070.png 744w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-NVI070-300x220.png 300w\" sizes=\"(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><\/figure>\n\n\n\n<h2>5. \u5e73\u5747\u5e73\u6ed1<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>mesh1 = mesh1.filter_smooth_simple(5)\nprint(mesh1)\n-&gt; TriangleMesh with 1316 points and 2632 triangles.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"665\" height=\"550\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-ZHFX70.png\" alt=\"\" class=\"wp-image-2103\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-ZHFX70.png 665w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-ZHFX70-300x248.png 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><\/figure>\n\n\n\n<h2>6. \u91c7\u6837<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>pcd = mesh.sample_points_uniformly(number_of_points=1000)\nprint(pcd)\n-&gt; PointCloud with 1000 points.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"538\" height=\"375\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-A22370.png\" alt=\"\" class=\"wp-image-2104\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-A22370.png 538w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-A22370-300x209.png 300w\" sizes=\"(max-width: 538px) 100vw, 538px\" \/><\/figure>\n\n\n\n<h2>7. \u7f51\u683c\u7ec6\u5206<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>print(mesh1)\n-&gt; TriangleMesh with 1316 points and 2632 triangles.\nmesh1 = mesh.subdivide_midpoint(2)\nprint(mesh1)\n-&gt; TriangleMesh with 21056 points and 42112 triangles.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"562\" height=\"420\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-D6QW70.png\" alt=\"\" class=\"wp-image-2105\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-D6QW70.png 562w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-D6QW70-300x224.png 300w\" sizes=\"(max-width: 562px) 100vw, 562px\" \/><\/figure>\n\n\n\n<h2>8. \u7f51\u683c\u7b80\u5316<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>print(mesh1)\n-&gt; TriangleMesh with 21056 points and 42112 triangles.\nmesh1 = mesh.simplify_quadric_decimation(1000)\nprint(mesh1)\n-&gt; TriangleMesh with 500 points and 1000 triangles.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"560\" height=\"435\" src=\"http:\/\/www.yatenglg.cn\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-IRAU70.png\" alt=\"\" class=\"wp-image-2107\" srcset=\"https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-IRAU70.png 560w, https:\/\/www.yatenglg.cn\/blog\/wp-content\/uploads\/2021\/08\/gnome-shell-screenshot-IRAU70-300x233.png 300w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>open3d\u63d0\u4f9b\u4e86\u4e00\u4e2a\u4e09\u89d2\u7f51\u683c\u6570\u636e\u7ed3\u6784 TriangleMesh 1.\u8868\u9762\u6cd5\u5411\u91cf\u4f30\u8ba1 2.\u88c1\u526a\u4e09\u89d2\u7f51 3. \u4e09&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[22],"tags":[],"_links":{"self":[{"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2075"}],"collection":[{"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2075"}],"version-history":[{"count":20,"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2075\/revisions"}],"predecessor-version":[{"id":2155,"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2075\/revisions\/2155"}],"wp:attachment":[{"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yatenglg.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}