AutoCAD二次开发:利用LSP脚本实现.NET DLL程序集自动加载
1. 项目概述为什么我们需要关注LSP的自动加载在CAD二次开发这个行当里尤其是用AutoCAD做定制化工具有一个场景几乎每个开发者都会遇到你辛辛苦苦用.NET写了一个功能强大的DLL程序集里面封装了各种提高绘图效率的命令。你兴冲冲地发给同事或者部署到多台机器上结果对方打开CAD你的命令一个都找不到。最常见的解决方案是手动在CAD命令行里输入NETLOAD然后找到那个DLL文件加载。一次两次还行但每次启动CAD都要重复这个操作对最终用户来说这体验简直糟透了。他们可能根本记不住命令或者觉得太麻烦而放弃使用你的工具。这就是“通过LSP实现DLL程序自动加载”这个需求最直接的来源。它不是一个炫技的功能而是一个实实在在提升工具易用性和部署友好性的刚需。想象一下你的工具像CAD原生命令一样随着CAD启动就自动就绪用户无需任何额外操作这才是专业工具该有的样子。这里涉及两个核心概念LSP和DLL自动加载。LSPAutoLISP是AutoCAD内置的一种解释型脚本语言历史悠久功能直接特别擅长自动化一些重复性操作和界面交互。而DLL通常指的是我们用C#或VB.NET等语言开发的托管代码程序集里面包含了我们自定义的命令CommandMethod。NETLOAD是CAD提供的、专门用于加载此类.NET程序集的命令。所以这个项目的本质是利用LSP脚本的自动执行特性作为“触发器”或“加载器”在CAD启动时自动调用NETLOAD命令将我们指定的.NET DLL程序集加载到当前CAD进程中。这听起来简单但里面门道不少比如LSP脚本放哪、怎么确保它被执行、不同CAD版本和安装路径的兼容性、加载失败如何处理等等。接下来我们就一层层剥开看看怎么把这个事做得既稳定又优雅。2. 核心思路与方案选型不止一种“自动”实现自动加载粗略来看有不止一条路。我们先分析几种常见思路看看为什么最终LSP方案是平衡了简易性、兼容性和可控性的最佳选择。2.1 常见方案对比修改CAD支持文件路径Support File Search Path并依赖acad.lsp/acaddoc.lsp原理AutoCAD启动时会自动在其支持文件搜索路径下寻找并加载名为acad.lsp应用于整个应用程序和acaddoc.lsp应用于每个打开的图形文档的LSP文件。我们可以把我们的加载脚本写进这些文件或者把包含我们脚本的目录添加到支持路径中。优点无需用户干预CAD原生行为理论上最“自动”。缺点侵入性强。修改全局支持路径或acad.lsp会影响整个CAD环境可能与其他插件冲突。在部署到用户机器时修改这些系统或用户配置文件的步骤较为复杂且可能因用户权限问题如受限制的安装目录而失败。使用CAD的“启动套件”Startup Suite原理在CAD的“加载/卸载应用程序”对话框APPLOAD命令中有一个“启动套件”列表。添加到这里的LSP或DLL会在每次CAD启动时自动加载。优点通过图形界面配置对用户相对友好。配置信息保存在注册表或用户配置中不直接修改文件。缺点仍然是每台机器需要手动配置一次无法实现“开箱即用”的部署。对于大批量部署逐个机器配置不现实。利用LSP脚本的自动加载机制本文核心原理编写一个独立的LSP文件例如MyToolLoader.lsp将其放置在CAD自动搜索的特定目录如安装目录、支持文件目录或通过极简的引导方式如修改一个acad.lsp来调用它。在这个LSP脚本中使用(command “NETLOAD” “完整DLL路径”)来加载我们的程序集。优点部署简单通常只需要将DLL和LSP脚本一起拷贝到一个目录。隔离性好自己的脚本独立成文件与其他插件互不干扰。可控性强可以在脚本中加入丰富的逻辑如判断CAD版本、检查DLL是否存在、加载失败提示等。兼容性高从古老的AutoCAD到最新版本LSP和NETLOAD的支持都非常稳定。纯.NET方式例如利用Autodesk官方提供的机制原理通过实现特定的接口如IExtensionApplication或在程序集中添加特殊的注册表项让CAD在启动时自动发现并加载.NET程序集。优点更“.NET”更现代管理起来可能更规范。缺点配置相对复杂不同CAD版本机制可能有差异对于小型工具或快速部署来说略显繁重。注意对于大多数中小型开发项目或个人工具方案3独立的LSP自动加载脚本是性价比最高的选择。它很好地平衡了自动化程度、部署难度和后期维护成本。我们接下来的讨论也将围绕此方案展开。2.2 我们的方案设计我们的目标设计一个健壮的自动加载系统它应该包含以下要素一个核心的LSP加载脚本负责执行NETLOAD命令。一个可靠的脚本放置与触发机制确保CAD能自动找到并执行这个脚本。完善的错误处理与日志记录加载失败时能给用户明确的提示方便开发者排查问题。对多版本、多路径的适应能力用户的CAD可能安装在不同盘符、不同目录我们的脚本要能智能定位DLL。一个进阶的思路是我们甚至可以利用LSP在加载DLL后自动将我们自定义的命令添加到CAD的工具栏、菜单或功能区面板实现真正的“一键部署全面就绪”。这超出了基础加载的范围但思路是相通的。3. 实操详解从零构建自动加载脚本理论说完了我们直接上手。假设我们开发了一个名为MyAwesomeTools.dll的.NET程序集它里面定义了一个命令MYTOOL。我们的目标是让这个DLL在CAD启动时自动加载。3.1 基础版LSP加载脚本首先创建一个文本文件将其后缀改为.lsp例如LoadMyTools.lsp。用记事本或其他代码编辑器打开输入以下内容;;; LoadMyTools.lsp - 自动加载 MyAwesomeTools.dll ;;; 作者你的名字 ;;; 日期2023-10-27 (defun c:LoadMyTools ( / dllPath found) ;; 定义DLL文件的预期路径。这里假设LSP脚本和DLL在同一目录。 (setq dllPath (findfile “MyAwesomeTools.dll”)) (if dllPath (progn ;; 尝试加载DLL (command “NETLOAD” dllPath) (princ (strcat “\n成功加载: “ dllPath)) ;; 可以在这里添加加载成功后执行的初始化代码例如打印所有已注册命令 ; (princ “\n已注册命令: MYTOOL”) ) (progn ;; 如果找不到DLL文件 (princ “\n错误未找到 MyAwesomeTools.dll 文件。”) (princ “\n请确保此LSP脚本与DLL文件位于同一目录。”) ) ) (princ) ; 静默退出 ) ;; 自动执行加载函数 (c:LoadMyTools)代码解析与注意事项(defun c:LoadMyTools ...)定义了一个名为LoadMyTools的LSP命令在CAD命令行输入LoadMyTools即可执行。虽然我们目标是自动加载但保留一个命令入口对于手动调试非常有用。(findfile “MyAwesomeTools.dll”)这是关键函数。它会在AutoCAD的所有支持文件搜索路径中查找指定文件。将LSP脚本和DLL放在同一目录并且确保该目录在CAD的支持文件搜索路径中是此方法能工作的前提。我们稍后会解决如何“确保”。(command “NETLOAD” dllPath)执行CAD命令NETLOAD并传入找到的DLL完整路径。(if dllPath … )标准的LISP条件判断如果找到文件就加载否则提示错误。(princ (strcat …))用于在命令行输出信息方便用户查看加载结果。最后一行(c:LoadMyTools)这是实现“自动”的关键。当CAD加载这个LSP文件时会立即执行这个函数调用从而触发DLL的加载过程。如果没有这一行这个LSP文件仅仅定义了一个命令而不会自动执行任何操作。3.2 如何让CAD自动找到并执行这个LSP脚本现在我们有LoadMyTools.lsp和MyAwesomeTools.dll两个文件。怎么让CAD一启动就执行这个LSP脚本呢有以下几种主流方法推荐方法一。方法一利用acad.lsp或acaddoc.lsp进行引导推荐我们不直接修改原始的acad.lsp而是采用“引导”策略最大化减少对系统的影响。找到用户的acad.lsp或acaddoc.lsp文件位置。它们通常位于以下位置之一%APPDATA%\Autodesk\AutoCAD {版本}\{语言}\Support\用户自定义内容优先C:\Program Files\Autodesk\AutoCAD {版本}\Support\安装目录你可以在CAD命令行输入(findfile “acad.lsp”)来快速定位当前生效的文件。在acad.lsp文件末尾添加一行引导代码。打开acad.lsp如果不存在则在上述用户支持目录中创建一个在文件末尾添加;;; 自动加载我的工具集 (load “X:/Your/Path/To/LoadMyTools.lsp”)请将路径X:/Your/Path/To/替换为LoadMyTools.lsp文件实际存放的完整路径。将LoadMyTools.lsp和MyAwesomeTools.dll一起放置在你指定的目录例如D:\CADPlugins\MyAwesomeTools\。这样做的原理是CAD启动时会自动加载并执行acad.lsp。当执行到我们添加的那行(load …)时就会去加载我们指定的独立LSP脚本。我们的独立脚本随即执行完成DLL的加载。实操心得我强烈建议将你的所有插件文件LSP、DLL、资源文件集中放在一个独立的、非系统盘的目录比如D:\CADAddins\。然后在acad.lsp中用绝对路径去引导。这样做的好处是路径稳定绝对路径最可靠不受CAD支持路径设置的影响。易于管理所有文件在一起备份、更新、删除都很方便。避免冲突与CAD安装目录和其他插件隔离。方法二将脚本目录添加到支持文件搜索路径如果你不想修改acad.lsp也可以将存放LoadMyTools.lsp的目录添加到CAD的“支持文件搜索路径”中。然后将脚本改名为acad.lsp或acaddoc.lspCAD会自动加载它。步骤CAD中输入OPTIONS命令 - “文件”选项卡 - “支持文件搜索路径” - “添加” - 浏览到你的脚本目录 - “确定”并“上移”到靠前位置确保优先被搜索。缺点如果你的脚本目录下还有其他LSP文件都可能会被CAD自动加载可能引发意外。且重命名脚本会失去其独特性。通常不推荐。3.3 进阶版更健壮的加载脚本基础版脚本在理想情况下工作良好但缺乏容错和灵活性。让我们来增强它。;;; LoadMyTools_Advanced.lsp - 增强版自动加载脚本 (defun c:LoadMyTools ( / dllPath cadVer currentSupportPaths myToolPath) ;; 1. 设置我们工具集的根目录这里使用绝对路径最可靠 (setq myToolPath “D:\\CADAddins\\MyAwesomeTools\\”) ; 注意双反斜杠或正斜杠 ;; 2. 检查目录是否存在 (if (not (setq dirExists (findfile myToolPath))) ; findfile 对目录也有效 (progn (alert (strcat “工具目录未找到\n” myToolPath “\n请检查安装。”)) (exit) ; 退出函数 ) ) ;; 3. 构建完整的DLL路径 (setq dllPath (strcat myToolPath “MyAwesomeTools.dll”)) ;; 4. 检查DLL文件是否存在 (if (not (findfile dllPath)) (progn (alert (strcat “DLL文件未找到\n” dllPath)) (exit) ) ) ;; 5. 可选根据CAD版本执行不同逻辑 (setq cadVer (getvar “ACADVER”)) ; 获取CAD版本如 “R23.1” (princ (strcat “\n当前AutoCAD版本” cadVer)) ;; 可以在这里判断 if (wcmatch cadVer “R23.*”) 然后决定加载哪个版本的DLL ;; 6. 尝试加载DLL (princ “\n正在加载 MyAwesomeTools... “) ;; 使用 vl-catch-all-apply 来捕获加载过程中的错误 (setq err (vl-catch-all-apply ‘command (list “NETLOAD” dllPath))) (if (vl-catch-all-error-p err) (progn ;; 加载失败 (princ “失败”) (princ (strcat “\n加载错误” (vl-catch-all-error-message err))) (alert (strcat “加载 MyAwesomeTools.dll 失败\n\n错误信息\n” (vl-catch-all-error-message err) “\n\n可能原因\n1. .NET Framework版本不匹配。\n2. DLL依赖项缺失。\n3. 文件被占用或损坏。”)) ) (progn ;; 加载成功 (princ “成功”) ;; 成功后的初始化操作例如注册命令别名、修改界面等 ;; (princ “\n工具已就绪请输入命令 MYTOOL 开始使用。”) ;; 可以尝试执行一个初始化命令确认DLL功能正常 ;; (if (not (vl-catch-all-error-p (vl-catch-all-apply ‘command ‘(“MYTOOL”)))) ;; (princ “\n初始化命令执行成功。”) ;; (princ “\n警告DLL已加载但自定义命令可能未正确注册。”) ;; ) ) ) (princ) ; 静默退出 ) ;; 自动执行并加入错误保护 (if (not (vl-catch-all-error-p (vl-catch-all-apply ‘c:LoadMyTools nil))) (princ “\nMyAwesomeTools 自动加载流程已执行完毕。”) (princ “\nMyAwesomeTools 自动加载过程发生未知错误。”) )这个进阶版脚本的改进点绝对路径使用固定的绝对路径D:\\CADAddins\\MyAwesomeTools\\彻底摆脱对CAD支持路径的依赖。部署时只需确保文件放在这个位置。前置检查在尝试加载前先检查目录和DLL文件是否存在并给出明确的提示包括弹窗alert和命令行提示用户体验更好。错误捕获使用vl-catch-all-apply包裹command “NETLOAD”可以捕获并处理加载过程中可能发生的异常例如缺少.NET运行时、DLL依赖项缺失、版本不兼容等。这是生产环境脚本必备的。版本感知通过(getvar “ACADVER”)获取CAD版本为未来可能出现的、针对不同CAD版本需要加载不同DLL的情况预留了接口。加载后验证注释部分展示了如何在加载成功后尝试执行一个DLL中的命令来验证功能是否正常。这是一个很好的自我诊断机制。4. 部署策略与安装包制作思路对于开发者来说让最终用户能一键安装你的工具才是终点。单纯的脚本和DLL文件需要用户手动拷贝和配置仍然不够友好。这里提供几种部署思路4.1 手动部署说明给懂技术的用户创建一个README.txt或部署说明文档包含以下步骤请将本文件夹内的所有文件LoadMyTools.lsp,MyAwesomeTools.dll等拷贝到一个永久目录例如D:\CADAddins\MyAwesomeTools\。打开AutoCAD。在CAD命令行输入(findfile “acad.lsp”)找到返回的路径。用记事本打开该路径下的acad.lsp文件如果不存在请创建。在文件末尾新起一行添加(load “D:/CADAddins/MyAwesomeTools/LoadMyTools.lsp”)。注意将路径修改为你实际存放的路径并使用正斜杠/或双反斜杠\\。保存文件重启AutoCAD。在命令行应能看到加载成功的提示。4.2 半自动部署脚本.BAT或VBS你可以编写一个简单的Windows批处理文件.bat或VBScript脚本在用户双击运行时自动完成文件拷贝和acad.lsp的修改。一个极简的.bat示例需要管理员权限echo off echo 正在安装 MyAwesomeTools for AutoCAD... set TOOL_DIRD:\CADAddins\MyAwesomeTools set LISP_LOADER%TOOL_DIR%\LoadMyTools.lsp REM 创建工具目录 if not exist “%TOOL_DIR%” mkdir “%TOOL_DIR%” REM 拷贝文件假设当前目录有文件 copy “MyAwesomeTools.dll” “%TOOL_DIR%\” copy “LoadMyTools.lsp” “%TOOL_DIR%\” REM 查找 acad.lsp 这里简化处理只找用户目录 set ACADLSP%APPDATA%\Autodesk\AutoCAD 2023\R24.2\chs\Support\acad.lsp REM 注意上面的路径需要根据用户实际的CAD版本和语言进行调整这很复杂。 echo 文件拷贝完成。 echo 请手动编辑您的 acad.lsp 文件在末尾添加以下一行 echo (load “%LISP_LOADER:\/%”) REM 注意路径中的反斜杠要替换为正斜杠 pause注意自动查找和修改acad.lsp非常棘手因为CAD版本、语言、用户配置名R24.2会变。上述批处理只是一个示意生产环境需要更复杂的逻辑来定位文件。4.3 专业安装程序推荐用于正式发布对于需要分发给大量用户的正式工具建议使用专业的安装程序制作工具如Inno Setup、Advanced Installer或WiX Toolset。它们可以智能检测AutoCAD安装通过读取注册表例如HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD来定位所有已安装的CAD版本及其支持路径。多版本支持为检测到的每一个CAD版本自动在其对应的用户支持目录下的acad.lsp中添加引导代码。文件管理将你的DLL、LSP等文件安装到程序目录如%ProgramFiles%\YourCompany\YourTool并在acad.lsp中使用绝对路径引用。提供卸载程序在卸载时能清理安装的文件并移除acad.lsp中添加的代码行。这是最可靠、最专业的部署方式虽然前期需要学习安装程序脚本的编写但一劳永逸。5. 常见问题排查与调试技巧即使脚本写得再完善在实际部署中也可能遇到各种问题。这里记录一些我踩过的坑和解决方法。5.1 问题CAD启动时没有反应命令行也没有任何输出。可能原因1acad.lsp引导路径错误或文件未执行。排查在CAD命令行输入(load “你的完整LSP路径”)看是否能手动加载并看到提示。如果手动加载成功说明LSP脚本本身没问题问题出在自动引导上。检查acad.lsp中(load …)语句的路径是否正确特别是斜杠方向和中文字符。技巧在acad.lsp的引导语句前后加上(princ “\n开始加载我的工具...”)和(princ “\n加载我的工具结束。”)重启CAD看命令行是否有这些输出可以判断acad.lsp是否被执行以及执行到哪一步。可能原因2LSP脚本存在语法错误导致加载失败。排查同样尝试手动load你的LSP文件CAD会给出具体的语法错误行号和信息。常见错误有括号不匹配、字符串引号未闭合、函数名拼写错误等。5.2 问题命令行提示“成功加载DLL路径”但自定义命令如MYTOOL无法使用。可能原因1DLL中的命令未正确注册。排查在CAD命令行输入NETLOAD手动加载一次你的DLL看是否有错误弹出。然后输入(dictsearch (namedobjdict) “ACAD_COMMANDDEFS”)或使用AutoCAD .NET API的方法列出命令检查你的命令是否在列表中。确保你的.NET代码中的CommandMethod特性设置正确且类库已成功编译。技巧在LSP脚本加载DLL成功后立刻尝试调用一个简单的命令如一个只打印“Hello”的命令可以快速验证DLL功能是否正常。可能原因2DLL依赖项缺失。排查这是.NET开发中最常见的问题。你的DLL可能依赖其他第三方库如Newtonsoft.Json或特定版本的.NET Framework运行时。使用像Dependencies原Dependency Walker或ILSpy这样的工具打开你的DLL查看其依赖。确保所有依赖的DLL都存在于同一目录或GAC全局程序集缓存中。解决将依赖的所有DLL文件通常是*.dll与你的主DLL放在同一个目录下。对于.NET Core/ .NET 5 的项目需要发布“独立部署”或确保目标机器有对应的运行时。5.3 问题加载时弹出错误对话框提示“.NET Framework初始化错误”或“无法加载程序集”。可能原因.NET Framework版本不兼容。分析你的DLL是用高版本的.NET如.NET 4.8编译的而用户机器上的CAD可能运行在较低版本的.NET Framework上老版本CAD如2014-2016可能基于.NET 4.0。解决在Visual Studio中将你的类库项目目标框架设置为与目标CAD版本兼容的版本。一个安全的做法是选择.NET Framework 4.0兼容性最好但要注意不能使用高版本才有的API。可以通过项目属性中的“目标框架”进行设置。5.4 问题在多台电脑或不同CAD版本上部署路径问题复杂。解决策略这就是为什么我强烈推荐使用绝对路径并在安装程序中处理路径问题。在LSP脚本中不要使用相对路径或依赖于findfile在复杂环境中的搜索。在安装阶段由安装程序计算出确定的工具安装路径如%ProgramFiles%\MyTools并将这个绝对路径写入到每个CAD版本对应的acad.lsp中。这是最稳健的方法。5.5 调试技巧启用LSP调试输出如果你完全看不到任何输出可以检查CAD是否关闭了LISP的打印信息。在命令行输入(setvar “NOMUTT” 0)这个系统变量控制是否抑制LISP的输入回显和函数结果打印。设为0表示允许打印有助于看到(princ)输出的信息。6. 扩展思考超越自动加载实现了基本的自动加载我们的工具已经很好用了。但还可以更进一步自动添加快捷键或工具栏在LSP脚本中DLL加载成功后可以继续用LISP代码修改CUIx文件或直接定义快捷键通过修改PGP文件将你的自定义命令绑定到熟悉的快捷键上或者动态创建一个工具栏。按需加载对于非常大的插件启动时加载可能会拖慢CAD启动速度。可以考虑实现“按需加载”即只在用户第一次使用某个功能时才触发DLL的加载。这可以通过在acad.lsp中定义一个“桩”命令来实现这个命令只做一件事加载真正的DLL然后执行真正的功能。版本更新与静默升级在LSP脚本中加入逻辑每次启动时检查服务器或指定位置是否有新版本的DLL并提示或自动更新。这需要更复杂的网络和文件操作逻辑。环境检测与配置在加载前用LSP检测系统环境如可用的内存、磁盘空间、是否安装了必要的第三方软件如某些数据库客户端如果不满足条件则给出友好提示并中止加载。通过LSP实现DLL的自动加载是CAD二次开发中连接稳定强大的.NET后端与灵活轻便的AutoCAD前端的一座关键桥梁。掌握它意味着你开发的工具从“可用的代码”变成了“好用的产品”。希望这篇详细的拆解能帮你绕过我当年踩过的那些坑顺利实现工具的自动化部署。

