HarmonyOS 7 Core Vision Kit:文搜图短别名索引与回查契约【鸿蒙心迹】
李游把“文本搜照片”接进相册类应用时第一反应往往是模型是否足够准确、结果能否排到用户想看的那一张。但真正接入产品数据之后还有一道更靠前的门槛供视觉服务建立索引的究竟是哪条文件路径图库里的资源可能来自相机、文件管理器、云盘下载目录或历史迁移包路径深度很难控制。对一张照片而言图片能显示出来并不等于它的路径就适合交给另一个服务建立索引。本文用一个可复查的假设项目PathBridge推演这件事。它不是声称已经在真实设备上测通的复盘文中PB-1009-02A、24 张照片、6 条长路径、146→86 字符和检索命中 9 条都是为了讲清数据合同而固定的演示样本。目标不是绕过接口限制而是让用户看到的资源身份与 Core Vision Kit 接收到的沙箱路径各司其职。一、照片能显示索引却未必能接收产品页展示图片通常沿着一个“资产 ID → 资源位置 → 解码显示”的路径往下走。显示层可以从受支持的 URI 读取内容也可以读取应用已缓存的副本。文搜图却是另一条链Core Vision Kit 的textSearchImage.insertImage(imagePath, scope)接收一个图片沙箱路径和一个作用域。官方 API 参考明确把imagePath长度限定在 1128把scope长度限定在 132且作用域由字母或数字组成。search(query, scope, topKey)的查询词长度为 1100不支持纯数字或纯字母topKey范围为 0100。起始版本为 API 26.0.0接口要求 Stage 模型。本文只使用这些已经核实的能力不把“自动映射相册 URI”“自动截断长路径”描述成系统行为。这些细节很容易漏看。UI 中一张相片叫“IMG_3282.JPG”源文件位置在多层目录后面业务记录仍然有效但如果把一条 146 字符的应用内绝对路径原样传给insertImage它已经超出文档给出的长度区间。更糟糕的做法是收到失败之后直接取末尾 128 个字符重试。裁切后的字符串不一定指向存在的文件原目录身份也丢了。看上去是“路径缩短”实际却把地址损坏了。因此这个 Demo 把失败点前移在真正调用视觉服务之前就计算完整绝对路径的长度并由应用创建一个确实存在的短路径副本。这里的“短别名”不是给数据库增加一个虚构字段而是给同一份图像字节安排一个新沙箱地址。目录需要真实建立文件需要真实复制并在写入索引前检查可访问性。别名映射则保留在应用自己的账本中不假定视觉服务理解原图 ID。应用的业务列表仍以稳定的assetId为主键。索引服务只处理aliasPath用户点开命中结果时应用通过账本从aliasPath找回assetId再选择当前仍有效的原始资源进行显示。这样路径长度限制不会被传播到相册数据模型也不会迫使业务层重命名文件。二、先把三种身份拆开PathBridge 使用三个标识assetId代表用户意义上的照片sourcePath代表应用当前持有的、可供复制的沙箱文件路径aliasPath是发给文搜图索引的稳定短路径。三者一旦混在同一字段就会出现非常隐蔽的错误。举例说文件复制成功之后开发者把aliasPath写回相册表的sourcePath某天索引重建时清理短别名目录业务页面也随之打不开照片。根本原因不在视觉 SDK而是短期派生资源被误当成原件。这个区别在文档式选择器场景尤为重要。外部 Picker 返回的 URI 不能不经处理就伪装成可传给insertImage的沙箱文件路径。先使用官方推荐的访问方式取得内容把内容落入应用私有目录再检查副本路径是否满足接口要求如仍过长才创建索引用的短别名。示意图里使用的/storage/...与/pbridge/...仅用于解释“来源”和“映射”不是建议直接传给 API 的真实沙箱目录。代码中必须以当前应用的context.filesDir为根计算绝对路径。在账本层我宁愿多保留两个字段contentRevision和aliasState。前者表示当前图片字节版本后者表示这一版本处在PLANNED、COPIED、INDEXED或FAILED的哪一步。原因很实际文件名不变并不能证明文件内容不变。如果用户替换了同名图旧的视觉特征与新的业务图片相互矛盾命中结果就不再可信。此外还需要反向表aliasPath → assetId。textSearchImage.search返回的ImageObject包含imagePath、scope和similarity并不承诺返回应用自行定义的资产编号。试图从路径里截取照片名称恢复身份属于把内部目录结构当协议。稳定做法是用实际返回的完整imagePath精确查账本并把查不到、作用域不一致或版本失配的条目标为“待修复”而不是给用户展示一张猜测出来的照片。三、给 PathBridge 一份小而硬的演示合同项目的示例页面为AliasImportPage服务层为VisionBridge路径规划器为AliasPathPlanner账本为AliasLedger。本轮任务编号固定为PB-1009-02A作用域使用AlbumA19。共有 24 条合法源记录其中 6 条在原始应用沙箱目录中达到或超过规划器设定的长路径分支代表性样本IMG-018的源路径长 146 字符经过副本处理之后用于索引的绝对别名长 86 字符。这里的长度是造出的测试向量不代表某款设备的固定filesDir长度。工程目录不求大但边界要清楚页面负责按钮和进度不参与索引文件路径的拼接规划器只做不触碰磁盘的参数计算文件操作层保证目录、复制和清理VisionBridge负责生命周期、调用结果和错误分类账本负责反向映射及版本快照。把这些步骤塞进一个按钮回调一开始少写了几个文件后面却很难知道失败发生在路径计算、实际复制还是模型服务。第一段代码解决在调用 API 之前怎样确定路径、作用域和唯一性。为了避免误用用纯 ArkTS 函数先制定短路径实际落盘交给后面的 IO 层。下例里的流水号由应用持久化账本分配不能每次启动都重置为 1不能用一个短随机数冒险覆盖别的资产。// model/AliasPathPlanner.ets应用层逻辑不是系统 APIexportinterfaceAliasPlan{assetId:string;sourcePath:string;aliasPath:string;needsAlias:boolean;}exportfunctionplanShortAlias(assetId:string,sourcePath:string,filesDir:string,serial:number,scope:string):AliasPlan{if(!/^[A-Za-z0-9]{1,32}$/.test(scope)){thrownewError(invalid scope);}if(serial1||!Number.isSafeInteger(serial)){thrownewError(invalid serial);}constsuffixserial.toString(36).padStart(6,0);constcandidate${filesDir}/si/a${suffix}.jpg;if(candidate.length128){thrownewError(sandbox root too long for alias);}constneedsAliassourcePath.length128;constaliasPathneedsAlias?candidate:sourcePath;if(aliasPath.length1||aliasPath.length128){thrownewError(unsupported imagePath length);}return{assetId,sourcePath,aliasPath,needsAlias};}代码展示了两层判断。第一层验证作用域不能为了 UI 显示好看写成Album_A19就直接调用 SDK第二层针对最终传入的绝对路径做长度检查而不是检查文件名长度。这里把副本文件扩展名写成.jpg仅为演示工程配置真正落地时要与编码格式相符原件如果是 PNG/HEIF不能只改后缀就宣称内容变成 JPEG。规划器的返回值只是“可以尝试”的计划绝不等于文件已复制或特征已建立。还有一个容易遗漏的后果在极端深的应用目录下哪怕文件名短到只剩一个字符绝对路径仍可能超限。代码选择抛错而不是靠“多删一层目录”拼凑一个不存在的外部位置。真实应用应在启动阶段量测沙箱根目录可用长度必要时调整内部目录层级并为确实无法满足接口约束的样本提供清楚的不可索引原因。四、复制成功与索引成功是两次不同的提交路径规划结束之后最危险的中间状态是“别名文件已经存在视觉索引还没有成功”。如果此时 UI 仅看见文件存在就显示绿色完成搜索依旧查不到。如果先把别名记录写成INDEXED再等待 SDK 返回则进程被杀之后账本会比事实超前。PathBridge 把这一步拆成PLANNED → COPIED → INDEXED界面只对最后的INDEXED计入成功数。第二段代码解决真实沙箱文件复制、索引与失败清理怎样配对。代码假定调用前已经创建filesDir/sisourcePath确认为普通沙箱文件textSearchImage.init()由页面级服务在本轮索引开始前成功执行一次。fileIo.copyFile是 Core File Kit 文件操作不适合直接传未经解析的资源 URI更不能把 rawfile 资源描述符误当普通文件描述符。// service/VisionBridge.ets单条索引的核心片段import{fileIo}fromkit.CoreFileKit;import{textSearchImage}fromkit.CoreVisionKit;exportasyncfunctioncommitAlias(plan:AliasPlan,scope:string):Promiseboolean{letcopiedfalse;try{if(plan.needsAlias){awaitfileIo.copyFile(plan.sourcePath,plan.aliasPath);copiedtrue;}constinserted:booleanawaittextSearchImage.insertImage(plan.aliasPath,scope);if(!inserted){thrownewError(insertImage returned false);}// 调用方此时才将对应账本条目标记为 INDEXEDreturntrue;}catch(error){if(copied){try{awaitfileIo.unlink(plan.aliasPath);}catch(_){/* 记录待回收文件不能吞掉审计信息 */}}throwerror;}}这只是事务骨架而不是一个保证跨服务原子的数据库提交。copyFile返回成功只能表示复制调用完成对高价值数据还应校验目标文件字节长度、格式以及与源版本的一致性。insertImage返回false与抛出异常也要分开记录。若模型服务在内部完成写入后客户端遭遇异常应用可能并不知道最终状态此时不能直接断言索引一定失败应该把条目置于RECONCILE_REQUIRED并做受控重查或重建。尤其不要在失败时立即删除原件。原图既是用户数据也是后续重新建立别名的来源清理范围最多涉及本次创建的、确认无其他引用的派生文件。正式实现中需要先写入持久化账本再复制到临时名称校验后改成正式别名最后入索引。示例函数为突出 API 边界省略了这几步持久化细节不能照搬到存在并发导入的生产队列里。视觉能力升级可能通过错误码1013100003提示先使用clearData再重新插入。这不意味着每条插入失败都应该清空全部索引。clearData()的作用域影响范围与普通单张失败完全不同需要由上层重建流程统一协调先冻结搜索入口、保存业务账本、按可重建顺序执行清理及重插确认版本一致之后才恢复查找。把全量重建放在单张图片 catch 分支里会把一个局部问题升级成全局数据空窗。图二是按上述演示合同生成的 DevEco Studio设计示意图不是已实际运行的 IDE 取证截图。左侧对应目录、中央核心判定与右侧状态页用的是同一项目名底部 HiLog 模拟输出sourceLen146、aliasLen86、indexed24/24和任务编号。真实调试应额外采集复制前后字节统计、API 错误码、账本修订号与是否存在脏别名。图里的代码排版为视觉说明开发时应以正文代码为准并通过目标 SDK 编译核对。五、回查不是再搜索一次而是证明身份没有被换掉用户输入“雨夜桥灯”search返回九条演示命中。九条结果可以包含相似度和路径但应用不应该由“命中顺序”反推资产身份。PathBridge 的核心动作是按hit.imagePath查反向账本、确认hit.scope与本轮请求一致、验证该资产仍指向被索引的内容版本最后才组装可展示卡片。该流程能够识别丢失映射却不会凭空修复已经失去来源的记录。第三段代码解决如何用 SDK 返回的路径找回业务资产而不是做字符串猜测。为了让边界清晰示例将账本已经加载为Map由服务协调层保证与当前作用域的生命周期一致。业务应用还需要对本轮查询计数、页面离开时的结果回贴资格做检查这些属于不同的并发层不在本篇重复展开。// service/VisionBridge.ets索引路径到业务资产的回查import{textSearchImage}fromkit.CoreVisionKit;exportinterfaceAssetRow{assetId:string;aliasPath:string;scope:string;contentRevision:number;state:string;}exportinterfaceSearchCard{assetId:string;similarity:number;revision:number;}exportasyncfunctionsearchAndRestore(query:string,scope:string,rows:Mapstring,AssetRow):PromiseSearchCard[]{if(query.length1||query.length100||/^[A-Za-z]$/.test(query)||/^[0-9]$/.test(query)){thrownewError(query outside supported constraints);}consthitsawaittextSearchImage.search(query,scope,24);constcards:SearchCard[][];for(consthitofhits){constrowrows.get(hit.imagePath);if(!row||row.scope!hit.scope||row.state!INDEXED){continue;// 保留为回查诊断不直接展示悬挂结果}cards.push({assetId:row.assetId,similarity:hit.similarity,revision:row.contentRevision});}returncards;}这个映射还有一条很实际的产品约束当用户从搜索结果打开照片时应尽量通过assetId去获取当前仍有效的业务资源而不是直接暴露派生别名给其他页面。否则删除别名、重新压缩缓存或清理重建时详情页会被短期工作目录绑住。更合理的做法是卡片持有稳定 ID 与当前版本真正打开时由业务仓库检查原图是否还可访问必要时提示“资源已移动”并提供重新关联入口。回查率同样应该独立于搜索命中数记录。search返回 9 条不等于“9 条都能显示”如果其中 2 条找不到账本业务输出应该是 7 条可展示和 2 条待诊断。本文演示样本采用 9 条均能回查、整批 24/24 映射一致的理想输入是为了让路径契约清晰而不是暗示所有设备和模型版本都能获得这个结果。六、两张手机图各承担一半证据导入页关注“现在能否继续”回查页关注“为什么能继续”。图三用AlbumA19、24/24、长路径6、短别名6和INDEX_READY告诉用户这次计划中的资源已经进入可检索状态。代表性路径146→86只强调接口约束触发了哪一步处理它并不表示图像被压缩了也不表示照片被改名。示意中最近导入的三张图为占位样例图片不是 SDK 返回的真实图像文件。图四进入IMG-018的技术明细业务原件名、两种路径长度、scopeAlbumA19、insertImagetrue、topKey24、查询“雨夜桥灯”、命中 9 条以及回查一致24/24。页面为讲解而显示缩写后的路径屏幕上/pbridge/...等文字符号不代表真实可提交的绝对沙箱路径工程日志里应留必要的脱敏前缀与路径摘要避免泄露用户目录及相册原名。这两张图能解释一个看似反常的现象某张图片在业务页面始终显示正常只有“文搜图不可用”。只要把“源资源正常”“短别名文件存在”“视觉服务写入成功”“回查身份匹配”拆成四个状态用户反馈就可以被定位到具体一层而不再是一句含糊的“AI 搜索失败”。同时UI 中的完成状态应来自业务账本与服务结果不应该由一个setTimeout到期后自动变绿。七、真正需要验收的是失败路径我会先用纯函数测试而不是直接上机。测试向量至少覆盖空字符串、长度恰为 128、长度 129、演示样本 146、filesDir本身太长、重复流水号、非法作用域以及扩展名与字节格式不一致。这里尤其要注意ArkTS 的字符串.length与用户眼中“字符个数”不一定完全同义正式项目应按目标 SDK 的限制定义确认计数单位并把含代理对或特殊 Unicode 的路径加入验证集。路径规划器不能假设所有用户文件名都是 ASCII。第二组测试覆盖磁盘步骤。目标目录创建失败、剩余空间不足、复制到一半中断、来源被外部替换、写入成功但验证失败都必须让aliasState停在可解释状态。COPY_FAILED后不创建索引INDEX_FAILED后清理本次独占副本如果清理也失败登记待回收不因一行 catch 就把问题从调试视野里抹掉。对于并发导入还要增加同一assetId多版本竞争新版别名成功之后旧版的清理才可继续并且只能清掉旧版拥有的文件。第三组测试覆盖模型与搜索。init()未成功时禁止排队调用insertImage服务异常与“能力已更新”要走不同处理search返回空数组不能自动等价于索引不存在单条回查缺失不能触发clearData()。重复进入页面时服务初始化和释放应由统一协调者管理release()需要等待本批不再提交后执行。对页面取消与任务取消也要分开用户不再关心结果只能说明页面不再回贴并不证明底层异步操作已经结束。第四组测试则与数据保护有关。别名目录应属于应用内部受控空间不在公开下载目录里散落导入的临时文件要有保留期限或引用计数日志对用户自定义目录做脱敏相册原图在业务删除时按照业务数据策略处理索引副本不能反向决定原件的生死。应用级“回收”与模型级“删除索引”属于两个动作正常删除路径应写出一份可重放的任务记录必要时允许从原件重新建立索引。到这里演示中的四个验收断言可以写成明确的判定所有送给insertImage的路径长度满足文档约束长路径样本有真实可读取的别名副本任意 SDK 返回路径能够在当前账本中找回对应资产处理失败不会污染已确认的资源。24/24、9、0都是这份输入向量的预期值不是实机基准测试。拿到 SDK 环境之后需要用真实沙箱路径重新计算长度并分别在手机和平板上记录结果。八、从“缩短字符串”转向“拥有可追踪的派生资源”这次选择长路径做切入是因为它迫使我们重新回答一个基础问题某个接口接受路径时应用究竟向它承诺了什么承诺的不是一个看起来像文件名的字符串而是一条满足能力约束、当前确实可读取、生命周期有明确所有者的资源地址。短别名的本质是受管理的派生副本反向账本的本质是把 SDK 的路径身份还原成产品资产身份。如果后续要把 PathBridge 做成正式产品我会先补三件事将AliasLedger持久化并绑定内容修订号增加复制前后校验与重建队列把设备端成功率、回查率和垃圾文件回收率拆成三个独立指标。检索质量当然重要但只有索引输入与资产身份可信质量分析才有基础。一个“图片能搜出来”的 Demo 可以很快写完能解释每一条图片从哪里来、为什么仍然指向它才是工程中更难也更值钱的部分。资料核对华为开发者联盟《textSearchImage通过文本搜索图片》2026-08-29 更新https://developer.huawei.com/consumer/cn/doc/harmonyos-references/core-vision-text-search-image-api 。华为开发者联盟《rawfile 下文件拷贝到沙箱后大小和内容错误如何解决》2026-06-26 更新https://developer.huawei.com/consumer/cn/doc/doccenter-dev-faq/faqs-local-file-manager-62 。官方 API 只为本文列出的接口、参数约束与文件访问原则提供依据短别名目录、流水号、账本、状态名称和全部演示数据均为应用层设计。

