RFID射频标签EPC段的使用案例
搬砖佬现在从事IOT行业,已经荒废了N年的数据结构基础,差不多都还给大学老师了。最近做的一个项目,让我重新拾起荒废的技能开战...
项目中有一个需求:识别摄像头画面中的工程车,并获取车牌号。首先就想到了OpenCV,后来去工地现场考察,发现.......又特么的是现实很骨感的问题。工程车基本上都脏得要死,识别率简直低的不要不要的。于是变更了设计方案,使用超高频射频天线阵列,去感知附近的RFID标签。
那啥是RFID呢?我简单解释一下,超市里扣在毛巾袜子上的那个耳朵就是RFID标签的一种。当你没付钱就企图跑路时,超市门口的射频天线会滴滴滴,于是保安就过来抓小偷了。
好了,回到正题。RFID标签分为三个存储区块,分别是:
- EPC:超时里的物品条码,通常就是写在这个区段内。长度为14个字节(某些类型的标签只能用12个字节)。
- TID:标签的厂家ID,基本上都是只读的。这个区段一般是用来识别标签类型的,所以不可更改。
- USER:可以用来保存用户自定义的数据,长度不固定。欧标的可以写入192个bit,也就是24个字节。
这里有一个问题,USER区段虽然很美丽,并不是所有标签都有...所以,把ECP段的12个字节利用起来才是王道!
车牌号分为几个部分:
- 省份字头
- 首字母
- 号码
- 后缀
举两个栗子:湘UD12345,字头是“湘”,首字母“U”,号码“D12345”,没有后缀;湘U1234挂,字头“湘”,首字母“U”,号码“1234”,后缀“挂”。
全国每个身份一个字头,加上“使领”这两个特殊字头(工程车可以忽略不考虑特殊字头),后缀有这几种情况:“挂学警港澳使领”,工程车同样可以忽略这些情况。归纳一下,号牌可能出现的数量组合有:34263636363636*36种。MMP,12个字节不够用啊(光一个汉字就要吃掉4个byte,UTF8模式下,单个字符最多可能占用4个byte,一般是3个byte)。
换个思路吧,不然又无解了。大学时候的计算机文化基础课程,2进制8进制10进制16进制的换算...我特么的撸个34进制,36进制好不好?答案是非常好。此题有解!这样子一来,车牌号可以压缩到28个bit来表示,也是就说4个字节就可以搞定。
强迫症在这个时候又开始发作,12个字节,还剩那么多怎么办?别浪费。于是就开始作死,加上4个bit的随机数,加上4个byte的时间戳,还剩2个byte用来保存crc16,简直就是完美。这样又把以前动态密文的设计思想给带进来了。
贴一段解算编码算法的Python实例代码:(从解算代码可以反推编码算法,我不喜欢留邮箱一族,也不喜欢只要源码光抄作业的人)
在算法的加持下,12个字节可以记录完整的车牌号,同时还可以记录制卡时间,还可以防伪,完美的不要不要的。
评论已关闭