Libcimbar 是一个用于数据传输的工具,通过一种特殊的二维条码格式(色彩图标矩阵条码)来进行隔空数据传输,无需互联网、蓝牙或NFC等传统网络连接。
它的基本原理是通过电脑或手机屏幕显示一个由颜色块组成的动态条码,手机摄像头读取并解码这些条码,将其转化为文件或数据。
即便有些数据模糊或丢失也可以纠正和恢复。这种技术可以用于离线情况下安全、快速地传输文件。
- 隔空传输:Libcimbar 通过显示动态条码,让手机摄像头读取条码传输数据。你只需要让手机对准电脑屏幕,就能进行数据传输,而无需网络连接。
- 高效的传输速度:这个系统的传输速度可以达到 850 kbps(大约106 KB每秒),相对高效。
- 支持大文件传输:使用了 fountain codes 和 zstd 压缩,支持高达 33MB 的文件编码,通过多个条码帧传输,解码后即可恢复原文件。
- 容错能力强:Libcimbar 使用了 Reed-Solomon 纠错码,即使部分条码数据丢失或损坏,也能够进行恢复和纠错,保证数据完整性。
- 跨平台支持:Libcimbar 使用 C++ 编写,支持多个平台(如 Linux 和 Android),也可以在网页浏览器中运行。这意味着你可以在不同设备上使用它来进行数据传输。
- 开源项目:这个项目是完全开源的,任何人都可以下载、使用和修改代码。它可以通过 OpenCV 等常用工具库进行编译和运行。
核心技术和工作原理的总结:
1. Cimbar条码的概念
Cimbar 是一个由彩色网格组成的二维条码,用于编码数据。每个符号通过图像哈希进行唯一标识。通过对符号进行图像哈希和颜色编码,可以在一张Cimbar图像中存储大量的数据。
2. 编码过程
在编码成条码之前,文件首先被压缩。Libcimbar 使用了一种名为 Zstandard(zstd) 的压缩算法。这种算法可以有效地减小文件的大小,使得更多的数据可以放入条码中。这一步的作用是减少数据量,提高传输效率。
- 图像生成:数据被分成多个块,每个块通过指定位置的符号进行编码。典型的Cimbar图像包含 12400 个彩色符号块,每个符号表示6位数据,最终每张图像能传输大约 9300 字节的数据。
- 像彩色方块拼图:Libcimbar 通过将数据转化为一个个小的彩色方块,把它们排列在一个网格里。这个网格类似于一个更加复杂的二维码,但每个小方块除了位置,还包含颜色信息。这些彩色方块代表了计算机中的二进制数据(0 和 1)。
- 动画传输:这些彩色方块会以一种动态的方式显示在电脑或手机的屏幕上,形成一个持续变化的动画。
3.数据传输
- 摄像头捕捉:手机摄像头可以拍摄这个不断变化的条码动画,就像扫码支付时摄像头识别二维码一样。不同的是,Libcimbar 是通过连续的多帧动画来传输更多的数据。
- 错误校正:在传输过程中,可能会有一些图像方块被拍模糊了或没拍清楚,但系统会自动修正这些错误,就像拼图时即使少了几块,最终也能还原出完整的图片。
4. 解码过程
- 压缩和分块:如果要传输一个文件,Libcimbar 会先将文件压缩,并分成多个小部分,每一部分都被编码成一组条码动画帧。摄像头拍摄这些帧后,即使某几帧丢失或顺序错了,也可以通过一个叫 Fountain 编码 的技术重新拼接文件。
- 重组文件:手机摄像头拍下足够的动画帧后,系统就能从这些数据中重新拼装出完整的文件。
4. 关键技术
- Fountain 编码:通过 Fountain 编码,即使在接收到的帧顺序错误或有缺失的情况下,也能重建原始文件,确保解码过程的可靠性。
- 图像校正与漂移处理:解码器通过局部图像漂移校正符号位置,提高解码的精度。
这种技术特别适合那些不允许通过网络连接传输数据的情况,比如在安全环境下传输文件,或者在设备之间进行快速的数据交换,而不需要借助互联网、蓝牙或其他无线通信方式。
GitHub:https://github.com/sz3/libcimbar
解码器安卓应用: https://github.com/sz3/cfc