相关新闻

HarmonyOS 7 PanGesture:图片对比滑块手势裁决与滚动让行【鸿蒙心迹】

HarmonyOS 7 PanGesture:图片对比滑块手势裁决与滚动让行【鸿蒙心迹】

李游 一个很小的交互,到了大屏双栏里,反而更容易露出边界。左侧是商品清单,右侧是详情。详情页面纵向滚动,某个图片对比区域又放了一个可以左右拖动的分割滑块。用户的手指刚接触图片,想上下看下一段描述,滑…

2026/10/9 13:21:08 阅读更多 →
2026大厂AI Agent高频面试题Top50:题目+参考答案+追问陷阱(TaoToken版)

2026大厂AI Agent高频面试题Top50:题目+参考答案+追问陷阱(TaoToken版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 13:21:08 阅读更多 →
dnSpy:支持调试与重编译的.NET反编译器实战指南

dnSpy:支持调试与重编译的.NET反编译器实战指南

简介:本资源为C#开发者与逆向工程学习者必备的dnSpy反编译工具完整安装包,涵盖反编译、调试、代码编辑与热替换等核心能力,适用于.NET程序分析、Bug修复、安全审计及源码级学习等实战场景。压缩包共399个文件,包含304个dll&#x…

2026/10/9 13:21:08 阅读更多 →

最新新闻

t3code:让AI代码生成从玩具走向工程实战

t3code:让AI代码生成从玩具走向工程实战

在AI写代码这件事上,我发现一个很残酷的现实:很多人不是不会用AI,而是被AI写出来的“幻觉代码”坑得死去活来。尤其是当你接手一个需要严格遵循团队规范的工程化项目,AI补全的代码常常看起来头头是道,一编译全是错&…

2026/10/9 13:57:51 阅读更多 →
Oracle EBS物料清单BOM系统:从数据模型到落地避坑指南

Oracle EBS物料清单BOM系统:从数据模型到落地避坑指南

简介:面向ERP实施顾问与制造业信息化人员的Oracle EBS物料清单管理培训PPT,以解决方案视角系统讲解物料清单模块的功能框架与业务价值。内容从物料编码(ITEM)这一唯一识别码入手,介绍物料属性的分组规则,说…

2026/10/9 13:57:51 阅读更多 →
Windows下Codex配置实战:环境准备、登录认证与排错指南

Windows下Codex配置实战:环境准备、登录认证与排错指南

在 Windows 上配置 Codex,说难不难,说简单也远没到“一键完成”的程度。Codex 是 OpenAI 开源的命令行编程助手,打开终端就能和你对话,帮你读项目代码、生成改动、执行命令、解释历史代码。你理想中的体验应该是安装、登录、开聊三…

2026/10/9 13:57:51 阅读更多 →
工程电磁场分析核心方法:从数理方程到有限元仿真实践

工程电磁场分析核心方法:从数理方程到有限元仿真实践

简介:这份《工程电磁场分析的数理基础》PPT课件是为电气工程及相关专业学习电磁场数值计算的学生和工程师准备的入门教学资料。资源共1个pptx文件,压缩包仅404KB,小巧易用,适合课堂讲解或自学参考。内容以麦克斯韦方程组为出发点&…

2026/10/9 13:57:51 阅读更多 →
跨时钟域缺陷的兜底方案:JasperGold CDC 形式验证实战指南

跨时钟域缺陷的兜底方案:JasperGold CDC 形式验证实战指南

简介:《JasperGold CDC Checks Reference》是 Cadence 公司于 2020 年 3 月发布的官方参考手册,专门面向芯片设计与验证工程师,系统讲解跨时钟域(CDC)规则检查与形式验证方法。资源为单个 PDF 文档,压缩包仅…

2026/10/9 13:57:51 阅读更多 →
双端影视APP源码修复实战:从编译失败到可调试基线

双端影视APP源码修复实战:从编译失败到可调试基线

简介:这是一套开箱即用的双端影视APP无加密修复版源码,面向有苹果CMS建站基础的开发者或个人站长,解决影视类小程序/APP快速落地、双端(AndroidiOS)同步上线及商业化运营难题。资源包含673个文件,以312张UI…

2026/10/9 13:56:49 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →