脚本构建到一半,不小心点到退出登录了/软件被关闭了/断网10分钟了,点提交提示我是否离开页面怎么办?怎么保存?
- 离开页面提示是因为登录身份丢失要跳回登录界面,但 kmscript 判定只要有未保存的更改都会提示
- 用户在KMS构建时 kmscript 是有心跳维持,页面闲置很长时间也不会丢失身份
- 当意外发生时则重新登录即可,但当前页面不能动(即提示时点取消)
- 右击退出登录选新窗口打开,在该窗口进行登录则KMS构建也会拥有身份,此时点保存即可
版本怎么看,必须更新么,新版能兼容旧版脚本么?
- 版本在“W3C配置”有,分为软件版本和引擎版本,分属不同的项目组:
- 软件版本为KMS构建、界面等交互组件版本,新旧软件版本不会影响KMSZ运行,但会影响锁、钥匙、主从机等操作,也会影响产生的各种反应、提示、语言等等。
- 官方网站所描述的内容均以官方最新版本为准,因此旧版本可能不一样,因此建议及时更新。
- 引擎版本为KMSZ解析和运行引擎版本,此版本号不互相兼容,任意函数方法进行了变动(包括新增、参数变动等)都会改变这个版本号。
- 通常情况下新版引擎会在启动时兼容性升级被运行的旧版脚本;但旧版引擎不能运行新版脚本,因此引擎版本变动必须跟随。
- 少数情况下某方法已弃用或同名参数已经过大量变化而无法兼容性升级旧脚本将抛出例如“script version 202031:202034”错误,表示脚本编译时的引擎版本为 202031 当前软件的引擎版本为 202034 且无法进行兼容性升级。这种情况需要原作者将 kms 重新编译发布,否则带锁旧版本可能会被云方法服务器拒绝而抛出 -1229 错误。
如果重新编译后 kmsz 仍然无法运行,那么可能是个罕见的革新改动,需要将所有在版本日志里列出的有关改动方法逐一更新,即编辑 kms 找到用到该方法的步骤,点击它以加载步骤内容,再点击提交步骤即可;重复这个过程直到全部涉及的步骤都更新过,保存再发布即可。
最安全的方法是将 kms 全部步骤都更新一次,即点开每一个模块每一个步骤,在每一个步骤下方点击提交步骤以新参数结构提交,然后保存发布。
- 当旧版本 KMS/KMSZ 被升级至新版本时,默认值变动的参数不会跟随仍然沿用之前的值。但新增的参数会取其默认值进行兼容。
- 若新版本带有仅有商业影响的方法,会预告并根据影响进行延迟上线(上线后可见)。
(针对程序员)KMScript 怎么做到流程中的与或非判断?
- kms 有成功与失败跳转,意味着你可以跳转到特定步骤将某变量置1或加1,然后再跳回流程下一步。
- 在流程下一步进行这个变量的判断,例如是否=1
- 与示例如下:
- 保存变量$A 值为 0,成功则继续,失败则中止
- 匹配图片1,成功则继续,失败则跳转到步骤4
- 变量表达式$A 值为 $A+1,成功则继续,失败则中止
- 匹配图片2,成功则继续,失败则跳转到步骤6
- 变量表达式 $A 值为 $A+1,成功则继续,失败则中止
- 变量检查$A 条件为 >1 (也可以 =1 或 =2 或 =3)依据其成功或失败跳转到特定步骤
- >1 即 =2 即匹配图片1和2都成功
- 或示例即将“与示例”的“变量检查”的 >1 改成 >0 或 =1
- >0 即匹配图片1或2任一或全部成功,=1 则表示只成功一个
- 非示例即将“与示例”的“变量检查”的 >1 改成 !1 或 =0
- =0 即匹配图片1和2都没有成功
(针对程序员)KMScript 怎么做到流程中的for 循环?
- 借用变量检查可以求取值是否为0,循环中对变量-1即可。示例如下:
for (int A=5; A>0; A--) {
循环内步骤..
}
特定步骤- 保存变量$A 值为 5,成功则继续,失败则中止
- 变量检查$A 条件为 >0,成功则继续,失败则跳转到特定步骤
- 循环内步骤..
- 变量表达式$A 值为 $A-1,成功则跳转到步骤2,失败则中止
- 对于遍历变量数组,假设“用户脚本变量”(或其它坐标、方块型变量)值为 [11,23,46,57],示例如下:
int KEY_1013_SCRIPT_OPTIONS[] = {11,23,46,57};
int sz = 4;
for (int A=0, A
循环内步骤
}
特定步骤- 保存变量 $A 值为 0,成功则继续,失败则中止
- 变量检查 $A 条件为 < 和 $KEY_1013_SCRIPT_OPTIONS,成功则结束循环跳转到特定步骤,失败则继续
- 根据脚本变量的数组型约定,当一个数组未提供索引号则得到的是其长度,因此 $KEY_1013_SCRIPT_OPTIONS 得到的是 4,即 $A < 4
- 循环内步骤.. 此处可使用 $KEY_1013_SCRIPT_OPTIONS[$A] 即为遍历到的当前值(例如 $A 为0时此值是11)
- 变量表达式 $A 值为 $A+1,成功则跳转到步骤2,失败则中止
(针对程序员)KMScript 怎么做到子程序?
- KMScript 提供了CPU内部逻辑门一样灵活的子程序流程,即“节点设置”“节点返回”“节点移除”
- 节点设置为当前步骤设置一个节点标签。通常它的成功设置为跳转到子程序的入口步骤。
- 节点返回为返回到最后一次设置的那个节点标签,移除该标签并继续其下一个步骤。通常它的成功保持为继续运行即可,如果没有节点则触发失败。
- 节点标签可以同时存在多个(后进先出队列),返回时始终返回最后一个,此机制可以保证多次返回能够追溯回最早的那个节点标签。
- 节点移除为移除特定个数的节点标签,在子程序中发现意外希望破除已设置的那些节点而直接进入特定步骤则可用此法移除掉特定几个节点。
- 例如主程序模块 m1 和 子程序模块 sub1,希望在 m1 里多次调用 sub1(或设置不同变量在 sub1 根据改变量不同进行特定处理)
- 用“节点设置”方法在当前步骤(m1)设置一个节点,将成功设为跳转到特定子程序入口(sub1模块特定步骤)
- 在sub1模块步骤流程处理完所需事物后,最后一个步骤用“节点返回”会返回到最后一个节点(m1)并移除该节点然后继续执行其下一步骤;即等同一个子程序。
- 在其它步骤(m2)现在也可以设置一个节点,跳转到 sub1 它的“节点返回”现在会返回到 m2 的下一步,这样即谁都可以调用 sub1
- 在 sub1 里仍然可以“节点设置”并继续跳转到 sub2,在 sub2的“节点返回”一样会返回到 sub1 的下一步(因为最后一个节点是sub1设置的);然后 sub1 再次“节点返回”又回到 m1(因为sub1节点在之前sub2返回后被移除,现在只剩 m1 节点了)
- 即 m1 > sub1 > sub2 返回时相反即 sub2 > sub1 > m1
- 如此可以无限嵌套实现与子程序一样的效果
- 在 sub2 里发现问题了,不希望返回到 sub1 也不希望返回到 m1,那么可以用“节点移除”以2参数移除最后2个节点,并直接跳转到特定步骤,即打破子程序一定要返回的规则而直接进入其它步骤。
- 也可以只移除一个节点从sub2 直接返回到 m1 而跳过 sub1
- sub1模块也可以没有“节点返回”直到下一个或多个模块的“节点返回”为止
- 也就是说,节点是子程序的改进版,能够从外部跳入任意一个步骤,也能够不返回或返回到任意多层上次的调用。
时间怎么获得,怎么让一段脚本30秒才运行一次?
- 在首个步骤使用“保存变量”初始化一个变量 $NEXT 其值为 0
- 因为 $NEXT 将用于“变量表达式”该函数是严格函数,在发现表达式中任意变量不存在则会强制抛错
- 使用“变量表达式”设置一个变量 $NOW 其表达式为 ms(0)
- 现在有了 $NOW 变量,其值是当前总毫秒数,不受用户时区影响
- 使用“变量检查”其读取的变量为 $NOW 条件为 > 变量值为 $NEXT
- 设置成功为继续运行
- 设置失败为跳转到返回节点(见上方关于“子程序”一节)或跳转到其它步骤或等待1000毫秒,因为未到30秒周期
- 完成30秒一次的若干步骤
- 使用“变量表达式”更新变量 $NEXT 其表达式为 $NOW+30000
- 此时 $NEXT 为 $NOW + 30000 毫秒即步骤2(30秒任务之前)的 30 秒之后
- 也可以将表达式改为 ms(30000) 将 $NEXT 置为当前总毫秒数 + 30000,即步骤5(30秒任务之后)的 30 秒之后
- 使用“等待”0秒设一个空步骤,并将成功设为跳转到第2步 以形成循环
- 现在从第2步开始的子程序或模块可以被嵌入到主循环
- 因为第3步的判断确保了第4步及之后至每30秒才运行一次
- 因为每次30秒任务完成后均会更新 $NEXT 为30秒之后,因此未到30秒步骤3是失败
- 要获取时间还有变量表达式 y(0) 为年份、d(0) 为当年的第几天、h(0) 当前的24小时数、m(0) 当前的分钟数等等
- 除非单次精确时间触发否则不推荐使用这类时间表达式,因为它受用户时区变化,时区值用户可在“W3C配置”中更改
如何检查一个变量已设置?
- 例多人开发时其它模块已设置变量 $A 或用户在脚本变量已设置变量 $A
- 如果 $A 是字符串
- 使用“字符串提取”方法提取其第一个字,如果失败则说明该变量不存在或为空
- 如果 $A 是数值型
- 使用“变量检查”检查其 >-1,如果为0或更大值则成功,否则(包括未设置该变量)失败
- 如果 $A 是图像、数组或D2模型组类型则同上数值型,因为“数组型访问而未提供索引,则得到其长度”具体参见“kmsz 脚本变量”
键盘控制模块的按键名称支持哪一些?
- “按下按键”、“按键模拟”、“释放按键”支持常用键名称如下(大小写任意)
- BACKSPACE
- TAB
- ENTER
- CAPSLOCK
- ESC
- SPACE
- F1 ... F12
- NUMLOCK
- NUM0 ... NUM9
- PRTSC
- SCRLK
- PAUSE
- INSERT、DELETE
- HOME、 END
- PAGEUP、PAGEDOWN
- LEFT、RIGHT、UP、DOWN
- CTRL、SHIFT、ALT
WIN- 其它如 123[]/. 等等直接输入字符
- “输入多个字符”支持组合键但不支持以上名称,例如 SPACE 会被当成 5个字而不是按键
- 除了此方法其它函数均不支持组合键,例如 @ 需要按下 SHIFT 再按下 2 再放开 2 再放开 SHIFT
- 除了此方法其它函数均只能指定一个键,要产生多个按键信号需要多个相应函数
- 键名称 CTRL、SHIFT、ALT 不能指定左右,默认固定为左边按键
保存图片等方法要保存的文件路径应该填什么目录?填了文件名发布时或者运行时访问报错?
- KMScript 在运行时无法写入运行目录外的文件,例如填写 d:\1.png 会报错。
- 可以填写运行目录的相对路径,例如 pub/1.png,但该文件仅用于单向跟踪调试,在 kms 中不能使用它,假设“匹配图片”使用该路径那么在发布时会报文件不存在错,因为该文件会被认定为资源而尝试将该文件打包。
- 注意,KMScript 采用网络地址机制,因为您的脚本可能发布给其它平台运行,因此不论是否 Windows 平台,目录均以 / 分隔而不是 \
- 如果需要保存图片给后续步骤的其它匹配方法使用那么应当使用变量,即“保存的文件”填入一个不存在的新变量强制保存成变量而非文件,例如$FILE1,在其它匹配方法则可以使用这个变量。
- 如果“保存的文件”填入的一个已经存在的变量,那么会被认定为保存为文件,文件名即为该变量的值。
- 举例来讲
- 将当前图像源的 50,50 位置裁剪出 100,100 的区域保存成为 pub/1.png 文件,则
- “读取的变量” 保持空
- 区域分别填写 50,50,100,100
- “保存的文件”填入 pub/1.png
- 将当前图像源的 50,50 位置裁剪出 100,100 保存为 $FILE1 图像变量,则
- “读取的变量” 保持空
- 区域分别填写 50,50,100,100
- “保存的文件”填入 $FILE1
- 将一个图像变量 $FILE1 整个区域保存成为 pub/1.png 文件,则
- “读取的变量”填入 $FILE1
- 区域均保持默认值 0
- “保存的文件”填入 pub/1.png
- 之前步骤从未设置过变量 $FILE2,现将一个图像变量 $FILE1 整个区域保存成图像变量 $FILE2,则
- “读取的变量”填入 $FILE1
- 区域均保持默认值 0
- “保存的文件”填入 $FILE2
- 之前步骤设置了变量 $FILE2 是一个图像变量,现将一个图像变量 $FILE1 整个区域覆盖到该变量,则
- 步骤同上,由于 $FILE2 是一个图像变量而非一个文件路径因而会更新它
- 之前步骤设置了变量 $FILE3 值为 pub/1.png,现将一个图像变量 $FILE1 整个区域保存成文件(pub/1.png),则
- “读取的变量”填入 $FILE1
- 区域均保持默认值 0
- “保存的文件”填入 $FILE3
某些图片匹配方法,之前图片有问题,改过之后运行仍然失败,可我确定新图是可以匹配到的,为什么?
- 比如匹配方法A,其文件参数为 pub/1.png
- 发布且运行后,修改该文件并不会影响 kmsz,因为发布 kmsz 时相关文件已作为资源被被打包到 kmsz,因此需要重新发布以更新该文件。
多个图像源、脚本复用、信号引脚问题
- 当一套脚本的功能为针对一个图像源进行处理,且拥有剩余计算能力时,可以复制并启动另外一份 kmscript 处理另一个图像源的事务,是否有更高效的方法?
- 在 kmscript 中有关图像的函数均有一个参数叫“信号引脚”,此参数在 kmscript 引擎中有指定多个图像源时可以经由引脚参数取得不同的图像
- 在复用一套脚本时,则可以改变这个引脚参数重新调用一次脚本处理模块实现同一套脚本的复用而无需维持多个 kmscript 进程
- 在多眼视觉函数中,对图像的取模可经由不同的“信号引脚”取得不同视角的图像用于计算得出结果而不必维持多个 kmscript 进程
- kmscript 多个图像引擎可以不相同,例如电脑屏幕定义为引脚1,无人飞机上的高空摄像头定义为引脚2,机器人肩部摄像头定义为引脚3,机器人头部摄像头定义为引脚4
- 此多个图像源可在 kmscript 中实现立体计算,即可得出超过人类的分析能力
例如“匹配图片”有一个“最小间隔时间”是干什么用的?
- 有最小间隔时间的多数方法是允许循环执行的,按此间隔进行循环重复执行直到达成结果目标为止。
- 例如匹配图片1,将成功改成跳转到步骤n,失败改为循环执行。则此方法会按照该间隔一直重复直到匹配成功然后跳转到步骤n。
- 如果目标过程非常短,也应当设置很短的间隔以避免错过该过程。
- 如果最大间隔时间大于0,则只会重复直到该时间后强制失败并进入下一步,通常其下一步为中止或者执行其它修复然后跳回再次匹配图片。
- 例如模块A的步骤B“移动侦测”可设置“最大间隔时间”为 60000 即60秒,成功则跳转到模块X的步骤Y,失败则循环
- 在步骤B的下一步则可设置为一些调整操作,因为到达这一步骤表示未侦测到目标且到达60秒限制时间
- 在步骤Y可以设置一些识别内容,因为到达则一步骤则说明侦测到目标
- 信号发生器也有此类参数它同样表示的是循环信号发生的间隔。例如“按键模拟”表示对此重复产生按键的信号的随机间隔最小值,其最大间隔时间表示随机间隔的最大值。
“查找图片”是左上角匹配吗?我想要右下角怎么办?
- 例如查找图片1,成功得出变量 $A
- 类似方法得出的变量始终是左上角坐标
- 该变量为方块型变量
- 利用“变量表达式”转换为右下角坐标
- 变量 $X 其表达式为 $A[0] + $A[2]
- 变量 $Y 其表达式为 $A[1] + $A[3]
- 此时 $X 和 $Y 即为右下角坐标
结果类型中的第一个、最后一个、散落点、全体中心点、聚集中心点、中心最近、中心最远等等分别什么意思?
- 以农场投放药物导弹为例
- 最上方、最下方、最左方、最右方、最小尺寸、最大尺寸,顾名思义,即所有找到的目标中最符合的一个。
- 第一个、最后一个,首先目标的定义协议为从左到右后从上到下的排列目标,其中的第一或最后一个。
- 全体中心点(b),顾名思义找到的所有目标的中心点,它不是原始区域的中心(a)而是找到的所有目标的中心点,如果找到的目标全在右下那么中心点就在右下。表示该点为半径扩展可以最快覆盖全部目标。
如果爆炸范围很大,那么取此点保证最大面积覆盖。 - 重力中心点(d),设所有目标相同重量按其聚集进行重力衍生,求出重力中心点(重心)。相对于全体中心点它能够因单位面积内聚集数量进行偏移。
如果爆炸范围不确定,那么取此点保证尽可能最多覆盖。 - 聚集中心点(c),找到的目标中有一部分是聚集在一起,一部分散落的或者单独的。其中最多目标聚集的那个最小区域的中心点即聚集中心点。
如果爆炸范围有限确定,那么取此点可命中最多目标。 - 散落点(e),与聚集中心点相反,尽可能的找出其身边最少其它目标的单独目标。
如果希望狙击命中,那么取此点可确保波及最少目标。 - 聚集目标(f),与散落点相反的目标,表示目标周围有最多其它目标聚集。
- 中心最近、中心最远,这个中心与全体中心点、聚集中心点均不同,它表示原始区域的中心(a),离它最近或最远的一个目标。
在颜色相关操作例如文字识别功能结果不理想,多是颜色取值的问题,如何调试?
- 例如文字识别是对颜色进行提取之后送入笔划分区然后到笔划匹配,排除字体差异很大的情况,如果颜色提取许多无关像素会导致后续操作都很大失误。
- 要截获颜色提取步骤到底取值对不对,应当以相同参数调用“查找颜色”方法并填写一个图像变量(此图像可以在其它任意需要图像文件的地方输入变量名代替文件名,例如提取了某人的头部特征即可以此法在其它图像中查找他/她),然后在“保存图片”输入该变量作为图像源将该图像保存成文件,然后运行一次核对该图像文件是否预期。
- 关于颜色值,还应当注意图片的透明度,在半透明的图像找特定颜色可能其值会有不同。颜色值支持以下几种定义:
- BBCCDD 即 RGB888,红绿蓝三原色
- AABBCCDD 即 ARGB8888,首8位为透明度
- RGB, 187, 204, 221
- ARGB, 170, 187, 204, 221 其 Alpha 通道在前
- RGBA, 187, 204, 221, 170 其 Alpha 通道在后
- HSV, 210, 15.4, 86.7
在文字/声音识别等方法,在第一次很卡,后几次操作则不卡,如何避免这个不能精确掌控时长的卡顿?
- 在有库文件的识别中,会先加载库文件到内存并定义为可选保留的缓存,如果很大例如中文字库会需要一定的时间,但通常只需要一次,要避免这种情况应当在第一个模块添加一个步骤进行一次识别,无论成功失败都继续运行,此后的识别除非内存不足否则都不再需要加载库文件。
- 内存不足时仍然会重新加载的解释:kmscript 有一套卸载方法在需要内存时会清除掉比较占用内存的缓存并在需要时重新加载,在内存足够时这些通常都不会被卸载,有关内存可在“设备信息”中的 VM Memory 了解。
音源定位的2/4/6声道分别对应什么方向?
- 其声道从声音源读取按顺序的声道数为
- 2声道则左右
- 4声道则增加前后
- 6声道则增加上下。
- 以此声道数为例,每2个声道有1维,因此6声道结果值有3维。
- 变量可取得音量值如 $位置[0] 为左右 和 $位置[1] 为前后 还有 $位置[2] 为上下。
- 音量值正负指示其远离中心的方向和距离,负数表示左/前/上,正数表示右/后/下。
- 例如 $位置[0] <0并且 $位置[1] <0 并且 $位置[2]<0 则表示在左前方偏上 。
- 数值与0差距越大表示音量越大,不考虑环境吸收则越小越远。
POP3输入不能定义过滤哪些邮件才有效?骨骼配置:accordion
- 此方法为高度匿名性数据穿透,接收到的参数其来源具有很高的匿名性,这是kmscript不提倡的,因此协议定义为发件人为邮箱账号名自己的邮件,其他人发送的邮件均会被忽略。
- 即需要邮箱账号自己给自己发一封邮件,POP3协议该邮件接收后会移除,新的数据仍然需要重新发件。
- 注意,带有此方法发布的 kmsz 很可能不能通过脚本市场的安全性查验。