所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
旗语——一个基于汉字区位码的手势加密系统
kylinpoet kylinpoet 2019-12-20 01:58:18
2
0
简单
步骤1 步骤1
设计灵感

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

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

projectImage

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

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

区位码 :

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

projectImage

因为Mind+的实时模式不支持16进制的转换,所以我先用Excel生成完整的数据:

步骤2 步骤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
	                    				
projectImage
步骤3 步骤3
Mind代码编写

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

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

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

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

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

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

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

projectImage

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

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

具体信息,以代码为准。

步骤4 步骤4
测试体验
Makelog作者原创文章,未经授权禁止转载。
2
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]