相关新闻

HDF5文件与h5py库:高效管理大规模结构化数据的Python实践

HDF5文件与h5py库:高效管理大规模结构化数据的Python实践

1. 从一次数据加载的“卡顿”说起:为什么我们需要H5文件?最近在做一个数据分析项目,处理一批天文观测数据。数据量不算特别大,单个CSV文件也就几个G,但当我用pandas.read_csv加载时,内存占用瞬间飙升&#…

2026/10/12 20:01:53 阅读更多 →
前言 - 在“过气”与“刚需”之间

前言 - 在“过气”与“刚需”之间

如果你或这篇教程是为了寻找一门炫酷的、能让你在程序员聚会上昂首挺胸的现代编程语言,那么我建议你立刻合上它,转身去学习其他主流语言。VBA(Visual Basic for Applications)太老了。老到它的第一个版本诞生于1993年,…

2026/10/12 20:02:25 阅读更多 →
Days 9 函数初学

Days 9 函数初学

一、为什么要学函数?刚学 C 语言的时候,所有代码全堆在main里,写重复功能要复制粘贴一大段,代码又乱又难改。函数就是用来解决这个问题的! 函数两大好处:代码复用:同一个功能只写一次&#xff0…

2026/10/9 12:38:52 阅读更多 →

最新新闻

