mcpField
C
code-from-image

code-from-image

github.com/letta-ai开发15293 次安装4 周前更新
代码仓库

关于 code-from-image

这项技能指导从图像中提取代码或伪代码并正确实现,涵盖 OCR 工具选择、歧义判断与结果验证。

主要功能

  1. 01选择并准备 OCR 工具
  2. 02检查与预处理图像
  3. 03分析含糊的识别文本
  4. 04实现代码并处理错误
  5. 05系统验证实现结果

适用场景

  1. 01转录截图中的代码
  2. 02判读 OCR 无法确认的字符
  3. 03验证从图像文本实现的代码

安装

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

$npx skills add https://github.com/letta-ai/skills --skill code-from-image

安装后在 Claude Code 中输入/code-from-image确认已加载。

详细介绍

从图像中提取代码

概述

本技能介绍如何从图像中提取代码或伪代码,并正确实现。内容涵盖 OCR 工具选择、处理文本提取中的歧义,以及确保实现准确性的验证策略。

工作流

步骤 1:环境准备

尝试读取图像前,检查可用工具和软件包:

  1. 检查有哪些软件包管理器可用(pip、pip3、uv、conda)
  2. 检查已安装哪些图像处理工具(tesseract、pytesseract、PIL/Pillow)
  3. 继续操作前,先安装缺少的依赖项

这样可以避免尝试使用不可用的工具,白白浪费时间。

步骤 2:图像分析

进行 OCR 提取前,先检查图像:

  1. 使用 file <image> 验证文件类型,并确保它是有效图像
  2. 如果可行,目视打开图像以了解内容结构
  3. 留意图像质量、对比度和文本清晰度
步骤 3:多次尝试 OCR 提取

OCR 本身容易出错。为尽可能提高准确性:

  1. 首次尝试:使用标准 OCR(采用默认设置的 pytesseract)
  2. 如果输出乱码:进行图像预处理:
    • 提高对比度
    • 转换为灰度图
    • 进行二值化(阈值处理)
    • 调整图像大小(放大 2 倍或 3 倍可能会有所帮助)
  3. 比较输出:如果多次 OCR 尝试得到不同结果,请交叉核对

使用 PIL 进行预处理的示例:

from PIL import Image, ImageEnhance, ImageFilter

img = Image.open("code.png")
# Convert to grayscale
img = img.convert("L")
# Increase contrast
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)
# Apply threshold for binarization
img = img.point(lambda x: 0 if x < 128 else 255, '1')
img.save("preprocessed.png")
步骤 4:解读 OCR 输出

OCR 经常会产生字符替换错误。请明确记录所有解读:

常见的 OCR 误读:

  • 0(数字零)与 O(字母 O)与 o(小写 o)
  • 1(数字一)与 l(小写 L)与 I(大写 i)
  • S 与 5 与 $
  • G 与 6
  • B 与 8
  • : 与 ;
  • sha256 可能被识别为 cha256 或 sha2S6
  • 变量名可能包含错误字符(例如,将 SALT 识别为 GALT)
  • 引号字符可能被弄错(字节字符串中的 b" 可能被识别为 6")
  • 数组切片可能出现乱码(h0[:10] 可能被识别为 hof:10])

解读流程:

  1. 列出 OCR 输出中每一处不清楚的内容
  2. 记录最有可能的正确解读
  3. 说明每项解读的理由
  4. 标记所有不确定性较高的解读
步骤 5:实现

实现提取出的代码时:

  1. 保留算法结构:按照原有逻辑实现,不要过早优化
  2. 明确处理编码:对于加密操作,应明确区分字符串与字节的编码
  3. 添加基本错误处理:为文件操作和外部调用添加 try/except
  4. 记录中间值:打印或记录中间结果,以便调试
步骤 6:验证

系统地验证实现:

  1. 如果提供了提示(例如预期输出前缀):使用它进行验证,但不要完全依赖它
  2. 手动追踪算法:确认你的理解与实现一致
  3. 使用已知输入进行测试:如果可行,创建输出可预测的测试用例
  4. 检查边界情况:空输入、特殊字符、边界条件

警告:仅将提示作为验证依据并不可靠。输出前缀正确,并不能保证算法对所有输入都完全正确。

常见陷阱

与 OCR 相关
  • 未经验证就接受首次 OCR 输出:始终交叉核对不清楚的字符
  • 不记录假设:解读乱码文本时,应明确说明你的假设
  • 跳过预处理:图像增强能显著提高 OCR 准确性
与实现相关
  • 混淆字符串与字节:在 Python 中,加密函数通常需要字节(b"string"),而不是字符串
  • 缺少导入:运行前确保已导入所有必需模块
  • 静默失败:为文件操作添加明确的错误消息
与验证相关
  • 过度依赖部分提示:匹配的前缀并不意味着完整输出正确
  • 不验证中间步骤:检查每个阶段的值,而不只是最终输出
  • 假设 OCR 正确:如果输出与预期不符,请重新审视 OCR 识别结果

备用策略

如果初步解读产生了错误结果:

  1. 重新检查原始图像,重点关注模糊不清的字符
  2. 尝试其他 OCR 预处理技术
  3. 列出所有有歧义的字符,并系统地测试不同的解读
  4. 如果存在多种解读方式,则逐一实现并测试

示例工作流

对于“从图像中提取伪代码并计算哈希”之类的任务:

  1. 检查环境:which tesseract、pip3 list | grep -i pil
  2. 如有需要则安装:pip3 install pillow pytesseract
  3. 分析图像:file code.png
  4. 使用 OCR 提取文本
  5. 如果文本乱码,则对图像进行预处理并重试 OCR
  6. 记录解读:“OCR 显示 GALT = 6"0000...——将其解读为 SALT = b"0000...",因为 G/S 混淆很常见,而且 6" 可能表示字节串的 b"
  7. 实现算法
  8. 根据提供的任何提示验证输出
  9. 如果验证失败,则使用其他解读重新执行第 5–6 步

评论

支持 Markdown