RS编码-Python工具包使用

前言

最近学习二维码相关知识,遇到了ReedSolomon编码,简称RS编码,中文名里德所罗门编码。遇到的问题是使用的工具包返回的编码是bytearray类型,而二维码是二进制01编码,所以本博客主要验证,如何将bytearray类型转为二进制,随机污染,再利用RS编码纠错,最后解码为传递信息。

RS编码使用的工具包戳这里reedsolomon

直接安装:

pip install reedsolo

预备

首先看如何将字符串转换为bytearray的格式,然后转换为8位二进制表示,最后再转换回bytearray格式,最后得到原字符串

输入ASCII码

  • 编码信息->bytearray->二进制
    使用format函数,将bytearray中存储的十进制数转换为二进制

    aa=bytearray(b'AB') #原信息AB
    for i in aa:print(i)
    #65 66binary_code=''.join(format(x,'08b') for x in aa) #转二进制
    print(len(binary_code),binary_code)
    #0100000101000010
    
  • 二进制->bytearray->原信息

    bytes_msg=bytes(int(binary_code[i:i+8],2)for i in range(0,len(binary_code),8))
    array_msg=bytearray(bytes_msg)
    print(array_msg)
    #bytearray(b'AB')
    

    或者直接使用chr把十进制转换为字符

    decode_msg=''.join(chr(int(binary_code[i:i+8],2))for i in range(0,len(binary_code),8))
    print(decode_msg)
    #AB
    

中文

相对于ASCII码多了一点,编码bytearray的时候加上utf-8,由bytearray解码的时候加上decode('utf-8')

aa=bytearray('小明','utf-8')
print(aa)
bytearray(b'\xe5\xb0\x8f\xe6\x98\x8e')
#转二进制
binary_code=''.join(format(x,'08b') for x in aa)
print(len(binary_code),binary_code)
#48 111001011011000010001111111001101001100010001110
#二进制转bytearray
decode_msg=bytes( int(binary_code[i:i+8],2) for i in range(0,len(binary_code),8))
decode_msg=bytearray(decode_msg)
print(decode_msg)
#bytearray(b'\xe5\xb0\x8f\xe6\x98\x8e')
decode_msg=decode_msg.decode('utf-8')
print(decode_msg)
#小明

RS编码

引入相关包:

from reedsolo import RSCodec

设置纠错码字长度,假设为n,则只能纠错n/2n/2n/2位信息

ecc=RSCodec(6)#纠错码字长度,可纠正n/2个误读

编码二进制

#编码
byte_msg=ecc.encode('Bingo007') #8个字符+6个纠错字=14字符=14*8位
print(byte_msg)
#转换为二进制
binary_code=''.join(format(x,'08b') for x in byte_msg)
print(len(binary_code),type(binary_code))
print(binary_code)
'''
bytearray(b'Bingo007\x7f\xadbG\x11\x9c')
112 <class 'str'>
0100001001101001011011100110011101101111001100000011000000110111011111111010110101100010010001110001000110011100
'''

污染二进制数据,污染第1、2、4个码字:

#污染二进制
binary_code=list(binary_code)
binary_code[0*8+2]=str(1-int(binary_code[0*8+2]))
binary_code[1*8+4]=str(1-int(binary_code[1*8+4]))
binary_code[3*8+5]=str(1-int(binary_code[3*8+5]))
# binary_code[5*8+5]=str(1-int(binary_code[3*8+5]))#再错就无法纠正信息
binary_code=''.join(binary_code)
print(binary_code)
'''
0110001001100001011011100110001101101111001100000011000000110111011111111010110101100010010001110001000110011100
'''

使用RS码纠错,需要先将二进制转换为bytearray形式,然后再用RS纠错,得到编码信息:

#纠错
#先转换为bytearray形式
bytes_msg=bytes(int(binary_code[i:i+8],2) for i in range(0,len(binary_code),8))
array_msg=bytearray(bytes_msg)
#再纠错
data=ecc.decode(array_msg)
msg=data.decode()
print(msg)
#Bingo007

如果再多污染一个码字,就解码失败。

总结

