|
发表于 2023-11-4 23:13:18
|
显示全部楼层
江苏省苏州市
.版本 2 .支持库 spec .子程序 OCR_识别文字, 文本型, 公开, 返回识别到的字符串文本 .参数 X1, 整数型, , x1 整形数:区域的左上X坐标 .参数 Y1, 整数型, , y1 整形数:区域的左上Y坐标 .参数 X2, 整数型, , x2 整形数:区域的右下X坐标 .参数 Y2, 整数型, , y2 整形数:区域的右下Y坐标 .参数 color_format_颜色格式串, 文本型, , :颜色色偏比如"9f2e3f-000000" .参数 相似度, 双精度小数型, , 0.1-1.0 .局部变量 指定边摸地址, 整数型, , , 4 .局部变量 指定边摸_X, 整数型, , , 8 .局部变量 指定边摸_Y, 整数型, , , 12 .局部变量 序号_2, 整数型, , , 16 .局部变量 查找X1, 整数型, , , 20 .局部变量 查找Y1, 整数型, , , 24 .局部变量 查找X2, 整数型, , , 28 .局部变量 查找Y2, 整数型, , , 32 .局部变量 临时查找X1, 整数型, , , 36 .局部变量 临时查找Y1, 整数型, , , 40 .局部变量 临时查找X2, 整数型, , , 44 .局部变量 临时查找Y2, 整数型, , , 48 .局部变量 欲查找文字数组, 文本型, , "0" .局部变量 二值化_图像, 字节集 .局部变量 图像宽度, 整数型 .局部变量 图像高度, 整数型 .局部变量 坐标存储内存OCR, 字节集 .局部变量 序号_1, 整数型 .局部变量 各类边摸统计字节集1, 字节集 .局部变量 各类边摸统计字节集2, 字节集 .局部变量 各类边摸统计字节集3, 字节集 .局部变量 各类边摸统计字节集4, 字节集 .局部变量 各类边摸统计字节集5, 字节集 .局部变量 各类边摸统计字节集6, 字节集 .局部变量 各类边摸统计字节集7, 字节集 .局部变量 各类边摸统计字节集8, 字节集 .局部变量 各类边摸统计字节集9, 字节集 .局部变量 各类边摸统计字节集10, 字节集 .局部变量 各类边摸统计字节集11, 字节集 .局部变量 存储坐标内存, 字节集 .局部变量 多点字节集, 字节集 .局部变量 点阵白点数量, 整数型 .局部变量 点阵序号, 整数型 .局部变量 获取边摸数量, 整数型 .局部变量 判断数量, 整数型 .局部变量 提取边摸数量, 整数型 .局部变量 边摸数量, 整数型 .局部变量 已存储坐标数量, 整数型 .局部变量 对比是否正确, 整数型 .局部变量 实际提取坐标字节集, 字节集 .局部变量 坐标排序_, 整数型 .局部变量 临时_intX, 整数型 .局部变量 临时_intY, 整数型 .局部变量 未比数据数量, 整数型 .局部变量 最后位置, 整数型 .局部变量 位置变量, 整数型 .局部变量 临时_intY_1, 整数型 .局部变量 临时_intY_2, 整数型 .局部变量 临时_intX_1, 整数型 .局部变量 临时_intX_2, 整数型 .局部变量 临时_点阵序号_1, 整数型 .局部变量 临时_点阵序号_2, 整数型 .局部变量 字节集地址, 整数型 .局部变量 临时_地址_1, 整数型 .局部变量 临时_地址_2, 整数型 .局部变量 总高度, 整数型 .局部变量 临时文本, 文本型 .局部变量 M, 整数型 .局部变量 原图像, 字节集 连续赋值 (0, 指定边摸地址, 指定边摸_X, 指定边摸_Y, 序号_2, 查找X1, 查找Y1, 查找X2, 查找Y2, 临时查找X1, 临时查找Y1, 临时查找X2, 临时查找Y2) .判断开始 (color_format_颜色格式串 = “”) 返回 (“”) .判断 (字库文件是否存在 = 假) 信息框 (“字库路径不正确 或 字库不存在 或 字库信息不正确,请先调用 设置字库路径 函数来定义字库的路径”, 0, “字库出现问题!Word library incorrect!”, ) 返回 (“”) .默认 .判断结束 .如果真 (X1 > X2) 交换变量 (X1, X2) .如果真结束 .如果真 (Y1 > Y2) 交换变量 (Y1, Y2) .如果真结束 原图像 = 窗口截图 (全局窗口句柄, X1, Y1, X2, Y2) 二值化_图像 = 二值化图像 (原图像, color_format_颜色格式串, 相似度) 图像宽度 = 取字节集数据 (取字节集中间 (二值化_图像, 19, 4), #整数型, ) 图像高度 = 取字节集数据 (取字节集中间 (二值化_图像, 23, 4), #整数型, ) 坐标存储内存OCR = 取空白字节集 (图像宽度 × 图像高度 × 8) 各类边摸统计字节集1 = 取空白字节集 (1 × 8) 各类边摸统计字节集2 = 取空白字节集 (3 × 8) 各类边摸统计字节集3 = 取空白字节集 (7 × 8) 各类边摸统计字节集4 = 取空白字节集 (15 × 8) 各类边摸统计字节集5 = 取空白字节集 (31 × 8) 各类边摸统计字节集6 = 取空白字节集 (63 × 8) 各类边摸统计字节集7 = 取空白字节集 (127 × 8) 各类边摸统计字节集8 = 取空白字节集 (255 × 8) 各类边摸统计字节集9 = 取空白字节集 (511 × 8) 各类边摸统计字节集10 = 取空白字节集 (1023 × 8) 各类边摸统计字节集11 = 取空白字节集 (2047 × 8) 获取边摸数量 = 分类边摸数量1 (二值化_图像, 各类边摸统计字节集1, 各类边摸统计字节集2, 各类边摸统计字节集3, 各类边摸统计字节集4, 各类边摸统计字节集5, 各类边摸统计字节集6, 各类边摸统计字节集7, 各类边摸统计字节集8, 各类边摸统计字节集9, 各类边摸统计字节集10, 各类边摸统计字节集11) 存储坐标内存 = 取空白字节集 (获取边摸数量 × 4) 判断数量 = 分配内存地址位置1 (存储坐标内存, 各类边摸统计字节集1, 各类边摸统计字节集2, 各类边摸统计字节集3, 各类边摸统计字节集4, 各类边摸统计字节集5, 各类边摸统计字节集6, 各类边摸统计字节集7, 各类边摸统计字节集8, 各类边摸统计字节集9, 各类边摸统计字节集10, 各类边摸统计字节集11) 提取边摸数量 = 提取边摸坐标1 (二值化_图像, 各类边摸统计字节集1, 各类边摸统计字节集2, 各类边摸统计字节集3, 各类边摸统计字节集4, 各类边摸统计字节集5, 各类边摸统计字节集6, 各类边摸统计字节集7, 各类边摸统计字节集8, 各类边摸统计字节集9, 各类边摸统计字节集10, 各类边摸统计字节集11) .变量循环首 (1, 取数组成员数 (点阵具体信息_), 1, 点阵序号) 多点字节集 = 取空白字节集 (点阵具体信息_ [点阵序号].点阵宽度 × 点阵具体信息_ [点阵序号].点阵高度 × 8) ' 申请内存 点阵白点数量 = 点阵转为多点 (点阵具体信息_ [点阵序号].点阵图像, 多点字节集, 取字节集长度 (多点字节集)) 多点字节集 = 取字节集左边 (多点字节集, 点阵白点数量 × 8) .判断开始 (点阵具体信息_ [点阵序号].点阵高度 = 1) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集1) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集1) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 2) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集2) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集2) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 3) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集3) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集3) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 4) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集4) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集4) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 5) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集5) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集5) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 6) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集6) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集6) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 7) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集7) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集7) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 8) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集8) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集8) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 9) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集9) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集9) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 10) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集10) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集10) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .判断 (点阵具体信息_ [点阵序号].点阵高度 = 11) 边摸数量 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集11) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8) 指定边摸地址 = 指针四字节到整数 (取变量数据地址 (各类边摸统计字节集11) + (点阵具体信息_ [点阵序号].点阵边摸编码 - 1) × 8 + 4) .默认 到循环尾 () .判断结束 临时查找X1 = 点阵具体信息_ [点阵序号].左偏移 临时查找X2 = 点阵具体信息_ [点阵序号].点阵宽度 - 1 + 点阵具体信息_ [点阵序号].右偏移 临时查找Y2 = 点阵具体信息_ [点阵序号].点阵高度 - 1 + 点阵具体信息_ [点阵序号].向下偏移 .变量循环首 (0, 边摸数量 - 1, 1, 序号_2) 置入代码 ({ 139, 93, 240, 107, 219, 4, 3, 93, 252, 184, 0, 0, 0, 0, 102, 139, 3, 137, 69, 248, 131, 195, 2, 184, 0, 0, 0, 0, 102, 139, 3, 137, 69, 244, 139, 69, 248, 43, 69, 220, 137, 69, 236, 139, 69, 244, 137, 69, 232, 139, 69, 248, 3, 69, 212, 137, 69, 228, 139, 69, 244, 3, 69, 208, 137, 69, 224 }) .如果 (查找X1 ≥ 0 且 查找Y1 ≥ 0 且 查找X2 < 图像宽度 且 查找Y2 < 图像高度 且 查找X2 ≥ 0 且 查找Y2 ≥ 0 且 查找X1 < 图像宽度 且 查找Y1 < 图像高度) .否则 到循环尾 () .如果结束 对比是否正确 = 边摸坐标对比 (二值化_图像, 多点字节集, 坐标存储内存OCR, 已存储坐标数量, 点阵白点数量, 指定边摸_X, 指定边摸_Y, 查找X1, 查找Y1, 查找X2, 查找Y2, 点阵具体信息_ [点阵序号].点阵白点数量, 点阵序号) .变量循环尾 () .变量循环尾 () .如果真 (已存储坐标数量 = 0) 返回 (“”) .如果真结束 实际提取坐标字节集 = 取字节集左边 (坐标存储内存OCR, 已存储坐标数量 × 8) 字节集地址 = 取变量数据地址 (实际提取坐标字节集) ' 目前先采用 冒泡排序算法需要排列两次,千分之一的可能 会有排列乱序,等有时间了换成 高通排序算法 排列一次 ' -----------------------------------------------------------------------------------第一次 自定义字体坐标排列 未比数据数量 = 已存储坐标数量 ' 第一行排序比较所有数 .判断循环首 (未比数据数量 > 0) 最后位置 = 0 .变量循环首 (1, 未比数据数量 - 1, 1, 位置变量) 临时_地址_1 = 字节集地址 + (位置变量 - 1) × 8 临时_intX_1 = 取字节集数据 (实际提取坐标字节集, #短整数型, (位置变量 - 1) × 8 + 1) 临时_intY_1 = 取字节集数据 (实际提取坐标字节集, #短整数型, (位置变量 - 1) × 8 + 1 + 2) 临时_点阵序号_1 = 取字节集数据 (实际提取坐标字节集, #整数型, (位置变量 - 1) × 8 + 1 + 2 + 2) 临时_地址_2 = 字节集地址 + 位置变量 × 8 临时_intX_2 = 取字节集数据 (实际提取坐标字节集, #短整数型, 位置变量 × 8 + 1) 临时_intY_2 = 取字节集数据 (实际提取坐标字节集, #短整数型, 位置变量 × 8 + 1 + 2) 临时_点阵序号_2 = 取字节集数据 (实际提取坐标字节集, #整数型, 位置变量 × 8 + 1 + 2 + 2) .如果真 (临时_intY_1 > 临时_intY_2) 双字节数据写到地址 (临时_地址_1, 临时_intX_2) 双字节数据写到地址 (临时_地址_1 + 2, 临时_intY_2) 四字节数据写到地址 (临时_地址_1 + 4, 临时_点阵序号_2) 双字节数据写到地址 (临时_地址_2, 临时_intX_1) 双字节数据写到地址 (临时_地址_2 + 2, 临时_intY_1) 四字节数据写到地址 (临时_地址_2 + 4, 临时_点阵序号_1) 最后位置 = 位置变量 .如果真结束 .变量循环尾 () 未比数据数量 = 最后位置 ' 下一行排序从第一个数开始到上次排序的最后被改变的位数 .判断循环尾 () ' -----------------------------------------------------------------------------------第二次 自定义字体坐标排列 未比数据数量 = 已存储坐标数量 ' 第一行排序比较所有数 .判断循环首 (未比数据数量 > 0) 最后位置 = 0 .变量循环首 (1, 未比数据数量 - 1, 1, 位置变量) 临时_地址_1 = 字节集地址 + (位置变量 - 1) × 8 临时_intX_1 = 取字节集数据 (实际提取坐标字节集, #短整数型, (位置变量 - 1) × 8 + 1) 临时_intY_1 = 取字节集数据 (实际提取坐标字节集, #短整数型, (位置变量 - 1) × 8 + 1 + 2) 临时_点阵序号_1 = 取字节集数据 (实际提取坐标字节集, #整数型, (位置变量 - 1) × 8 + 1 + 2 + 2) 临时_地址_2 = 字节集地址 + 位置变量 × 8 临时_intX_2 = 取字节集数据 (实际提取坐标字节集, #短整数型, 位置变量 × 8 + 1) 临时_intY_2 = 取字节集数据 (实际提取坐标字节集, #短整数型, 位置变量 × 8 + 1 + 2) 临时_点阵序号_2 = 取字节集数据 (实际提取坐标字节集, #整数型, 位置变量 × 8 + 1 + 2 + 2) .如果真 (临时_intY_1 ≤ 临时_intY_2) .如果真 (临时_intY_1 + 点阵具体信息_ [临时_点阵序号_1].点阵高度 + 点阵具体信息_ [临时_点阵序号_1].向下偏移 > 临时_intY_2) .如果真 (临时_intX_1 > 临时_intX_2) 双字节数据写到地址 (临时_地址_1, 临时_intX_2) 双字节数据写到地址 (临时_地址_1 + 2, 临时_intY_2) 四字节数据写到地址 (临时_地址_1 + 4, 临时_点阵序号_2) 双字节数据写到地址 (临时_地址_2, 临时_intX_1) 双字节数据写到地址 (临时_地址_2 + 2, 临时_intY_1) 四字节数据写到地址 (临时_地址_2 + 4, 临时_点阵序号_1) 最后位置 = 位置变量 .如果真结束 .如果真结束 .如果真结束 .变量循环尾 () 未比数据数量 = 最后位置 ' 下一行排序从第一个数开始到上次排序的最后被改变的位数 .判断循环尾 () 临时文本 = “” .变量循环首 (0, 已存储坐标数量 - 1, 1, 坐标排序_) 临时_intX_2 = 取字节集数据 (实际提取坐标字节集, #短整数型, 坐标排序_ × 8 + 1) 临时_intY_2 = 取字节集数据 (实际提取坐标字节集, #短整数型, 坐标排序_ × 8 + 1 + 2) 临时_点阵序号_2 = 取字节集数据 (实际提取坐标字节集, #整数型, 坐标排序_ × 8 + 1 + 2 + 2) 临时文本 = 临时文本 + 点阵具体信息_ [临时_点阵序号_2].点阵名称文本 .变量循环尾 () 返回 (临时文本) |
|