ORB特征匹配结合GMS:OpenCV下网格运动统计剔除误匹配实践

ORB特征匹配结合GMS:OpenCV下网格运动统计剔除误匹配实践

简介:基于OpenCV 2.4.13的GMS内点筛选算法实践资源,面向计算机视觉、特征匹配等方向的学习者与开发者。资源将ORB特征检测与GMS自适应指导过滤策略结合,针对两视图匹配中容易产生大量误匹配的问题,利用局部一致性约束剔除错误对应…

2026/10/12 20:02:18 阅读更多 →
Java无参构造方法:对象初始化的隐形基石与框架依赖的枢纽

Java无参构造方法:对象初始化的隐形基石与框架依赖的枢纽

好些人写了好几年 Java,问起“无参构造方法有什么用”,答案就是“能 new 对象”。这个回答不算错,但远远不够。无参构造方法在 Java 里扮演的角色,远不止“实例化入口”这么简单——它是对象初始化链路的第一环,是继承…

2026/10/12 20:02:18 阅读更多 →
Android与Ubuntu基于Socket的实时视频传输实现与H.264解码实战

Android与Ubuntu基于Socket的实时视频传输实现与H.264解码实战

项目做成那天晚上,我盯着手机屏幕上跳动的画面愣了好一会儿:Android手机摄像头采集到的实时画面,经过H.264编码,通过Socket一路打进Ubuntu主机,解码后在电脑上流畅播放。整个过程没有USB线、没有第三方SDK,…