主要就是学习bytearray转为二进制,然后二进制转bytearray的知识点。

链接:https://pan.baidu.com/s/1nfdaea48X-Z6T1fkSzelbQ
提取码:9u6r

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TensorFlow-windows】MobileNet理论概览与实现

前言 轻量级神经网络中&#xff0c;比较重要的有MobileNet和ShuffleNet&#xff0c;其实还有其它的&#xff0c;比如SqueezeNet、Xception等。 本博客为MobileNet的前两个版本的理论简介与Keras中封装好的模块的对应实现方案。 国际惯例&#xff0c;参考博客&#xff1a; 纵…

【TensorFlow-windows】keras接口——ImageDataGenerator裁剪

前言 Keras中有一个图像数据处理器ImageDataGenerator&#xff0c;能够很方便地进行数据增强&#xff0c;并且从文件中批量加载图片&#xff0c;避免数据集过大时&#xff0c;一下子加载进内存会崩掉。但是从官方文档发现&#xff0c;并没有一个比较重要的图像增强方式&#x…

【TensorFlow-windows】name_scope与variable_scope

前言 探索一下variable_scope和name_scope相关的作用域&#xff0c;为下一章节tensorboard的学习做准备 其实关于variable_scope与get_variable实现变量共享&#xff0c;在最开始的博客有介绍过&#xff1a; 【TensorFlow-windows】学习笔记二——低级API 当然还是国际惯例…

【TensorFlow-windows】TensorBoard可视化

前言 紧接上一篇博客&#xff0c;学习tensorboard可视化训练过程。 国际惯例&#xff0c;参考博客&#xff1a; MNIST机器学习入门 Tensorboard 详解&#xff08;上篇&#xff09; Tensorboard 可视化好帮手 2 tf-dev-summit-tensorboard-tutorial tensorflow官方mnist_…

深度学习特征归一化方法——BN、LN、IN、GN

前言 最近看到Group Normalization的论文&#xff0c;主要提到了四个特征归一化方法&#xff1a;Batch Norm、Layer Norm、Instance Norm、Group Norm。此外&#xff0c;论文还提到了Local Response Normalization(LRN)、Weight Normalization(WN)、Batch Renormalization(BR)…

【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据

前言 之前使用tensorflow和keras的时候&#xff0c;都各自有一套数据读取方法&#xff0c;但是遇到一个问题就是&#xff0c;在训练的时候&#xff0c;GPU的利用率忽高忽低&#xff0c;极大可能是由于训练过程中读取每个batch数据造成的&#xff0c;所以又看了tensorflow官方的…

【TensorFlow-serving】初步学习模型部署

前言 初步学习tensorflow serving的手写数字识别模型部署。包括简单的模型训练、保存、部署上线。因为对docker和网络不太熟悉&#xff0c;可能会有部分错误&#xff0c;但是看完博客&#xff0c;能跑通整个流程。此博客将详细介绍流程&#xff0c;但是不详细介绍每个流程的每…

Tensorflow 指令加速

一直没注意过使用Tensorflow的时候有一条warning&#xff1a; Warning: your cpu supports instructions that this tensorflow binary was not compiled to use: avx2 fma这玩意是可以用来加速推断的&#xff0c;分CPU和GPU版&#xff0c;业务相关部署在CPU上&#xff0c;实测…

骨骼动画——论文与代码精读《Phase-Functioned Neural Networks for Character Control》

前言 最近一直玩CV&#xff0c;对之前学的动捕知识都忘得差不多了&#xff0c;最近要好好总结一下一直以来学习的内容&#xff0c;不能学了忘。对2017年的SIGGRAPH论文《Phase-Functioned Neural Networks for Character Control》进行一波深入剖析吧&#xff0c;结合源码。 额…

颜色协调模型Color Harmoniztion

前言 最近做换脸&#xff0c;在肤色调整的那一块&#xff0c;看到一个有意思的文章&#xff0c;复现一波玩玩。不过最后一步掉链子了&#xff0c;有兴趣的可以一起讨论把链子补上。 主要是github上大佬的那个复现代码和原文有点差异&#xff0c;而且代码复杂度过高&#xff0…

