码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 和AI一起搞事情#6. 如何实现AI生图文字可编辑?


    和AI一起搞事情#6. 如何实现AI生图文字可编辑? 本章我们尝试复现“图像文字元素编辑”功能,代码已经上传到Github。AI 生图配合文字元素编辑,确实能解决很多场景上AI生图无法直接落得的业务问题,感兴趣的朋友可以clone直接使用。
    合集 - DecryptPrompt(78)
    1.解密Prompt系列8. 无需训练让LLM支持超长输入:知识库 & unlimiformer & PCW & NBCE2023-06-132.解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~2023-04-293.解密Prompt7. 偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析2023-05-234.解密prompt系列5. APE+SELF=自动化指令集构建代码实现2023-04-105.解密Prompt系列4. 升级Instruction Tuning:Flan/T0/InstructGPT/TKInstruct2023-03-266.解密Prompt系列3. 冻结LM微调Prompt: Prefix-Tuning & Prompt-Tuning & P-Tuning2023-03-107.解密Prompt系列2. 冻结Prompt微调LM: T5 & PET & LM-BFF2023-02-248.解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt2023-02-109.解密Prompt系列9. 模型复杂推理-思维链COT基础和进阶玩法2023-06-1610.解密Prompt系列14. LLM Agent之搜索应用设计:WebGPT & WebGLM & WebCPM2023-09-0111.解密Prompt系列10. 思维链COT原理探究2023-07-0112.解密Prompt系列11. 小模型也能COT-先天不足后天来补2023-07-1513.解密Prompt系列12. LLM Agent零微调范式 ReAct & Self Ask2023-07-2814.解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla2023-08-1715.解密Prompt系列15. LLM Agent之数据库应用设计:DIN & C3 & SQL-Palm & BIRD2023-09-1616.解密Prompt系列16. LLM对齐经验之数据越少越好?LTD & LIMA & AlpaGasus2023-10-0517.解密Prompt系列17. LLM对齐方案再升级 WizardLM & BackTranslation & SELF-ALIGN2023-10-1418.解密Prompt系列18. LLM Agent之只有智能体的世界2023-10-2819.解密Prompt系列19. LLM Agent之数据分析领域的应用:Data-Copilot & InsightPilot2023-11-1920.解密Prompt系列20. LLM Agent之再谈RAG的召回多样性优化2023-12-0321.解密Prompt系列21. LLM Agent之再谈RAG的召回信息密度和质量2023-12-1822.解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?2024-01-0123.解密Prompt系列23.大模型幻觉分类&归因&检测&缓解方案脑图全梳理2024-01-1524.解密prompt系列24. RLHF新方案之训练策略:SLiC-HF & DPO & RRHF & RSO2024-02-2225.解密prompt系列26. 人类思考vs模型思考:抽象和发散思维2024-03-1026.解密prompt系列25. RLHF改良方案之样本标注:RLAIF & SALMON2024-03-2527.解密prompt系列27. LLM对齐经验之如何降低通用能力损失2024-04-1328.解密Prompt系列28. LLM Agent之金融领域摸索:FinMem & FinAgent2024-05-0629.解密Prompt系列29. LLM Agent之真实世界海量API解决方案:ToolLLM & AnyTool2024-05-2330.解密Prompt系列30. LLM Agent之互联网冲浪智能体2024-05-2631.解密Prompt系列31. LLM Agent之从经验中不断学习的智能体2024-06-1132.解密Prompt系列32. LLM之表格理解任务-文本模态2024-06-2433.解密Prompt系列33. LLM之图表理解任务-多模态篇2024-07-0634.解密prompt系列34. RLHF之训练另辟蹊径:循序渐进 & 青出于蓝2024-07-2335.解密prompt系列35. 标准化Prompt进行时! DSPy论文串烧和代码示例2024-08-0536.解密Prompt系列36. Prompt结构化编写和最优化算法UNIPROMPT2024-08-1937.解密Prompt系列37. RAG之前置决策何时联网的多种策略2024-09-0338.解密Prompt系列38.多Agent路由策略2024-09-1839.解密prompt系列39. RAG之借助LLM优化精排环节2024-09-3040.解密prompt系列40. LLM推理scaling Law2024-10-1141.解密prompt系列41. GraphRAG真的是Silver Bullet?2024-10-2742.解密prompt系列42. LLM通往动态复杂思维链之路2024-11-1543.解密prompt系列43. LLM Self Critics2024-11-2544.解密prompt系列44. RAG探索模式?深度思考模式?2024-12-1445.解密Prompt45. 再探LLM Scalable Oversight -辩论、博弈哪家强2024-12-3046.解密prompt系列46. LLM结构化输出代码示例和原理分析2025-01-0447.解密prompt系列47. O1 Long Thought的一些特征分析2025-01-2248.解密prompt系列48. DeepSeek R1 & Kimi 1.5长思维链 - RL Scaling2025-02-1449.解密prompt系列49. 回顾R1之前的思维链发展路线2025-02-2450.解密prompt系列50. RL用于优化Agent行为路径的一些思路2025-03-1051.解密prompt系列51. R1实验的一些细节讨论2025-03-2552.解密prompt系列52. 闲聊大模型还有什么值得探索的领域2025-04-0953.解密prompt系列53. 再谈大模型Memory2025-04-2354.解密prompt系列54.Context Cache代码示例和原理分析2025-05-2755.解密prompt系列55.Agent Memory的工程实现 - Mem0 & LlamaIndex2025-06-1056.解密prompt系列56.Agent context Engineering - 单智能体代码剖析2025-07-1057.解密prompt系列57. Agent Context Engineering - 多智能体代码剖析2025-07-2258.解密prompt系列58. MCP - 工具演变 & MCP基础2025-08-0659.解密prompt系列59. MCP实战:从Low-Level到FastMCP的搭建演进2025-08-1860.解密prompt系列60. Agent实战:从0搭建Jupter数据分析智能体2025-09-0861.解密prompt系列61. 手搓代码沙箱与FastAPI-MCP实战2025-10-0962.解密prompt系列62. Agent Memory一览 - MATTS & CFGM & MIRIX2025-10-2063.解密prompt系列63. Agent训练方案:RStar2 & Early Experience etc2025-11-0464.解密Prompt系列64. Anthropic Skils的延伸思考2025-11-1765.解密Prompt系列65. 三巨头关于大模型内景的硬核论文2025-12-0166.解密Prompt系列66. 视觉Token爆炸→DeepSeek-OCR光学压缩2025-12-1567.解密Prompt系列67. 智能体的经济学:从架构选型到工具预算2025-12-3168.解密Prompt系列68. 告别逐词蹦字 - 重塑 Transformer 的推理范式01-1569.解密Prompt系列69. 从上下文管理到Runtime操作系统02-1370.和AI一起搞事情#1: opencode ×browser-use实战复盘03-1071.和AI一起搞事情#2:边剥龙虾&边做个中医技能来起号03-2672.和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录04-1473.和AI一起搞事情#4. 小白用claude code做游戏究竟能踩多少坑04-2974.和AI一起搞事情#5:技能进阶与Claude Design初体验05-13
    75.和AI一起搞事情#6. 如何实现AI生图文字可编辑?05-27
    76.和AI一起搞事情#7. 给游戏NPC接入Hermes?06-1577.解密Prompt系列70. 从 MLA 到 CSA,聊聊大模型 Attention 的“瘦身”与“闪送”07-0278.解密Prompt系列71. 从DSpark聊聊大模型 Decoding 提速的技术演化07-30
    收起

    最近刷到 Lxxxxt 新功能的时候,我是震惊的。它可以:

    ✅ 一键拆分图片图层

    ✅ 一键拆分文字元素

    ✅ 文字可直接编辑内容、字体、颜色、对齐方式

    第一眼看上去我的反应是:

    "哇塞!太厉害了!怎么做到的!"

    第二眼看上去我的反应是:

    "作为一个零付费用户,好用的功能我都要自己拥有!"

    哎哟,然后就让我看到拆分图层后的文字,其实和原始图片中的文字字体和颜色并不一致……

    哈哈哈,再加上被同事写PPT的思路(让AI生图画色块,再在上面叠加文本框)点亮了灵感,我就想出了下面的方案。

    当然,完全不保证Lxxxxt就是这么做的,只能说效果上有些类似。

    复现的代码已经上传到Github:poster-text-editor。

    模型部分文字识别和图像编辑使用的模型只能大家去代码里看了,审核不让说,都是用的老张NLP中转站(好处就是可以各取所长,三大巨头每家模型都各有所长)。

    但是项目需要大家自己提供Key才能使用——哈哈毕竟我只充值了30块(老张广告费请结算一下)~

    先来看看效果对比

    Lxxxxt 效果

    Step 1: 用Gxxxxx2生成一个有很多文字的图片
    Step 2: 使用Lxxxxxt编辑元素,就会得到下面拥有图层拆分的文件
    图片
    Step 3: 文字部分支持内容、字体、颜色、对齐方式的调整
    图片

    复现效果

    有了思路做就很快了,和CC一起整了1个多小时,就有了下面的效果。

    一个简易的网站,提供:

    • 图片上传
    • 识别文字
    • 抹除文字
    • 文字编辑

    截图_选择区域_20260524150032

    下面是效果
    图片

    实现思路拆解

    Lxxxxxt 很可能并不是在“真的拆图层”。它可能是在:
    ✅ 识别文字
    ✅ 把原文字抹掉
    ✅ 在前端叠加新的文字层
    ——一种“假图层编辑”。

    1. Bounding Box识别(找到文字在哪)

    这个任务的核心其实是大家很熟悉的目标检测任务。

    关键看当前的多模态模型能否对文字位置进行精准识别。

    需要注意的点:

    这里需要剔除一些图片化文字。

    本质上,所有无法直接用"字体 + 字号 + 颜色"直接还原的文字,是不应该出现在文字编辑任务中的。

    模型选型:

    测试了下,至少Gxxxxx3.0以上的模型进行Bounding Box目标检测输出,准确率还是很高的。

    不排除指令的影响因素,但在我测试的范围内,Gxxxx5+的效果并不如Gxxxx3。

    下面是多模型的效果对比:

    图片

    截图_选择区域_20260524165231

    技术细节补充:Bounding Box坐标输出的两种格式

    这里在页面上增加了"缩放按钮",因为Bounding Box的坐标输出有两种形式:

    格式 说明 需要处理
    相对位置 标准化到0-1000的相对位置 需要根据图片像素进行缩放
    绝对位置 直接输出和图片大小一致的绝对位置 无需额外处理

    不同模型,甚至不同版本的模型处理方式都不完全一致,所以需要做好兼容。

    2. 补充文字Meta属性(让文字有样子)

    为文字补充字体+颜色+字号等相关信息。

    需要承认的是,多模态模型在这些任务中有一定的局限性,准确率并不算高。

    属性 模型推理准确率 我的方案
    颜色 一般 更好的方案是使用取色器
    字体 较低 需要人工调整
    字号 很不准 直接根据Bounding Box的尺寸和文字数量计算得到,不让模型推理

    相关论文推荐:
    最近有篇论文对多模态模型在设计领域的很多相关任务都做了评测,可以先去看看,了解下当前多模态模型在设计领域的边界:不过也不用太着急——毕竟每过几个月边界就会大幅向前推动。

    Graphic-Design-Bench: A Comprehensive Benchmark for Evaluating AI on Graphic Design Tasks

    图片

    3. 抹除原图文字(把底子擦干净)

    使用 Gxxxxxxx2 对原始图片中对应文字进行抹除。

    为了和前面LLM识别的文字框保持一致,这里需要传入Bounding Box识别到的文字信息。

    如果想做得更加精细:可以把文字内容和位置信息都传入(避免图片中不同位置存在相同内容时的误抹除)。

    4. 画布中叠加图片和文本框(合体!)

    把抹除图片的文字,和bounding box识别出的文本框叠加在一起,看起来就有点像是Lxxxxxt文字元素识别的效果啦

    当前Demo的局限性

    这里只是一个初步的Demo,还有一些需要额外处理的细节:

    • 超大图片处理:对于超过生图模型尺寸的图片,需要进行合理的chunking再处理
    • 字体匹配优化:目前字体识别还是靠人工调整,后续可以接入字体相似度匹配模型
    • 颜色精准提取:可以用取色器替代模型推理

    其他思路:跳出"图像编辑"的思维定式

    最近发现一个很有意思的点:

    不仅模型有思维惯性,人也有思维惯性。

    之前设计的工作模式,是"先出设计稿,然后通过PS进行修改"。

    于是在针对"如何修改图片上文字"这个任务时,我们第一时间想到的也是 "图片编辑"任务。

    但是,这一定是个图片编辑任务吗?

    哈哈,当然不一定是。

    之所以要做图片编辑,无外乎两点:

    • 一致性:只修改需要修改的地方,并保持其他位置不变
    • 修改成本低:无需对其他内容进行重新绘制或生成

    所以针对以上两点,我们可以分别想另外两种歪着

    思路1:结构化绘图指令(在文本阶段完成文本修改)

    最近测试发现,Gxxxxxx2对于结构化的绘图指令,有很好的实现效果。

    举个之前看到很火的城市结构图的例子:

    图片

    绘图指令如下

    {
      "type": "complex urban systems atlas infographic",
      "style": "{argument name=\"color palette\" default=\"dark background with glowing blue, gold, and purple accents\"}, highly detailed technical illustration, 3D isometric cutaway",
      "header": {
        "title": "{argument name=\"chinese city name\" default=\"上海\"}城市系统剖面 {argument name=\"english city name\" default=\"SHANGHAI\"} URBAN SYSTEMS ATLAS",
        "subtitles": [
          "地表之上,是城市;地表之下,是秩序 {argument name=\"english subtitle\" default=\"Beneath the skyline lies the machine.\"}",
          "一座城市如何运转 How a Megacity Actually Works"
        ]
      },
      "layout": {
        "top_left": "Compass rose and city map labeled '上海市域位置 SHANGHAI LOCATION'",
        "top_right": "Data table titled '城市数据 CITY DATA' with 7 rows of statistics",
        "centerpiece": {
          "description": "{argument name=\"centerpiece style\" default=\"highly detailed 3D isometric cutaway render\"} of a megacity river landscape",
          "layers": [
            "地面层 SURFACE",
            "排水层 DRAINAGE LAYER",
            "电力层 POWER LAYER",
            "通信层 COMMUNICATION LAYER",
            "轨道交通层 METRO LAYER",
            "道路隧道层 ROAD TUNNEL LAYER",
            "管廊综合层 UTILITY CORRIDOR LAYER"
          ]
        },
        "side_panels": [
          { "id": "01", "title": "城市主骨架 URBAN SKELETON", "elements": "Map with 8 legend items" },
          { "id": "02", "title": "排水与地下水网 DRAINAGE + STORMWATER", "elements": "Cross-section diagram '典型排水剖面 DRAINAGE SECTION' with 5 legend items" },
          { "id": "03", "title": "电网与能源分配 POWER GRID + ENERGY", "elements": "Cross-section diagram '典型变电站剖面 SUBSTATION SECTION' with 6 legend items" },
          { "id": "04", "title": "通信与网络骨干 TELECOM + INTERNET", "elements": "Cross-section diagram '数据中心剖面 DATA CENTER SECTION' with 6 legend items" },
          { "id": "05", "title": "地铁与地下交通 METRO + SUBSURFACE MOBILITY", "elements": "Cross-section diagram '人民广场站剖面 PEOPLE'S SQUARE STATION' with 6 legend items" },
          { "id": "06", "title": "道路、高架与循环 ROADS + ELEVATED MOBILITY", "elements": "Cross-section diagram '南浦大桥剖面 NANPU BRIDGE SECTION' with 6 legend items" },
          { "id": "07", "title": "管廊与地下设施 UTILITY CORRIDORS + PLUMBING", "elements": "Cross-section diagram '综合管廊 UTILITY CORRIDOR' with 8 legend items" },
          { "id": "08", "title": "城市流量与系统协同 URBAN FLOWS + COORDINATION", "elements": "Map diagram '城市运行指挥中心 CITY OPERATIONS CENTER' with 6 legend items" }
        ],
        "bottom_panels": {
          "system_logic": {
            "title": "城市系统协同逻辑 SYSTEM COORDINATION LOGIC",
            "steps": 4,
            "labels": ["感知层 SENSING LAYER", "网络层 NETWORK LAYER", "平台层 PLATFORM LAYER", "应用层 APPLICATION LAYER"]
          },
          "city_brain": {
            "title": "城市大脑 CITY BRAIN",
            "central_node": 1,
            "peripheral_nodes": 8
          },
          "references": {
            "depth_scale": { "title": "深度与尺度 DEPTH & SCALE REFERENCE", "icons": 5 },
            "map_scale": { "title": "比例尺 SCALE", "markers": 4 }
          }
        }
      }
    }
    
    

    结构化指令的核心优势:

    • 指令本身可以完美实现文字内容和绘图内容的隔离
    • 相对无损地呈现布局信息
    • 所有文字层面的修改,完全可以通过修改生图指令来实现

    所以,当不需要考虑保证每次生图完全一致,还在前期创意生图阶段时:

    文本任务请在文本阶段完成,何必进入图像任务呢?

    思路2:一切编辑任务都是生成任务(Image-Mask)

    针对已经进入最后精修阶段,不能接受图片有大范围变化的情况,那只能考虑使用图像编辑功能了。

    Gxxxxxx2的图像编辑机制:

    支持上传和图片大小相同的遮罩层(Mask),进行图像编辑。

    需要注意:

    实现本质上依旧是图像生成任务。

    所以官方已经说明:无法保证图像编辑前后,非遮罩的位置完全不变。

    不过我初步尝试,感觉只修改局部文字,似乎对图片影响很小。

    当然肯定存在很多人眼无法观测的变化,但太夸张的改变我也还没试出来过。
    图片

    写在最后

    这一章就聊这么多了。

    至于网传Cxxxx可以拆分PSD文件——哈哈我也已经有思路了。

    还是那句话:

    当你摆脱"图像编辑"任务的桎梏,天高海阔~

    当然,进一步提高Bounding Box准确率、字体准确率,在当前模型能力下,可以进一步使用Agent来实现效果优化:

    比如后面接一个多模态模型对比字体差异,给出优化建议,然后进入iteration的优化环节, 用更多token、更多校验逻辑、更长的延时来换取更好的效果。关键还是看业务场景

  • 相关阅读:
    静态代码分析基础知识及分析工具
    Linux_文件权限
    【MySQL查询常见面试题】如何避免全表扫描
    计算机网络-应用层了解
    判断元素出现在可视区域的方法
    4.3 学习理论
    电脑多开微信教程,可以多开n个
    多主复制下处理写冲突(4)-多主复制拓扑
    Macleod薄膜专题设计中高级课程
    软件设计之抽象工厂模式
  • 原文地址:https://www.cnblogs.com/gogoSandy/p/20191216
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号