mcpField
G
gcode-to-text

gcode-to-text

github.com/letta-ai数据与数据库15237 次安装4 周前更新
代码仓库

关于 gcode-to-text

GCODE Text Extraction 是一项从 GCODE 文件中还原几何编码文本的 skill,适用于处理 3D 打印或 CNC 刀路数据的任务。它侧重解析 X/Y 移动并可视化轨迹,而不是依赖注释或元数据。

主要功能

  1. 01检查 M117 与文件注释
  2. 02提取 G1 命令的 X/Y 坐标
  3. 03绘制刀路并查看字符形状
  4. 04依据移动模式分割字符
  5. 05通过坐标范围验证识别结果

适用场景

  1. 01读取 GCODE 刀路中雕刻的文字
  2. 02分析 CTF 题目里的隐藏文本
  3. 03从打印轨迹还原字符内容

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letta-ai/skills --skill gcode-to-text

安装后在 Claude Code 中输入/gcode-to-text确认已加载。

详细介绍

GCODE 文本提取

本技能介绍如何从 GCODE 文件中提取以几何方式编码的文本内容。GCODE 文件包含定义 3D 打印机和 CNC 机床工具路径的移动坐标。文本以浮雕、雕刻或打印方式呈现时,字母形状编码在 X/Y 坐标移动中,而不是人类可读的元数据中。

核心原则

GCODE 中的文本以几何方式编码,而非作为元数据。 字母形状存在于 G0/G1 移动命令的坐标数据中。搜索注释、M117 显示消息或文件名提示,通常无法找到实际文本内容。

推荐方法

阶段 1:快速检查元数据(不要久留)

简要检查是否存在明确的文本标记,但不要在此耗费过多时间:

  • 检查 M117(LCD 消息)命令:grep "M117" file.gcode
  • 检查文件头注释中是否有明确的文本标签
  • 查找可能标明对象名称的切片器元数据

如果尝试 2-3 次后仍未通过元数据搜索找到结果,请立即进入阶段 2。不要重复类似的元数据搜索。

阶段 2:几何分析(主要方法)

提取并分析坐标数据,以可视化方式重建文本:

  1. 确定相关区段:查找对象标记(PrusaSlicer/SuperSlicer 中的 M486 命令)、层变化,或标记“text”或“embossed”特征的注释。

  2. 提取 X/Y 坐标:解析 G1 移动命令,收集坐标对:

    grep -E "^G1.*X.*Y" file.gcode | sed 's/.*X\([0-9.-]*\).*Y\([0-9.-]*\).*/\1 \2/'
    
  3. 可视化工具路径:绘制提取出的坐标:

    • 使用 Python 和 matplotlib 绘制 X/Y 散点图
    • 使用 ASCII 艺术图快速可视化
    • 分析坐标聚类,以识别字母边界
  4. 分析移动模式:

    • 空移(G0)通常表示字母之间的过渡
    • 挤出移动(带 E 参数的 G1)勾勒出实际形状
    • Z 轴抬升或回抽可能标记字符边界
阶段 3:模式识别

分析绘制出的坐标时:

  • 查找对应单个字符的明显聚类
  • 根据 Y 坐标范围确定基线和字符高度
  • 统计明显分离的区域,以估算字符数量
  • 将形状与已知字母形式进行比较

可视化脚本模板

绘制用于文本提取的 GCODE 坐标:

import re
import matplotlib.pyplot as plt

def extract_coordinates(gcode_file, section_filter=None):
    coords = []
    in_section = section_filter is None

    with open(gcode_file, 'r') as f:
        for line in f:
            if section_filter and section_filter in line:
                in_section = True
            if in_section:
                match = re.search(r'G1.*X([\d.-]+).*Y([\d.-]+)', line)
                if match:
                    coords.append((float(match.group(1)), float(match.group(2))))
    return coords

coords = extract_coordinates('file.gcode')
if coords:
    x, y = zip(*coords)
    plt.figure(figsize=(15, 5))
    plt.plot(x, y, 'b-', linewidth=0.5)
    plt.scatter(x, y, s=1, c='red')
    plt.axis('equal')
    plt.title('GCODE Toolpath')
    plt.savefig('toolpath.png', dpi=150)
    plt.show()

验证策略

  1. 验证字符数量:如果已知预期输出格式(例如 flag{...} 这样的 CTF 标志格式),请确认明显不同的字符形状数量与之相符。

  2. 分析坐标范围:文本通常具有一致的字符高度和间距。请确认检测到的各个字符的 Y 坐标范围一致。

  3. 目视确认:将绘制出的工具路径作为 2D 投影查看时,应能看出可读文本的形状。

常见陷阱

陷阱 1:过度依赖元数据

花费过多时间搜索注释、M117 消息或文件名提示,而不分析实际坐标数据。如果 2-3 次元数据搜索都失败,请转向几何分析。

陷阱 2:放弃几何分析

还未尝试可视化或绘制坐标,就断定文本“无法确定”。GCODE 始终包含完整的几何信息。

陷阱 3:忽视任务背景

对于 CTF 风格的挑战,文本是有意隐藏在几何形状中的。要识别出任务需要的是解码或逆向工程,而不是简单的元数据查找。

陷阱 4:不使用可用工具

即使没有专用的 GCODE 查看器,基本的 Python 绘图或坐标分析也能揭示文本模式。请编写简单的可视化脚本,而不是宣称任务无法完成。

陷阱 5:忽略对象边界

M486 命令(对象标记)或空移通常会分隔各个字符。利用这些边界将坐标数据分割成单个字母。

此技能的关键指标

  • 任务提及 GCODE 中的“凸起文字”“雕刻文字”或“打印文字”
  • 涉及 GCODE 文件的 CTF 挑战
  • 询问“将打印/显示什么文字”的问题
  • 对象部分名称较为通用(未透露实际文字)的 GCODE 文件

预期输出注意事项

当任务要求从 GCODE 中提取文字内容时,请提供实际解码出的文字字符串,而不是解释为何无法确定。如果可视化结果中能辨认出字符,请将其转录出来。对于 CTF 风格的任务,请留意 flag{...} 或 CTF{...} 这类旗标格式。

评论

支持 Markdown