Openpose推断阶段原理

前言 之前出过一个关于openpose配置的博客&#xff0c;不过那个代码虽然写的很好&#xff0c;而且是官方的&#xff0c;但是分析起来很困难&#xff0c;然后再opencv相关博客中找到了比较清晰的实现&#xff0c;这里分析一波openpose的推断过程。 国际惯例&#xff0c;参考博…

换脸系列——眼鼻口替换

前言 想着整理一下换脸相关的技术方法&#xff0c;免得以后忘记了&#xff0c;最近脑袋越来越不好使了。应该会包含三个系列&#xff1a; 仅换眼口鼻&#xff1b;换整个面部&#xff1b;3D换脸 先看看2D换脸吧&#xff0c;网上已经有现成的教程了&#xff0c;这里拿过来整理一…

换脸系列——整脸替换

前言 前面介绍了仅替换五官的方法&#xff0c;这里介绍整张脸的方法。 国际惯例&#xff0c;参考博客&#xff1a; [图形算法]Delaunay三角剖分算法 维诺图&#xff08;Voronoi Diagram&#xff09;分析与实现 Delaunay Triangulation and Voronoi Diagram using OpenCV (…

3D人脸重建——PRNet网络输出的理解

前言 之前有款换脸软件不是叫ZAO么&#xff0c;分析了一下&#xff0c;它的实现原理绝对是3D人脸重建&#xff0c;而非deepfake方法&#xff0c;找了一篇3D重建的论文和源码看看。这里对源码中的部分函数做了自己的理解和改写。 国际惯例&#xff0c;参考博客&#xff1a; 什…

tensorflow官方posenet模型解析

前言 tensorflow官方有个姿态估计项目&#xff0c;这个输入和openpose还有点不一样&#xff0c;这里写个单人情况下的模型输出解析方案。 国际惯例&#xff0c;参考博客&#xff1a; 博客: 使用 TensorFlow.js 在浏览器端上实现实时人体姿势检测 tensorflow中posnet的IOS代…

tensorflow2安装时候的一个dll找不到的错误

电脑环境&#xff1a; vs2015python3.7.6&#xff0c;使用anaconda安装的CUDA 10.1cuDnn 7.6.5tensorflow2.1.0 错误内容 File "C:\Users\zb116\anaconda3\lib\imp.py", line 242, in load_modulereturn load_dynamic(name, filename, file)File "C:\Users\z…

PCA、SVD、ZCA白化理论与实现

简介 在UFLDL中介绍了主成分分析这一块的知识&#xff0c;而且当时学机器学习的时候&#xff0c;老师是将PCA和SVD联系起来将的&#xff0c;同时UFLDL也讲到了使用PCA做数据白化whitening处理&#xff0c;这个词经常在论文里面看到。 国际惯例&#xff0c;参考博客&#xff1…

OpenCV使用Tensorflow2-Keras模型

前言 最近工作上需要在C上快速集成Tensorflow/Keras训练好的模型&#xff0c;做算法验证。首先想到的就是opencv里面的dnn模块了&#xff0c;但是它需要的格式文件比较郁闷&#xff0c;是pb格式的模型&#xff0c;但是keras通常保存的是h5文件&#xff0c;查阅了很多资料&…

3D人脸表情驱动——基于eos库

前言 之前出过三篇换脸的博文&#xff0c;遇到一个问题是表情那一块不好处理&#xff0c;可行方法是直接基于2D人脸关键点做网格变形&#xff0c;强行将表情矫正到目标人脸&#xff0c;还有就是使用PRNet的思想&#xff0c;使用目标人脸的顶点模型配合源人脸的纹理&#xff0c…

3D姿态估计——ThreeDPose项目简单易用的模型解析

前言 之前写过tensorflow官方的posenet模型解析&#xff0c;用起来比较简单&#xff0c;但是缺点是只有2D关键点&#xff0c;本着易用性的原则&#xff0c;当然要再来个简单易用的3D姿态估计。偶然看见了ThreeDPose的项目&#xff0c;感觉很强大的&#xff0c;所以把模型扒下来…