省流:一般二维码只能容纳 2.9KB 的数据,用来放超链接和文本足够了。libcimbar 开发了一个特殊的压缩和解压算法。可以把小于 33MB 的文件直接压缩到特殊的二维码里,用他们提供的 App 扫码解压即可得到文件
项目链接:https://github.com/sz3/libcimbar
如果链接访问问题请访问:https://pan.quark.cn/s/4ccd488e9027
效果演示
libCimbar项目介绍
libcimbar
是一个开源的C语言库,旨在简化矩阵运算的过程,但它的应用场景远不止于此。libcimbar
支持高密度的2D彩色条码格式,提供了一种独特的气隙数据传输方式。这种新颖的条码格式可以通过计算机显示器与智能手机摄像头之间进行数据传输,实现无网络、蓝牙或NFC等介质的文件传输。
技术细节
libCimbar背后的技术核心在于高密度的彩色2D条码,它通过网格状的彩色方块存储数据,每个方块的选择和颜色表示了不同的比特。为了处理视频到数字解码过程中可能出现的数据丢失和错误,libcimbar
使用了Reed Solomon错误校正算法,从而将错误率降至1%以下,并自动修正。
更为值得注意的是,libcimbar
实现了基于喷泉码(fountain codes)和zstd压缩技术的文件编码协议。这使得文件(压缩后最大可达33MB)可以通过一系列Cimbar码进行编码,并以图像或实时视频流的形式输出。即使这些图像是无序接收的,或者某些图像被损坏或丢失,只要解码成功,文件仍能被完整重构并解压。
编码与解码
编码过程通过一个网页版应用程序(https://cimbar.org)来实现,用户可以将文件编码为动画条码,直接显示在计算机或智能手机的屏幕上。解码过程则是通过一款手机应用(https://github.com/sz3/cfc)来完成,使用手机摄像头读取屏幕上的动态条码并还原文件。整个过程无需互联网、蓝牙、NFC等任何外部连接设备,只依赖摄像头传输数据。
平台支持
libcimbar
是用C++编写的,已在多个平台上进行了开发和测试,包括amd64+Linux和arm64+Android(仅限解码),以及emscripten+WASM(仅限编码)。尤其是编码器支持编译为asm.js和WASM,这意味着它可以在任何支持现代网页浏览器的平台上运行。对于离线使用,用户可以将cimbar.org安装为渐进式网页应用(PWA),或者下载最新的cimbar_js.html
文件并在浏览器中本地打开。
库依赖
在构建libcimbar
之前,用户需要安装OpenCV和GLFW库。以下是主要的依赖项:
OpenCV (libopencv-dev):用于处理图像数据。
GLFW (libglfw3-dev):用于管理跨平台的窗口、输入等。
GLES3/gl3.h (libgles2-mesa-dev):图形处理所需的OpenGL ES头文件。
此外,还有一些辅助库,例如用于命令行工具的cxxopts
、高效字符串处理的fmt
、用于数据校正的libcorrect
、用于图片加载的stb_image
等。这些库全部打包在项目的源码中,方便开发者在编译时自动集成。
编译步骤
在Ubuntu/Debian系统上,安装依赖库的命令如下:
sudo apt install libopencv-dev libglfw3-dev libgles2-mesa-dev
接着运行cmake命令进行构建:
cmake .
make -j7
make install
默认情况下,libcimbar
会将生成的构建文件安装在./dist/bin/
目录下。
用途
libcimbar
的用途主要集中在高效的数据传输领域,尤其适用于在气隙环境下进行数据传输。其设计初衷是通过屏幕和摄像头之间的简单视觉通信来实现高速数据传输,这使得它在一些特殊场景中具有重要意义,例如:
物理隔离环境:在某些物理隔离的场景中,传统的网络传输方式不可行,使用
libcimbar
可以通过摄像头进行数据传输,确保数据的安全性和隐私性。高效文件传输:利用彩色2D条码格式,传输速度可以达到850千比特每秒(相当于106KB/s),这对于气隙数据传输而言是非常高效的。
离线传输:无需网络连接,
libcimbar
完全依赖设备的硬件,如显示器和摄像头,这使得它成为在网络不可用或不安全时进行文件传输的理想选择。
使用方法
编码文件:可以通过命令将文件编码为一系列Cimbar条码图像,例如:
./cimbar --encode -i inputfile.txt -o outputprefix
解码文件:解码时只需将已编码的条码图像输入到解码器中,提取文件:
./cimbar outputprefix*.png -o /tmp
实时编码与播放:如果想将文件以动态条码的形式直接展示到窗口上,可以使用:
./cimbar_send inputfile.pdf
这样,文件将会被编码为一个动画条码,供摄像头读取。
性能表现
libcimbar
经过优化,能够在保证传输准确率的同时实现高效的传输速度。通过应用Reed Solomon错误校正和喷泉码技术,它能够确保在极低的错误率下完成文件的传输和还原,即便数据帧无序接收或部分丢失,最终仍能成功重建文件。
总结
libcimbar
为高效气隙数据传输提供了创新的解决方案,通过彩色2D条码格式,它无需传统的网络连接即可实现大文件的传输。借助先进的错误校正技术和高效的文件编码算法,该库为科研、物理隔离环境和离线文件传输提供了实用的工具。
无论是对于开发者、研究人员,还是需要进行高安全性传输的用户,libcimbar
都是一个值得深入研究与实践的工具。