{"skill":{"slug":"image-to-code","displayName":"Image To Code","summary":"将图片（含文字、公式、标题）转换为指定代码格式。自动识别标题级别（title1/title2/title3），文字行转为 $word->body(\"正文=\".$F);，公式转为 $word->formula(\"\");，图片标记为 ![image]","description":"---\nname: \"image-to-code\"\ndescription: \"将图片（含文字、公式、标题）转换为指定代码格式。自动识别标题级别（title1/title2/title3），文字行转为 $word->body(\\\"正文=\\\".$F);，公式转为 $word->formula(\\\"\\\");，图片标记为 ![image]\"\n---\n\n# 图片转代码格式转换器\n\n## 功能概述\n\n将包含文字、公式、图片的文档截图转换为指定的代码格式，支持 OCR 文字识别、公式识别和格式转换。\n\n---\n\n## 输出格式规范\n\n| 内容类型 | 格式模板 | 示例输入 | 示例输出 |\n|----------|----------|----------|----------|\n| **一级标题** | `$word->title1(\"标题文字\");` | `第一章 项目概述` | `$word->title1(\"项目概述\");` |\n| **二级标题** | `$word->title2(\"标题文字\");` | `1.1 项目背景`<br>`(1) 提高效率` | `$word->title2(\"项目背景\");`<br>`$word->title2(\"提高效率\");` |\n| **三级标题** | `$word->title3(\"标题文字\");` | `1.1.1 技术路线` | `$word->title3(\"技术路线\");` |\n| **文字行** | `$word->body(\"正文=内容=\".$F);` | `这是正文` | `$word->body(\"正文=这是正文=\".$F);` |\n| **公式** | `$word->formula(\"LaTeX 公式\");` | `E = mc²` | `$word->formula(\"E = mc^2\");` |\n| **图片** | `![image]` | [图表] | `![image]` |\n| **空行** | 保持空行 | (空) | (空行) |\n\n### 标题提取规则\n\n| 级别 | 识别模式 | 提取规则 | 示例 |\n|------|----------|----------|------|\n| **一级标题** | `第 X 章 `、` 第 X 部分`、` 一、` | 去掉编号前缀 | `第一章 总述` → `总述` |\n| **二级标题** | `第 X 节`、`1.1`、`(1)`、`（一）` | 去掉编号前缀 | `1.1 背景` → `背景`<br>`(1) 提高` → `提高` |\n| **三级标题** | `1.1.1`、`1、` | 去掉编号前缀 | `1.1.1 架构` → `架构` |\n\n---\n\n## 执行流程\n\n### 阶段一：图片预处理\n\n1. **图像增强**\n   - 灰度化处理\n   - 二值化（文字区域）\n   - 去噪点\n\n2. **区域分割**\n   - 文字区域检测\n   - 公式区域检测\n   - 图片区域检测\n\n3. **顺序识别**\n   - 从上到下扫描\n   - 从左到右排序\n   - 保持原始顺序\n\n---\n\n### 阶段二：内容识别\n\n#### 2.1 文字识别 (OCR)\n**工具**: PaddleOCR / Tesseract / 视觉 AI\n\n**处理逻辑**:\n```python\ndef process_text_line(text):\n    # 清理 OCR 结果\n    text = text.strip()\n    # 转义特殊字符\n    text = text.replace('\"', '\\\\\"')\n    # 生成代码\n    return f'$word->body(\"正文={text}=\".$F);'\n```\n\n#### 2.2 公式识别\n**工具**: Pix2Tex / MathOCR / 视觉 AI\n\n**识别流程**:\n1. 检测公式区域（特殊字体、符号）\n2. 转换为 LaTeX 格式\n3. 生成 formula 代码\n\n**判断规则**:\n- 包含数学符号：∑∫∂∇√∞≈≠≤≥±×÷\n- 包含变量：x, y, z, α, β, γ, θ\n- 包含上标/下标格式\n- 独立成行的数学表达式\n\n#### 2.3 图片识别\n**判断规则**:\n- 图表区域（坐标轴、图例）\n- 流程图/框图\n- 非文字非公式的图像内容\n\n---\n\n### 阶段三：格式转换\n\n#### 3.1 文字行处理\n```\n输入：这是一段测试文字\n输出：$word->body(\"正文=这是一段测试文字=\".$F);\n```\n\n#### 3.2 公式处理\n```\n输入：E = mc²\n输出：$word->formula(\"E = mc^2\");\n\n输入：∑(i=1 to n) xi\n输出：$word->formula(\"\\sum_{i=1}^{n} x_i\");\n```\n\n#### 3.3 图片处理\n```\n输入：[图表图像]\n输出：![image]\n```\n\n---\n\n## 技术实现\n\n### 依赖库\n```python\n# OCR\npaddlepaddle\npaddleocr\n\n# 公式识别\npix2tex\nlatex2sympy\n\n# 图像处理\nopencv-python\nPillow\nnumpy\n\n# 可选：视觉 AI\nopenai  # GPT-4V\nanthropic  # Claude Vision\n```\n\n### 核心代码结构\n\n```python\n#!/usr/bin/env python3\n\"\"\"\n图片转代码格式转换器\n将图片中的文字、公式、图表转换为指定代码格式\n\"\"\"\n\nimport cv2\nimport numpy as np\nfrom pathlib import Path\nfrom paddleocr import PaddleOCR\nfrom typing import List, Tuple, Dict\n\n\nclass ImageToCodeConverter:\n    def __init__(self, ocr_lang='ch'):\n        \"\"\"初始化 OCR 引擎\"\"\"\n        self.ocr = PaddleOCR(use_angle_cls=True, lang=ocr_lang)\n        \n    def detect_content_type(self, image_region: np.ndarray) -> str:\n        \"\"\"\n        检测内容类型\n        返回：'text' | 'formula' | 'image'\n        \"\"\"\n        # 分析区域特征\n        # 公式：特殊符号密度高、字体变化大\n        # 图片：颜色丰富、边缘复杂\n        # 文字：规则排列、对比度高\n        pass\n    \n    def ocr_text(self, image: np.ndarray) -> List[Dict]:\n        \"\"\"执行 OCR 识别\"\"\"\n        result = self.ocr.ocr(image, cls=True)\n        return result\n    \n    def formula_to_latex(self, formula_image: np.ndarray) -> str:\n        \"\"\"公式图像转 LaTeX\"\"\"\n        # 使用 pix2tex 或视觉 AI\n        pass\n    \n    def convert_line(self, line_text: str, content_type: str) -> str:\n        \"\"\"\n        转换单行内容为代码格式\n        \"\"\"\n        if content_type == 'text':\n            # 转义双引号\n            escaped = line_text.replace('\"', '\\\\\"')\n            return f'$word->body(\"正文={escaped}=\".$F);'\n        \n        elif content_type == 'formula':\n            latex = self.formula_to_latex(formula_image)\n            return f'$word->formula(\"{latex}\");'\n        \n        elif content_type == 'image':\n            return '![image]'\n        \n        return ''\n    \n    def process_image(self, image_path: str, output_path: str = None):\n        \"\"\"\n        处理整张图片\n        \"\"\"\n        # 读取图片\n        image = cv2.imread(image_path)\n        \n        # OCR 识别\n        ocr_result = self.ocr.ocr(image, cls=True)\n        \n        # 按行处理\n        output_lines = []\n        for line in ocr_result:\n            if line:\n                for text_box in line:\n                    bbox = text_box[0]\n                    text = text_box[1][0]\n                    confidence = text_box[1][1]\n                    \n                    # 提取区域图像\n                    x_coords = [p[0] for p in bbox]\n                    y_coords = [p[1] for p in bbox]\n                    x_min, x_max = min(x_coords), max(x_coords)\n                    y_min, y_max = min(y_coords), max(y_coords)\n                    \n                    region = image[y_min:y_max, x_min:x_max]\n                    \n                    # 检测内容类型\n                    content_type = self.detect_content_type(region)\n                    \n                    # 转换为代码格式\n                    code_line = self.convert_line(text, content_type, region)\n                    output_lines.append(code_line)\n        \n        # 输出结果\n        output = '\\n'.join(output_lines)\n        \n        if output_path:\n            with open(output_path, 'w', encoding='utf-8') as f:\n                f.write(output)\n        \n        return output\n\n\ndef main():\n    import sys\n    \n    if len(sys.argv) < 2:\n        print(\"用法：python image_to_code.py <图片路径> [输出路径]\")\n        sys.exit(1)\n    \n    image_path = sys.argv[1]\n    output_path = sys.argv[2] if len(sys.argv) > 2 else None\n    \n    converter = ImageToCodeConverter()\n    result = converter.process_image(image_path, output_path)\n    \n    if not output_path:\n        print(result)\n\n\nif __name__ == '__main__':\n    main()\n```\n\n---\n\n## 使用示例\n\n### 示例 1：含标题的文档\n\n**输入图片内容**:\n```\n第一章 项目概述\n1.1 项目背景\n本项目旨在开发一个智能系统\n用于自动化文档处理\n(1) 减少人工操作\n(2) 提高准确性\n```\n\n**输出代码**:\n```php\n$word->title1(\"项目概述\");\n$word->title2(\"项目背景\");\n$word->body(\"正文=本项目旨在开发一个智能系统=\".$F);\n$word->body(\"正文=用于自动化文档处理=\".$F);\n$word->title2(\"减少人工操作\");\n$word->title2(\"提高准确性\");\n```\n\n---\n\n### 示例 2：含公式和标题\n\n**输入图片内容**:\n```\n第三章 物理公式\n3.1 牛顿第二定律\nF = ma\n力的单位：牛顿 (N)\n\n3.2 万有引力\nF = G(m₁m₂)/r²\n```\n\n**输出代码**:\n```php\n$word->title1(\"第三章 物理公式\");\n$word->title2(\"3.1 牛顿第二定律\");\n$word->formula(\"F = ma\");\n$word->body(\"正文=力的单位：牛顿 (N)=\".$F);\n$word->title2(\"3.2 万有引力\");\n$word->formula(\"F = G\\frac{m_1 m_2}{r^2}\");\n```\n\n---\n\n### 示例 3：含图表的图片\n**输入图片内容**:\n```\n销售数据对比\n[柱状图]\n结论：Q4 增长明显\n```\n\n**输出代码**:\n```php\n$word->body(\"正文=销售数据对比=\".$F);\n![image]\n$word->body(\"正文=结论：Q4 增长明显=\".$F);\n```\n\n---\n\n## 命令行接口\n\n```bash\n# 基本用法\npython image_to_code.py input.png\n\n# 指定输出文件\npython image_to_code.py input.png output.txt\n\n# 批量处理\npython image_to_code.py *.png --output-dir ./output\n\n# 使用视觉 AI（更准确的公式识别）\npython image_to_code.py input.png --use-vision-ai\n```\n\n---\n\n## 配置选项\n\n```json\n{\n  \"ocr_engine\": \"paddleocr\",\n  \"ocr_lang\": \"ch\",\n  \"formula_detection\": \"auto\",\n  \"formula_engine\": \"pix2tex\",\n  \"vision_ai\": {\n    \"enabled\": false,\n    \"provider\": \"openai\",\n    \"model\": \"gpt-4-vision-preview\"\n  },\n  \"output\": {\n    \"encoding\": \"utf-8\",\n    \"line_ending\": \"\\n\"\n  }\n}\n```\n\n---\n\n## 质量标准\n\n- [ ] 文字识别准确率 > 95%\n- [ ] 公式识别准确率 > 85%\n- [ ] 内容类型判断准确率 > 90%\n- [ ] 输出格式完全符合规范\n- [ ] 支持中文、英文、数字混合\n- [ ] 支持批量处理\n- [ ] 保持原始顺序和结构\n\n---\n\n## 注意事项\n\n1. **图片质量**: 建议使用清晰截图（300dpi 以上）\n2. **公式复杂度**: 复杂公式可能需要人工校对\n3. **特殊符号**: 部分罕见符号可能识别不准确\n4. **手写体**: 暂不支持手写文字识别\n5. **多栏排版**: 需要额外处理阅读顺序\n\n---\n\n## 扩展功能（可选）\n\n### 1. 视觉 AI 增强\n使用 GPT-4V/Claude Vision 提高公式识别准确率\n\n### 2. 上下文校正\n根据前后文自动校正 OCR 错误\n\n### 3. 格式保持\n- 标题层级（H1/H2/H3）\n- 列表格式（有序/无序）\n- 表格转换\n\n### 4. 批量处理\n支持文件夹批量转换\n\n---\n\n## 测试用例\n\n| 测试类型 | 输入 | 预期输出 |\n|----------|------|----------|\n| 纯中文 | \"你好世界\" | `$word->body(\"正文=你好世界=\".$F);` |\n| 中英文混合 | \"Hello 世界\" | `$word->body(\"正文=Hello 世界=\".$F);` |\n| 简单公式 | \"a + b = c\" | `$word->formula(\"a + b = c\");` |\n| 复杂公式 | \"∫₀^∞ e^(-x²)dx\" | `$word->formula(\"\\int_{0}^{\\infty} e^{-x^2}dx\");` |\n| 图片 | [图表] | `![image]` |\n| 空行 | (空) | (空行) |\n\n---\n\n## 版本历史\n\n- **v1.0.0**: 基础功能（OCR+ 格式转换）\n- **v1.1.0**: 公式识别（pix2tex）\n- **v1.2.0**: 视觉 AI 支持\n- **v1.3.0**: 批量处理\n\n---\n\n*图片转代码，让文档处理更高效* 🐘\n","tags":{"latest":"2.0.0"},"stats":{"comments":0,"downloads":673,"installsAllTime":3,"installsCurrent":2,"stars":0,"versions":1},"createdAt":1773614501550,"updatedAt":1779078298515},"latestVersion":{"version":"2.0.0","createdAt":1773614501550,"changelog":"Manual publish - scheme 1","license":"MIT-0"},"metadata":null,"owner":{"handle":"nidhov01","userId":"s171xfx50a1qtzwd3qx6shehen8841p1","displayName":"nidhov01","image":"https://avatars.githubusercontent.com/u/235751867?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089907726}}