2026/10/12 20:01:17 阅读更多 →
一个人用AI做短视频量产:从口播到漫剧的内容工厂全流程复盘

一个人用AI做短视频量产:从口播到漫剧的内容工厂全流程复盘

这两年我明显感觉到,短视频圈子里的人分成了两拨:一拨还在熬夜想脚本、约拍摄、剪到凌晨三点;另一拨已经用AI把“写稿、出图、配音、剪辑”这一整套流水线跑成了半自动,一个人管三五个号,漫剧、数字人、口播、段子、绘…

2026/10/12 20:01:17 阅读更多 →
车道线虚线与实线语义分割:三类标注、模型选型与实车部署避坑指南

车道线虚线与实线语义分割:三类标注、模型选型与实车部署避坑指南

简介:本资源是面向自动驾驶感知算法研发者与计算机视觉初学者的车道线语义分割专用数据集,聚焦虚线、实线与背景三类目标的像素级标注,可直接用于U-Net、SwinUNet等主流分割模型的训练与验证。数据集已按标准划分:含1200张训练图像…

2026/10/12 20:01:17 阅读更多 →
Tailor:本地AI视频智能裁剪与生成优化工具深度解析

Tailor:本地AI视频智能裁剪与生成优化工具深度解析

简介:Tailor 是一款基于 AI 的视频智能裁剪、生成与优化一体化工具,面向视频创作者、自媒体运营者及入门学习者,覆盖人脸剪辑、语音剪辑、口播生成、字幕生成、背景替换和清晰度优化等高频需求,全项目共提供 10 种处理方法&#x…

2026/10/12 20:01:17 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →