ColorRay
概要
ColorRay 是一套基于色彩编码的可见光通信(VLC)系统,核心目标是借助 PC 屏幕(发送端)显示自定义彩色二维码视频流、手机摄像头(接收端)拍摄采集的方式,实现无额外硬件依赖的离线文件传输。系统聚焦高容量、强鲁棒性设计,要求文件还原成功率≥90%,适用于离线环境、安全传输及物联网等场景。
- 项目仓科:https://github.com/qwerty-a11y/ColorRay.git
整体架构流程
ColorRay 的通信流程分为发送端和接收端两大环节,整体形成 “文件处理 - 编码展示 - 拍摄采集 - 解码恢复” 的闭环:
发送端流程
- 文件处理:将待传输文件拆分为二进制数据块;
- 冗余编码:按不同冗余度分组,引入 RAID 5/6 帧间纠删码生成校验块;
- RS 编码:对每个数据块进行 RS 纠错编码,提升单帧抗干扰能力;
- 二维码生成:将数据映射为 8 色像素,生成 133×133 规格的自定义彩色二维码;
- 视频合成:将二维码图像序列合成为视频流并播放,供接收端拍摄。
接收端流程
- 视频拍摄:手机拍摄 PC 端播放的二维码视频流;
- 帧提取:从视频中逐帧提取二维码图像;
- 预处理:识别二维码定位块、完成透视校正与模块采样,标准化图像;
- 颜色解码:通过标准色块校准色彩,识别 8 色信息并转换为二进制数据块;
- 校验与恢复:RS 码纠正单帧错误,利用 RAID 机制恢复丢失 / 损坏帧;
文件重组:合并所有有效数据块,利用 RAID 机制恢复丢失 / 损坏帧;
文件重组:合并所有有效数据块,还原原始文件。`
技术名词解释
- 可见光通信(VLC):以可见光为传输介质的无线通信方式,本项目中依托屏幕发光和摄像头感光实现数据传输;
- RAID 5/6:纠删码技术,RAID 5 通过分布式校验块实现每组 1 块数据容错,RAID 6 增加独立校验块支持每组 2 块数据容错;
- RS 码(Reed-Solomon):里德 - 所罗门纠错码,可直接纠正数据块在传输、识别中出现的符号错误,适用于可见光传输场景;
- 彩色二维码(自定义):基于版本 29 规格(133×133 模块)设计,采用 8 种纯色(红、绿、蓝、黄、青、品红、黑、白)编码数据,含定位块、校准色块、元数据块;
- 透视校正:接收端对拍摄的二维码图像进行几何矫正,消除拍摄角度导致的变形,保证模块采样准确性;
- 帧间纠删:跨二维码帧(数据块)的冗余容错机制,区别于单帧内的 CRC 校验,解决帧丢失 / 损坏问题。
技术细节
- 二维码核心设计
- 基础规格:版本 29(133×133 模块),兼顾数据容量与识别可行性;
- 功能图形:四角保留 “回” 字形定位块用于图像定位;右下角设 8 个标准色块,实现实时色彩补偿;三大定位块附近设 18 个色块,存储帧序号(5 位)和纠删等级(1 位),且支持多向备份;
- 颜色编码:8 种纯色对应二进制数据,是数据与视觉呈现的核心映射载体。
- 冗余与纠错机制
系统设计三种冗余级别,适配不同容错需求:
| 冗余度 | 分组大小 | RAID 类型 | 容错能力 |
|---|---|---|---|
| 10% | 10 块 / 组 | RAID 5 | 每组可丢 1 块 |
| 20% | 5 块 / 组 | RAID 5 | 每组可丢 1 块 |
| 40% | 5 块 / 组 | RAID 6 | 每组可丢 2 块 |
- 同时,每个数据块附带 RS 纠错编码,实现 “帧内 RS 纠错 + 帧间 RAID 纠删” 双层容错。
- 模块分工
系统拆分为 5 个核心模块,职责边界清晰:
- 原始数据包装:文件分块、RAID 编码、RS 计算
- 数据编码:数据块转彩色二维码、合成 20fps视频流
- 数据解码:视频帧提取二维码、颜色分类、还原数据块
- 还原原始数据:RS 纠错、RAID 解码、合并数据块还原文件
- 定位变形标准化 :定位块识别、透视校正、二维码模块采样
- 关键技术链路
- 发送端:文件二进制化→分块→冗余编码 + RS 纠错→彩色二维码生成→20fps 视频合成播放;
- 接收端:视频拍摄→帧提取→图像预处理(定位 + 校正 + 采样)→颜色解码→校验 + 容错恢复→文件重组。
小结
ColorRay 项目以可见光通信为核心,结合自定义彩色二维码、RAID 纠删码、RS 纠错、图像校正等技术,构建了一套完整的 “屏幕 - 摄像头” 文件传输系统。其核心优势在于无额外硬件依赖、多层容错机制保障传输可靠性,且通过精细化的二维码设计和冗余策略,兼顾了数据容量与还原成功率。项目模块化的分工设计也为协作开发和功能迭代提供了清晰的架构基础,整体围绕 “高鲁棒性、高还原率” 的核心目标,解决离线环境下的安全文件传输问题。
