Ich suche nach einer Möglichkeit, eine Datei nur mit Stift und Papier zu übertragen.
Dies ähnelt in gewisser Weise dem Paperbak , außer dass die gesuchte Dichte viel, viel niedriger ist und ich keinen Drucker oder Scanner verwenden möchte.
Offensichtlich lautet die erste Antwort Base64- Codierung. Das Schreiben und Lesen einer derart hohen Anzahl von Zeichen führt jedoch zwangsläufig zu Fehlern. Für meine Zwecke ist jeder Fehler inakzeptabel.
Die zweite Antwort könnte eine Reed-Solomon-Fehlerkorrektur sein (z. B. mit rsbep ). Dies ist jedoch auch ein Problem, da Reed-Solomon-Codes meines Wissens keine Einfüge- / Löschfehler korrigieren, die in diesem Fall wahrscheinlich wahrscheinlicher sind als Substitutionsfehler.
Gibt es ein Programm, das beliebige Dateien mit einfüge- / löschsicheren Fehlerkorrekturcodes codiert / decodiert? Vorzugsweise sollte es unter Windows, Linux und Mac OS X funktionieren
Natürlich ist jede andere Lösung des allgemeinen Problems willkommen.
quelle
Antworten:
Ich bezweifle, dass
otherwise transcribing it will be too difficult
dies ein Problem sein wird.Angenommen, Sie haben Rot, Grün, Blau und Schwarz. Sie können ein Skript schreiben, das Ihre Daten in eine Sammlung von Buchstaben umwandelt
RGBY
, z. B .:RGBYGBRYBGBYRYYBYBRYYG
(oder sogarRed Green Blue Black Green Blue Red Black...
in einer Excel-Tabelle) und wieder zurück. Es ist nur eine Frage der Basis, wie Sie Ihre Binärdaten von Basis 2 (oder Hexadezimaldaten von Basis 16) in die Basis in der Anzahl der Farben konvertieren, die Sie verwenden (in diesem Beispiel 4).Der logischste Ansatz wäre nun, sich 16 Farben zu sichern. Auf diese Weise müssen Sie viermal weniger Punkte verwenden, wodurch sich das Wechseln zwischen den Stiften lohnt. Auf diese Weise können Sie 4-mal so viele Daten auf das Papier schreiben, wenn dies erforderlich ist, oder es kann sein, dass die Skalierung beim Anbringen Ihrer Punkte 4-mal ungenauer ist. Ich würde wirklich davon abraten, jedes einzelne Bit zu zeichnen.
Müsste
5565 bytes
zum Beispiel mit zwei multipliziert werden, um die Hexadezimalzahl zu erhalten, die11130 hexadecimals
(im Gegensatz zu44520 bits
) in ein106 x 106
Raster eingefügt werden kann.Abhängig von der Art der Daten können Sie wahrscheinlich mit einigen Optimierungen kommen ...
Tipp: Versuchen Sie, die deutlichsten (kontrastreichsten) Farben auszuwählen ...
Alternativen, die einen einzelnen Stift verwenden können:
Repräsentieren die verschiedenen hexadezimal durch verschiedene Symbole
-
,/
,|
,\
,+
, ...Stellen Sie die verschiedenen Hexadezimalzahlen mit einer kleinen Pixelschrift dar, siehe meinen Avatar.
Dies macht es sogar nützlich, etwas wie Base 32 (oder Base 36) zu verwenden. Beachten Sie, dass das
Q
und9
dasselbe ist. Sie möchten also, dass das Pixel oben rechtsQ
für eine klare Unterscheidung weiß ist. Basis 32 erfordert nur ein53 x 53
Raster für Ihr Beispiel sowie einen kleinen Abstand zwischen den Buchstaben.quelle
Wenn Sie möchten, dass Benutzer die Daten lesen und schreiben können, besteht das Problem mit Base64 und vielen Textkodierungen darin, dass sie Zeichen wie I, I, 1, |, /, 0, O, O usw. verwenden, die die Benutzer verwirren miteinander.
Untersuchen Sie die Base32- Codierung von Douglas Crockford . Sein Alphabet wurde speziell ausgewählt, um ähnliche Zeichen zu vermeiden, und es enthält eine Fehlererkennung.
quelle
Nachdem Sie Ihre Kommentare gelesen haben, klingt dies vernünftiger. Ich war mir nur nicht sicher, ob Sie Megabyte an Daten wie diese codieren wollten.
In Anlehnung an Olivers Vorschlag würde ich empfehlen, dass Sie Ihre Datendichte erhöhen, indem Sie eine Seite aus Bacons Chiffre ausleihen, die Gefängnisbanden häufig verwenden, um versteckte Nachrichten in Missiven zu verschlüsseln, die in zwei verschiedenen Skriptstilen geschrieben sind - normalerweise entweder Upper vs. Kleinbuchstaben oder gedruckte oder kursive Zeichen, z
Da Ihr Ziel jedoch nicht die Stegnographie ist, würden Sie dies einfach zum Erweitern Ihres Glyphensatzes verwenden. Auf diese Weise können Sie bis zu 114 Glyphen nur mit alphanumerischen Druck- und Kursivzeichen oder 12996 Codepunkten mit Doppelzeichencodierung verwenden.
Da jedoch alle Glyphenzahlen größer als 15 und kleiner als 256 für eine direkte Verschlüsselung von Binärdaten im Wesentlichen gleich sind (dh, Sie benötigen immer noch 2 Zeichen, um jedes Byte darzustellen, sodass Sie eine Datendichte von 4 Bit pro Zeichen in erhalten In allen Fällen können Sie die zusätzlichen 98 Glyphen / 12740 Codepunkte zur Fehlererkennung / -korrektur verwenden.
Möglichkeiten, dies zu tun, umfassen:
Erstellen Sie 50 verschiedene 16-stellige Glyphensätze. Sie können sie dann zum Verschlüsseln von Fehlerkorrekturdaten verwenden.
ZB
{set 1}{set 1}
bedeutet, dass die nächsten 3 Knabbereien gleich0x000
,{set 1}{set 2}
gleich0x001
usw. sind.Sie können dies verwenden, um 2500+ der 4096 möglichen 1,5-Byte-Werte darzustellen. In ähnlicher Weise könnten Sie nur 16 Sätze verwenden, um alle Werte des folgenden Bytes darzustellen, wodurch Sie 100% Redundanz erhalten, ohne Ihre codierte Datenlänge zu erhöhen.
Alternativ können Sie die zusätzlichen Glyphen für zusätzliche Komprimierung verwenden:
Ab
=aba
;aB
=abab
;AB
=ababab
...Um Kopierfehler weiter zu reduzieren, würde ich den codierten Inhalt in Gitternetzlinien anzeigen und auf Millimeterpapier kopieren. Wenn Sie benutzerdefiniertes stationäres Material mit abwechselnden Spalten- / Zeilenfarben oder ein schachbrettartiges Schachbrettmuster mit beschrifteten Spalten und nummerierten Zeilen für eine schnelle Suche verwenden können, wird die Kopiergenauigkeit weiter erhöht.
Sie können auch ein abwechselndes Rasterlayout mit abwechselnden Zeichenstilen als einfache Form der Fehlererkennung kombinieren. Das heißt, wenn ungerade Spalten immer in Großbuchstaben geschrieben werden und der Transkriptor Kleinbuchstaben in ungeraden Spalten schreibt, weiß er, dass er einen Fehler gemacht hat, und kann zurückverfolgen, um zu sehen, wo es passiert ist.
Obwohl, wenn Ihre Hauptpriorität Genauigkeit ist, würde ich eine binäre Kodierung + Hamming Code verwenden . Bei Verwendung eines (12, 8) gekürzten Hamming-Codes auf Standard-Grafikpapier passen Sie möglicherweise nur auf 187 Byte, wobei nur 124 Byte Daten codiert werden. Aber es könnte sehr schnell transkribiert werden (ein Schrägstrich für 1, nichts für 0) und eine einzelne Fehlerkorrektur liefern. Das Anheften eines zusätzlichen Paritätsbits (13, 8) würde SECDED (Einzelfehlerkorrektur, Doppelfehlererkennung) ergeben. Mit einem Standard-Hamming-Code wie (15, 11) oder (31, 26) erzielen Sie mit 137 bzw. 156 Byte Daten pro Blatt eine noch höhere Effizienz. Es können sogar noch höhere Coderaten erzielt werden, je nachdem, wie genau Sie glauben, dass Ihr Transkribent sein kann.
Eine binäre Codierung wäre auch einfacher zu lesen (laut) und OCR / OMR.
quelle
alt
+a
für kursives "a").Zu diesem Zweck haben wir S-Records verwendet. Es gab eine einfache Prüfsumme pro Zeile für die Fehlererkennung. Normalerweise hatten alle Zeilen bis auf die letzte eine feste Länge, daher diente die Zeilenende-Markierung als Kontrolle für Einfügungen und Löschungen. Es wurde jedoch nicht nach fehlenden Zeilen gesucht. Dazu haben wir einfach die Anzahl der Zeilen gezählt. Die meisten Dateien waren kurz, weniger als 100 Zeilen, aber ich erinnere mich an mindestens eine Datei mit 300 Zeilen oder mehr. Es war sehr mühsam, Dateien in das System einzugeben. Natürlich gehörte zu den ersten Programmen, die auf diese Weise übertragen wurden, ein Downloader;)
quelle
Die optische Markenerkennung wird seit Jahrzehnten verwendet, um maschinenlesbare handschriftliche Formulare zu erstellen. Die Wikipedia-Seite enthält Links zu verschiedenen Open Source-Versionen.
Schulen haben OMR lange Zeit zum Testen verwendet. Die Formulare sind einfach zu verwenden und zu lesen, und die Genauigkeit ist in der Regel besser als die Tastatureingabe. Für eine höhere Genauigkeit können kommerzielle Hersteller wie Scantron und ReMark benutzerdefinierte Formulare erstellen.
quelle