如何通过笔和纸传输文件,并进行纠错


22

我正在寻找一种仅使用笔和纸传输文件的方法。

这与paperbak有点类似,但是我要寻找的密度要低得多,而且我不想使用打印机或扫描仪。

显然,第一个答案是Base64编码。但是,写入和读取如此多的字符必然会导致错误。就我而言,任何错误都是无法接受的。

第二个答案可能是Reed-Solomon错误纠正代码(例如,使用rsbep)。但是,这也是一个问题,因为据我了解,里德-所罗门代码无法纠正插入/删除错误,在这种情况下,插入/删除错误可能比替换错误更有可能。

是否有任何程序可以使用插入/删除感知的纠错码对任意文件进行编码/解码?最好可以在Windows,Linux和Mac OS X上运行

显然,任何其他解决一般问题的方法都是值得欢迎的。


您是否期望书写或阅读有错误?
克里斯汀·曼

我希望在这两个错误,但我也希望他们是等价的...
杰里米Salwen

哦对不起。我误读了,以为你在打印。您想手工写出来吗?
克里斯汀·曼

3
我可以使用几种颜色的笔?:)
Der Hochstapler 2012年

1
仅一支彩色笔,否则很难复制。我实际上是在传输压缩的,签名的,加密的文本,因此,即使冗余率达到50%,总写入量也将小于实际写入原始文本的1.5倍(一旦您考虑了压缩率, )。但是,存在一个问题,即复制随机字符比复制英文文本困难。因此,仅在kb范围内回答您的问题。
杰里米·萨尔文

Answers:


4

我怀疑是否otherwise transcribing it will be too difficult会有问题。

假设您有红色,绿色,蓝色和黑色。您可以编写一个脚本,将您的数据转换成来自的字母集合RGBY,例如:(RGBYGBRYBGBYRYYBYBRYYG甚至Red Green Blue Black Green Blue Red Black...在Excel工作表中),然后再次返回。这只是将您的颜色数量(在本示例中为4)从二进制2的二进制数据(或从16的十六进制数据)转换为基本的问题。

现在,最合乎逻辑的方法是让自己获得16种颜色。这样,您必须使用4倍的点,这使得在笔之间进行切换值得。这使您可以根据需要在纸张上写入4倍的数据,或者在放点时可能精度要低4倍,缩放比例由您决定。我真的建议不要画每一点。

例如,5565 bytes必须将其乘以2才能得到可以放入网格中的十六进制数量11130 hexadecimals(相对于44520 bits106 x 106

根据数据类型,您可能可以进行一些优化...

提示:尝试选择最独特(最鲜明)的颜色...

可以使用一支笔的替代方法:

  • 以不同的符号代表不同的十六进制数-/|\+,...

  • 用小像素字体表示不同的十六进制,请参阅我的头像。

    这使得使用诸如Base 32(或Base 36)之类的东西甚至有用。请注意,Q9是相同的,因此您需要将右上角的像素Q设置为White以便清晰区分。53 x 53对于您的示例,Base 32仅需要一个网格,加上一点点的间距即可区分字母。


好吧,这有一些问题。1.我色盲。2.它需要买一束笔。3.纠错根本没有帮助。4.它涉及文字代码而不是文字,这是人类最不擅长的。
杰里米·萨尔文

@JeremySalwen:嗯,在网格中写字符并不是很难。您还可以通过写一些额外的纵向校验码或CRC来纠正错误。但是实际上,将字母从网格写到网格非常容易,最坏的情况是您再次遍历以进行验证。
Tamara Wijsman'4

1
@JeremySalwen:如果您是色盲者,那么就不要带任何您色盲的颜色。
Tamara Wijsman'4

1
色盲与其说是选择性地看不见某些颜色,不如说是颜色空间的降维。我的意思是,我可能可以选择黑色,蓝色,黄色,红色,绿色,灰色,但不能太多
杰里米·萨尔文

@Tom您可能应该放进旧的头像以防止混乱:)
Nate Koppenhaver 2012年

2

如果您希望人们能够读写数据,那么Base64和许多文本编码的问题在于,他们使用诸如I,l,1,|,/,0,O,o之类的字符,这会让人混淆彼此。

研究Douglas Crockford的Base32编码。专门选择了它的字母以避免类似的字符,并且它包括错误检测。


谢谢,我可能会用到它,但是它仍然不能解决纠错问题。
杰里米·萨尔文

@ Jeremy,Crockford的实现包括错误检测。如果您需要更正错误,请研究前向错误更正(en.wikipedia.org/wiki/Forward_error_correction)。
高高拱门

1

阅读您的评论后,听起来更合理。我只是不确定您是否打算像这样编码兆字节的数据。

我建议按照奥利弗(Oliver)的建议,通过从培根的密码中借用一个页面来提高数据密度,监狱团伙经常使用该页面以两种不同的脚本样式(通常是大写或小写)编写隐藏消息中的隐藏消息。小写字符或印刷与草书字符,例如

Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
                                  =   P     A     S     T     A

但是,由于您的目标不是字形学,您只需使用它来扩展字形集。这样做,仅使用印刷和草书字母数字字符就可以拥有多达114个字形,或者使用双字符编码可以拥有12996个代码点。

但是,由于所有的大于15且小于256的字形计数对于二进制数据的直接密码本质上是相同的(意味着,您仍然需要2个字符来表示每个字节,因此,每个字符中的数据密度为4位所有情况下),您都可以使用额外的98个字形/ 12740代码点进行错误检测/纠正。

