步骤1 设计灵感
本人因辅修信息加密解密系统,这段时间对航海旗语比较感兴趣。因此准备利用旗语相关信息来做个作品。
旗语(英语:Flag semaphore),一种利用手旗或旗帜传递信号的沟通方式,可分单旗和双旗等两种,又称为“手旗信号”或“手旗通信”,距离较长时,借助双筒望远镜或望远镜,以延伸目视距离。
因为涉及到视觉识别的内容,用Mind+的AI图像识别正好能够满足要求。但在设计过程中,发现如果用人体分析的话,需要全身动静比较大,再加上本人比较怕生,不想露脸。所以换种方式,用手势识别的方式来进行旗语系统的加密算法。
在Mind+提供的网络服务——AI图像识别功能里,提供了手势的数字识别。结合旗语所要表达的文字信息,准备用汉字区位码来进行信息解析。
区位码 :
1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是国内所有汉字系统的统一标准。国标码是一个四位十六进制数,区位码是一个四位的十进制数,每个国标码或区位码都对应着一个唯一的汉字或符号,但因为十六进制数我们很少用到,所以大家常用的是区位码,它的前两位叫做区码,后两位叫做位码。国标码与区位码之间的关系,请查阅“字符编码”词条。
因为Mind+的实时模式不支持16进制的转换,所以我先用Excel生成完整的数据:
步骤2 生成汉字区位码
Sub getallquwei()
'导出全部区位码字库
Dim i As Byte, j As Byte, n As Integer, arr(1 To 10000, 1 To 2)
n = 1
For i = 16 To 87
For j = 1 To IIf(i = 55, 89, 94)
arr(n, 1) = Chr("&H" & Hex(i + 160) & Hex(j + 160))
arr(n, 2) = i & Format(j, "00")
n = n + 1
Next j
Next i
[a1:b10000] = arr
End Sub
步骤3 Mind代码编写
然后我们在Mind+里面创建两个列表,分别导入生成的数据。我们可以看到6763个数据是一一对应的。
举个例子:如果识别到了手势 1608,那么与之对应的汉字就是:皑
为了使信息的传输更加人性化。我加入了两个变量:
一个是开始手势识别的信号,这里我用点赞来表示;另一个是结束手势识别的信号,这里我用比心来表示。
因为在Mind+的手势识别里,返回的是文字 One,Two等内容,因此需要转换为数字。所以这里用了一个函数,返回识别成功的数字。
PS:这里顺便吐槽下,函数没有 返回值 很难受!
同时,为了使得手势识别的健壮性更好加入了错误调整的功能,如下图所示:
另外,因为汉字区位码是四个数字为一组,所以每次用另一个手势表示,一个汉字传输完成。每次识别一个数字。
用简单的乘法运算:x = x * 10 + y。完成4个数字构成一个千位数。
具体信息,以代码为准。
附件
步骤4 测试体验
CYL2024.10.04
您能给个完整程序学习一下吗?
大爱无疆2024.04.17
您能给个完整程序学习一下吗?