关于 code-from-image
这项技能指导从图像中提取代码或伪代码并正确实现,涵盖 OCR 工具选择、歧义判断与结果验证。
主要功能
- 01选择并准备 OCR 工具
- 02检查与预处理图像
- 03分析含糊的识别文本
- 04实现代码并处理错误
- 05系统验证实现结果
适用场景
- 01转录截图中的代码
- 02判读 OCR 无法确认的字符
- 03验证从图像文本实现的代码
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ letta-ai/ skills --skill code-from-image安装后在 Claude Code 中输入/code-from-image确认已加载。
详细介绍
从图像中提取代码
概述
本技能介绍如何从图像中提取代码或伪代码,并正确实现。内容涵盖 OCR 工具选择、处理文本提取中的歧义,以及确保实现准确性的验证策略。
工作流
步骤 1:环境准备
尝试读取图像前,检查可用工具和软件包:
- 检查有哪些软件包管理器可用(
pip、pip3、uv、conda) - 检查已安装哪些图像处理工具(
tesseract、pytesseract、PIL/Pillow) - 继续操作前,先安装缺少的依赖项
这样可以避免尝试使用不可用的工具,白白浪费时间。
步骤 2:图像分析
进行 OCR 提取前,先检查图像:
- 使用
file <image>验证文件类型,并确保它是有效图像 - 如果可行,目视打开图像以了解内容结构
- 留意图像质量、对比度和文本清晰度
步骤 3:多次尝试 OCR 提取
OCR 本身容易出错。为尽可能提高准确性:
- 首次尝试:使用标准 OCR(采用默认设置的 pytesseract)
- 如果输出乱码:进行图像预处理:
- 提高对比度
- 转换为灰度图
- 进行二值化(阈值处理)
- 调整图像大小(放大 2 倍或 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与6B与8:与;sha256可能被识别为cha256或sha2S6- 变量名可能包含错误字符(例如,将
SALT识别为GALT) - 引号字符可能被弄错(字节字符串中的
b"可能被识别为6") - 数组切片可能出现乱码(
h0[:10]可能被识别为hof:10])
解读流程:
- 列出 OCR 输出中每一处不清楚的内容
- 记录最有可能的正确解读
- 说明每项解读的理由
- 标记所有不确定性较高的解读
步骤 5:实现
实现提取出的代码时:
- 保留算法结构:按照原有逻辑实现,不要过早优化
- 明确处理编码:对于加密操作,应明确区分字符串与字节的编码
- 添加基本错误处理:为文件操作和外部调用添加 try/except
- 记录中间值:打印或记录中间结果,以便调试
步骤 6:验证
系统地验证实现:
- 如果提供了提示(例如预期输出前缀):使用它进行验证,但不要完全依赖它
- 手动追踪算法:确认你的理解与实现一致
- 使用已知输入进行测试:如果可行,创建输出可预测的测试用例
- 检查边界情况:空输入、特殊字符、边界条件
警告:仅将提示作为验证依据并不可靠。输出前缀正确,并不能保证算法对所有输入都完全正确。
常见陷阱
与 OCR 相关
- 未经验证就接受首次 OCR 输出:始终交叉核对不清楚的字符
- 不记录假设:解读乱码文本时,应明确说明你的假设
- 跳过预处理:图像增强能显著提高 OCR 准确性
与实现相关
- 混淆字符串与字节:在 Python 中,加密函数通常需要字节(
b"string"),而不是字符串 - 缺少导入:运行前确保已导入所有必需模块
- 静默失败:为文件操作添加明确的错误消息
与验证相关
- 过度依赖部分提示:匹配的前缀并不意味着完整输出正确
- 不验证中间步骤:检查每个阶段的值,而不只是最终输出
- 假设 OCR 正确:如果输出与预期不符,请重新审视 OCR 识别结果
备用策略
如果初步解读产生了错误结果:
- 重新检查原始图像,重点关注模糊不清的字符
- 尝试其他 OCR 预处理技术
- 列出所有有歧义的字符,并系统地测试不同的解读
- 如果存在多种解读方式,则逐一实现并测试
示例工作流
对于“从图像中提取伪代码并计算哈希”之类的任务:
- 检查环境:
which tesseract、pip3 list | grep -i pil - 如有需要则安装:
pip3 install pillow pytesseract - 分析图像:
file code.png - 使用 OCR 提取文本
- 如果文本乱码,则对图像进行预处理并重试 OCR
- 记录解读:“OCR 显示
GALT = 6"0000...——将其解读为SALT = b"0000...",因为 G/S 混淆很常见,而且 6" 可能表示字节串的 b" - 实现算法
- 根据提供的任何提示验证输出
- 如果验证失败,则使用其他解读重新执行第 5–6 步
评论
支持 Markdown