回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

旗语——一个基于汉字区位码的手势加密系统 简单

头像 kylinpoet 2019.12.20 3350 2

步骤1 设计灵感

本人因辅修信息加密解密系统,这段时间对航海旗语比较感兴趣。因此准备利用旗语相关信息来做个作品。

旗语(英语:Flag semaphore),一种利用手旗或旗帜传递信号的沟通方式,可分单旗和双旗等两种,又称为“手旗信号”或“手旗通信”,距离较长时,借助双筒望远镜或望远镜,以延伸目视距离。

project-image

因为涉及到视觉识别的内容,用Mind+的AI图像识别正好能够满足要求。但在设计过程中,发现如果用人体分析的话,需要全身动静比较大,再加上本人比较怕生,不想露脸。所以换种方式,用手势识别的方式来进行旗语系统的加密算法。

在Mind+提供的网络服务——AI图像识别功能里,提供了手势的数字识别。结合旗语所要表达的文字信息,准备用汉字区位码来进行信息解析。

区位码 :

1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是国内所有汉字系统的统一标准。国标码是一个四位十六进制数,区位码是一个四位的十进制数,每个国标码或区位码都对应着一个唯一的汉字或符号,但因为十六进制数我们很少用到,所以大家常用的是区位码,它的前两位叫做区码,后两位叫做位码。国标码与区位码之间的关系,请查阅“字符编码”词条。

project-image

因为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
project-image

步骤3 Mind代码编写

然后我们在Mind+里面创建两个列表,分别导入生成的数据。我们可以看到6763个数据是一一对应的。

举个例子:如果识别到了手势 1608,那么与之对应的汉字就是:皑

为了使信息的传输更加人性化。我加入了两个变量:

一个是开始手势识别的信号,这里我用点赞来表示;另一个是结束手势识别的信号,这里我用比心来表示。

project-image

因为在Mind+的手势识别里,返回的是文字 One,Two等内容,因此需要转换为数字。所以这里用了一个函数,返回识别成功的数字。

PS:这里顺便吐槽下,函数没有 返回值 很难受!

同时,为了使得手势识别的健壮性更好加入了错误调整的功能,如下图所示:

project-image

另外,因为汉字区位码是四个数字为一组,所以每次用另一个手势表示,一个汉字传输完成。每次识别一个数字。

用简单的乘法运算:x = x * 10 + y。完成4个数字构成一个千位数。

具体信息,以代码为准。

步骤4 测试体验

评论

user-avatar
  • CYL

    CYL2024.10.04

    您能给个完整程序学习一下吗?

    0
    • 大爱无疆

      大爱无疆2024.04.17

      您能给个完整程序学习一下吗?

      0