本帖最后由 137240129 于 2024-12-22 17:25 编辑
无意间看到一个大佬发的贴子,
hk缺口计算,纯算法,不是yolo训练!不是ddddocr!不是API!_精易论坛
当看完这个贴子的时候,就感觉这个大佬玩的特别花,识别缺口坐标还有这种骚操作,于是就下载下来研究了下
于是就在他源码的基础上改了改,改成二维数组的识别,比他的更精简,
|
验证码_识别缺口x坐标 | 文本型 | | |
_滑块_bin | 字节集 | | | | _底图_bin | 字节集 | | | | 底图y坐标 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 滑块_位图处理对象 | 类_位图处理 | | | 底图_位图处理对象 | 类_位图处理 | | | x | 整数型 | | | y | 整数型 | | | 点色 | 整数型 | | | y1 | 整数型 | | | x1 | 整数型 | | | 相似数 | 整数型 | | | 数组排序 | 文本型 | | 0 | 滑块_bin | 字节集 | | | 底图_bin | 字节集 | | | 滑块_位图操作对象 | 类_位图操作 | | | 底图_位图操作对象 | 类_位图操作 | | | 滑块_宽 | 整数型 | | | 滑块_高 | 整数型 | | | 底图_宽 | 整数型 | | | 底图_高 | 整数型 | | | 底图_二维 | 整数型 | | 1,1 | 滑块_二维 | 整数型 | | 1,1 | 临时 | 整数型 | | |
滑块_宽 = 图片_取宽度 (_滑块_bin )滑块_高 = 图片_取高度 (_滑块_bin )底图_宽 = 图片_取宽度 (_底图_bin )底图_高 = 图片_取高度 (_底图_bin )重定义数组 (底图_二维, 假, 底图_高, 底图_宽 )重定义数组 (滑块_二维, 假, 滑块_高, 滑块_宽 )图片_转换 (_滑块_bin, 1, , 滑块_bin, )图片_转换 (_底图_bin, 1, , 底图_bin, )滑块_bin = 滑块_位图处理对象. 位图二值化 (滑块_bin, 1 )底图_bin = 底图_位图处理对象. 位图二值化 (底图_bin, 113 )图片框3.图片 = 底图_bin 图片框4.图片 = 滑块_bin 滑块_位图操作对象. 从数据创建 (滑块_bin )底图_位图操作对象. 从数据创建 (底图_bin ) 计次循环首 (底图_高, y ) 计次循环首 (底图_宽, x )  点色 = 底图_位图操作对象. 取某点颜色 (x, y )  底图_二维 [y ] [x ] = 选择 (点色 > 1, 0, 1 ) 计次循环尾 () 计次循环尾 () 计次循环首 (滑块_高, y ) 临时 = 0  计次循环首 (滑块_宽, x )  点色 = 滑块_位图操作对象. 取某点颜色 (x, y )  临时 = 临时 + 选择 (点色 > 1, 1, 0 ) 计次循环尾 () 如果真 (临时 > 0 ) 跳出循环 ()  计次循环尾 () 变量循环首 (y, 滑块_高, 1, y1 ) 计次循环首 (滑块_宽, x )  点色 = 滑块_位图操作对象. 取某点颜色 (x, y1 )  滑块_二维 [y1 - y + 1 ] [x ] = 选择 (点色 > 1, 1, 0 ) 计次循环尾 () 变量循环尾 () 计次循环首 (底图_宽, x ) 如果真 (x + 滑块_宽 > 底图_宽 ) 跳出循环 () 相似数 = 0 计次循环首 (滑块_高, y1 )  计次循环首 (滑块_宽, x1 )   如果真 (底图_二维 [底图y坐标 + y1 - 1 ] [x + x1 - 1 ] = 滑块_二维 [y1 ] [x1 ] 且 滑块_二维 [y1 ] [x1 ] = 1 )    相似数 = 相似数 + 1       计次循环尾 () 计次循环尾 () 加入成员 (数组排序, 到文本 (x ) + “,” + 到文本 (相似数 )) 计次循环尾 ()文本数组排序 (数组排序, “,”, 1, 真)返回 (文本_取左边 (数组排序 [1 ], “,”)) |
文本数组排序 | | | |
数组 | 文本型 | | | | 分割符号 | 文本型 | | | | 排序的次数 | 整数型 | | | | 从大到小 | 逻辑型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 数组排序结果 | 文本型 | | 0 | 分割数组 | 文本型 | | 0 | h | 整数型 | | | 要找的次数 | 文本型 | | | 要找的位置 | 整数型 | | | k | 整数型 | | | 当前次数 | 文本型 | | |
计次循环首 (排序的次数, h ) 分割数组 = 分割文本 (数组 [1 ], 分割符号, ) 要找的次数 = 分割数组 [取数组成员数 (分割数组 )] 要找的位置 = 1  计次循环首 (取数组成员数 (数组 ), k )  分割数组 = 分割文本 (数组 [k ], 分割符号, )  当前次数 = 分割数组 [取数组成员数 (分割数组 )]  如果 (从大到小 = 真)   如果真 (到数值 (要找的次数 ) < 到数值 (当前次数 ))     要找的次数 = 当前次数     要找的位置 = k             如果真 (到数值 (要找的次数 ) > 到数值 (当前次数 ))    要找的次数 = 当前次数    要找的位置 = k        计次循环尾 () 加入成员 (数组排序结果, 数组 [要找的位置 ]) 删除成员 (数组, 要找的位置, ) 计次循环尾 ()数组 = 数组排序结果
编译后识别速度基本在200毫秒左右,水平有限,比他的也快不了多少
demo.e
(685.3 KB, 下载次数: 123, 售价: 2 枚 精币)
|