做到这一点的方法包括:

  • 从256个最容易读/写的字符组合中选择一组。如果出现任何其他字符组合,则说明这是复制错误。
  • 使用两个版本的结束字符作为奇偶校验位。
  • 创建50个不同的16个字符的字形集。然后,您可以使用它们对纠错数据进行加密编码。

    例如,{set 1}{set 1}表示接下来的3个半字节等于0x000{set 1}{set 2}等于0x001等。

    您可以使用它来表示4096个1.5字节值中的2500+。同样,您可以仅使用16个集合来表示后续字节的所有值,从而在不增加编码数据长度的情况下提供了100%的冗余。

另外,您可以使用额外的字形进行额外压缩:

  • 通过选择98个单字符代码点来实现可变宽度编码。这将使平均编码内容大小减少大约20%。
  • 通过使用不同的字形集或字形集组合来表示重复的半字节/字节,可以实现类似于游程长度编码的功能。例如Ab= aba; aB= abab; AB= ababab...
  • 使用多余的字形或代码点表示在数据中重复的“单词”和“短语”。尽管预压缩的数据可能具有很高的熵,但是我不知道这种方法的有效性。


为了进一步减少复制错误,我将以网格线显示编码后的内容,然后复制到绘图纸上。如果您可以使用具有交替的列/行颜色的自定义固定器或带有字母列和编号行的棋盘式方格网格来快速查找,则可以进一步提高复印精度。

您还可以将交替的网格布局与交替的字符样式结合起来,作为错误检测的简便形式。即,如果奇数列总是大写,如果抄写员发现自己在奇数列中写小写字母,则他们知道自己犯了一个错误,可以开始回溯以查看发生了什么。


虽然如果您的首要任务是准确性,那么我将使用二进制编码+ 汉明码。在标准方格纸上使用(12,8)缩短的汉明代码,您可能只适合187字节,仅编码124字节的数据。但是它可以非常快速地转录(斜杠为1,0为零),并提供单个错误纠正。附加一个奇偶校验位(13、8)将提供SECDED(单错误校正,双错误检测)。使用(15、11)或(31、26)之类的标准汉明码,每张纸分别具有137和156字节的数据,您可以获得更高的效率。根据您认为转录器的准确性,可以达到更高的编码率。

二进制编码也将更易于阅读(成语)和OCR / OMR。


显然,我也计划使用大写字符。在您提出的所有错误纠正方案中,如果没有设计自定义文件格式等,我看不到任何实现它们的方法。确实没有为文件提供错误纠正保护的先例吗?也许我还应该提到创建自定义程序也是非常不希望的?我似乎找不到任何可以通过纠错码保护您的文件的程序。
杰里米·萨尔文

我的观点不只是使用大写字母,还使用其他脚本/字体。如果仅使用大写和小写字母数字字符,则只有62个字形或3844个代码点。通过使用2个脚本,利用用于传输的存储介质,您可以获得三倍多的代码点,这就是我的答案。如果您不想利用这是书面介质这一事实,那么有很多文件格式可以实现错误编码。大多数存档/压缩格式都内置了纠错功能。
Lèsemajesté2012年

我不确定您通过创建新的文件格式意味着什么。我提到的所有技术都是为了在手写文本/标记中可视地编码任意二进制数据。您将不会像那样将它们存储在计算机上(除了存储扫描的图像外)。基本上,您将有一个程序来对数据进行编码,在屏幕上输出图像以供用户复制。然后,将其传送回计算机,您将使用解码程序,该程序可以是OCR / OMR的扫描图像,也可以通过键盘接受输入(例如,alt+ a为草书“ a”)。
冒犯君主

瞧,这就是我的问题所在:“您将有一个对数据进行编码的程序”……不,我没有。我没有程序可以执行此操作,我也不知道有任何程序可以执行此操作。我还不知道任何文件格式都可以正常处理在其他错误之上从文件开头附近删除(未擦除)的字节。我绝对同意这些是提高数据密度的方法,但是现在这不是我的主要关注点,它易于读取/写入和保护错误。
杰里米·萨尔文

@杰里米:就像我说的那样,大多数存档格式都内置了纠错功能,对于大多数人来说似乎都可以很好地工作。但是,如果您想要专门为手动转录而设计的东西,那么您将需要写东西或让别人为您写东西。否则,最好的选择是研究旨在通过高噪声通道传输的现有应用程序。尽管最简单的选项与数据密度无关,但只是使用具有高级别纠错功能的RAR文件,然后重复执行标头部分3次以实现三重模块冗余。
冒犯君主

1

我们曾经为此目的使用S-Records。每行都有一个简单的校验和,用于错误检测。通常,除最后一行外,所有其他行的长度都是固定的,因此行尾标记可以检查插入和删除。虽然没有检查丢失的行。为此,我们只计算了行数。通常文件很短,少于100行,但我确实记得至少有300行或更多。这是非常繁琐的打字文件到系统中。当然,以这种方式传输的首批程序中有一个下载器;)


0

光学标记识别已经用于创建机器可读的手写表格已有数十年的历史了。Wikipedia页面具有指向多个开放源代码版本的链接。

学校长期以来使用OMR进行测试;这些表格易于使用和阅读,其准确性通常比键盘输入要好。为了获得更高的准确性,Scantron和ReMark等商业制造商可以创建自定义表格。


不幸的是,这很有趣,这需要连接到计算机的扫描仪或其他成像系统才能正常工作。
杰里米·萨尔文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.