天道酬勤,学无止境

16bit CRC-ITU calculation for Concox tracker

I am creating C# code for a server program that receives data from a Concox TR06 GPS tracker via TCP:

http://www.iconcox.com/uploads/soft/140920/1-140920023130.pdf

When first starting up, the tracker sends a login message, which needs to be acknowledged before it will send any position data. My first problem is that, according to the documentation, the acknowledge message is 18 bytes long, yet the example they provide is only 10 bytes long:

P.s. in the table above, the "bits" column I'm pretty sure should be labelled "bytes" instead...

Now, my main problem is in calculating the Error Check. According to the documentation:

The check code is generated by the CRC-ITU checking method. The check codes of data in the structure of the protocol, from the Packet Length to the Information Serial Number (including "Packet Length" and "Information Serial Number"), are values of CRC-ITU.

Ok, so in the above example, I need to calculate CRC on 0x05 0x01 0x00 0x01

Now, I'm guessing it's 16 bit CRC, as according to the diagram above, the CRC is 2 bytes long. I've implemented two different CRC implementations I found online at http://www.sanity-free.org/134/standard_crc_16_in_csharp.html and http://www.sanity-free.org/133/crc_16_ccitt_in_csharp.html but neither give me the answer that, according to the diagram above I am supposed to be getting - 0xD9 0xDC. I've even used this site - https://www.lammertbies.nl/comm/info/crc-calculation.html - to manually enter the 4 bytes, but nothing gives me the result I'm supposed to be getting according to the diagram above...

Any ideas where I might be going wrong? Any pointers/hints would be greatly appreciated. Thank you

标签

评论

The ITU CRC-16 is also called the X-25 CRC. You can find its specification here, which is:

width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25"

My crcany code will take that specification and generate C code to compute the CRC.

Here is the bit-wise (slow) code thusly generated:

#include <stddef.h>

unsigned crc16x_25_bit(unsigned crc, void const *data, size_t len) {
    if (data == NULL)
        return 0;
    crc = ~crc;
    crc &= 0xffff;
    while (len--) {
        crc ^= *(unsigned char const *)data++;
        for (unsigned k = 0; k < 8; k++)
            crc = crc & 1 ? (crc >> 1) ^ 0x8408 : crc >> 1;
    }
    crc ^= 0xffff;
    return crc;
}

i have implemented the same logic in nodejs (javascript). I hope this helps someone.

const crc16itu = hexString => {

if (!hexString) return 0x00;
const table = [
    0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
    0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
    0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
    0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
    0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
    0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
    0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
    0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
    0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
    0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
    0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
    0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
    0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
    0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
    0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
    0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
    0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
    0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
    0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
    0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
    0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
    0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
    0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
    0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
    0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
    0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
    0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
    0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
    0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
    0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
    0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
    0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
];

let fcs = parseInt("FFFF", 16);
let i = 0;

while (i < hexString.length) {
    let strHexNumber = hexString.substring(i, i + 2);
    let intNumber = parseInt(strHexNumber, 16);
    let crc16tabIndex = (fcs ^ intNumber) & parseInt("FF", 16);
    fcs = (fcs >> 8) ^ table[crc16tabIndex];
    i = i + 2;
}

    return fcs ^ 0xFFFF;
};

module.exports = crc16itu;

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • GPS Socket communication (CONCOX)
    1]1i have a gps device that should send GPRMC Data but it require login packect Review the dataSheet Device DataSheet i can recieve the login 787811010XXX739050313XXX20200001000E0EAD0D0A IMEI Sart With XXX the packet is different from the example Image i have 2 Questions 1-according to the data recieveid and the example what should i send 2- how to calcaulate the Error Check Thank You Edit public static void StartListening() { // Data buffer for incoming data. byte[] bytes = new Byte[1024]; // Establish the local endpoint for the socket. // The DNS name of the computer // running the listener
  • GPS套接字通信(CONCOX)(GPS Socket communication (CONCOX))
    问题 1] 1i有一个应该发送GPRMC数据的gps设备,但它需要登录程序包查看dataSheet设备DataSheet 我可以收到登录787811010 XXX739050313XXX 20200001000E0EAD0D0A IMEI Sart With XXX 数据包与示例图像不同 我有2个问题1-根据收到的数据和示例我应该发送什么2-如何计算错误检查谢谢 编辑 public static void StartListening() { // Data buffer for incoming data. byte[] bytes = new Byte[1024]; // Establish the local endpoint for the socket. // The DNS name of the computer // running the listener is "host.contoso.com". IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPAddress local = IPAddress.Parse("My IP"); IPEndPoint localEndPoint = new
  • CRC-ITU calculation in c#
    I'm new to C#. I need to calculate CRC-ITU for the packet recieved from GPS devices. There is C code provided in the documentation but i don't know how to port it to C#, anyone could help me? here is CRC-ITU algorithm in C : static const U16 crctab16[] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58
  • 为 CRC16 函数将 C 转换为 PHP(Convert C to PHP for CRC16 Function)
    问题 我需要帮助将 C 代码转换为 PHP。 以下是C代码: static const U16 crctab16[] = { 0x0000, 0x1189, ... }; U16 GetCrc16(const U8* pData, int nLength) { U16 fcs = 0xffff; while(nLength > 0) { fcs = (fcs >> 8) ^ crctab16[fcs ^ *pData) & 0xff]; nLength--; pData++; } return ~fcs; } 到目前为止,我已经成功转换了以下 PHP 代码: $crctab16 = array(0x0000, 0x1189, ... ); function getCrc16($pData) { $hexdata = pack('H*',$pData); $nLength = strlen($hexdata); $fcs = 0xFFFF; $pos = 0; while($nLength > 0) { $fcs = ($fcs >> 8) ^ $crctab16[($fcs ^ $hexdata[$pos]) & 0xFF]; $nLength--; $pos++; } return ~$fcs; } 我试图运行以下代码: $str = "0A1344010400010005"
  • 天空中的大海--Kubernetes网络模型--铺垫篇①
    想要深入分析k8s网络,需掌握iptables、ipvs、veth-pair、虚拟网桥等概念以及Wireshark、tcpdump、brctl等工具的使用。 本章研究一下P2P网络,并使用Wireshark抓包分析。 构建一个BitTorrent客户端 目标:下载debian.iso。 BT文件简介 使用的torrent文件是https://cdimage.debian.org/debian-cd/current/amd64/bt-cd/debian-10.9.0-amd64-netinst.iso.torrent 打开BT文件 内容又多又杂,原因是种子文件是Bencoding编码,使用Bencoding规则解码之后得到 length代表了文件大小(353370112Byte/1024/1024=337M)piece length代表了piece的大小(262144Byte/1024=256K)piece代表了每一块的哈希值(26960/20=1348块或者353370112/1024/256=1348块)。SHA-1产生20字节的哈希码。所以总共是1348*20=26960字节。可以看出这个BT文件将debian.iso分成1348块。 This mechanism allows us to verify the integrity of each piece as we go
  • Pytorch实现卷积神经网络训练量化(QAT)
    本文首发于GiantPandaCV公众号 1. 前言 深度学习在移动端的应用越来越广泛,而移动端相对于GPU服务来讲算力较低并且存储空间也相对较小。基于这一点我们需要为移动端定制一些深度学习网络来满足我们的日常续需求,例如SqueezeNet,MobileNet,ShuffleNet等轻量级网络就是专为移动端设计的。但除了在网络方面进行改进,模型剪枝和量化应该算是最常用的优化方法了。剪枝就是将训练好的大模型的不重要的通道删除掉,在几乎不影响准确率的条件下对网络进行加速。而量化就是将浮点数(高精度)表示的权重和偏置用低精度整数(常用的有INT8)来近似表示,在量化到低精度之后就可以应用移动平台上的优化技术如NEON对计算过程进行加速,并且原始模型量化后的模型容量也会减少,使其能够更好的应用到移动端环境。但需要注意的问题是,将高精度模型量化到低精度必然会存在一个精度下降的问题,如何获取性能和精度的TradeOff很关键。 这篇文章是介绍使用Pytorch复现这篇论文:https://arxiv.org/abs/1806.08342 的一些细节并给出一些自测实验结果。注意,代码实现的是Quantization Aware Training ,而后量化 Post Training Quantization 后面可能会再单独讲一下。代码实现是来自666DZY666博主实现的https:/
  • Linux下安装FastDFS及生成缩略图
    1. 安装编译环境 yum install git gcc gcc-c++ make automake vim wget libevent -y 2. 安装libfastcommon基础库 mkdir /root/fastdfs cd /root/fastdfs git clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/ ./make.sh && ./make.sh install 3. 安装FastDFS cd /root/fastdfs wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz tar -zxvf V5.11.tar.gz cd fastdfs-5.11 ./make.sh && ./make.sh install # 配置文件准备 cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf cp /root
  • Hadoop gen1 与 Hadoop gen2(Hadoop gen1 vs Hadoop gen2)
    问题 我对 Hadoop-2.x 中 tasktracker 的位置有点困惑。 Hadoop-1.x中的守护进程是namenode, datanode, jobtracker, taskracker and secondarynamenode Hadoop-2.x中的守护进程是namenode, datanode, resourcemanager, applicationmaster, secondarynamenode. 这意味着Jobtracker has split up into: resourcemanager and applicationmaster 那么任务tasktracker在哪里? 回答1 在 YARN(Hadoop 2 中的新执行框架)中,MapReduce 不像以前那样存在。 YARN 是一种更通用的在集群上分配资源的方式。 ResourceManager、ApplicationMaster 和 NodeManager 现在包含新的 YARN 执行框架。 NodeManager 是每个节点上的守护进程,所以我猜你可以说它取代了 TaskTracker。 但现在它只是提供流程,而不仅仅是映射任务和减少任务。 MapReduce 仍然存在,但它现在是 YARN 的“应用程序”。 这里是 YARN 的介绍,它会更深入:http://hortonworks.com
  • OpenCV-Python (官方)中文教程(部分四)
    [部分三]:https://blog.csdn.net/Thomson617/article/details/103987952 第八章.机器学习 46.K 近邻(k-Nearest Neighbour ) 46.1理解 K 近邻 kNN 可以说是最简单的监督学习分类器了。想法也很简单,就是找出测试 数据在特征空间中的最近邻居。我们将使用下面的图片介绍它。 上图中的对象可以分成两组:蓝色方块和红色三角。每一组也可以称为一个类。 我们可以把所有的这些对象看成是一个城镇中房子,而所有的房子分别属于蓝色和红色家族,而这个城镇就是所谓的特征空间。(你可以把一个特征空间看成是所有点的投影所在的空间。例如在一个2D的坐标空间中,每个数据都两个特征x坐标和y坐标,你可以在2D坐标空间中表示这些数据。如果每个数据都有3个特征呢,我们就需要一个3D空间。N个特征就需要N维空间,这个N维空间就是特征空间。在上图中,我们可以认为是具有两个特征色2D空间)。现在城镇中来了一个新人,它的新房子用绿色圆盘表示。我们要根据它房子的位置把它归为蓝色家族或红色家族。我们把这过程称为分类。我们应该怎么做呢?一个方法就是查看它最近的邻居属于那个家族,从图像中我们知道最近的是红色三角家族。所以它被分到红色家族。这种方法被称为简单近邻,因为分类仅仅决定与它最近的邻居。 但是这里还有一个问题。红色三角可能是最近的
  • Bittorrent跟踪器请求(Bittorrent tracker request)
    问题 使用来自的种子文件 http://torrent.ubuntu.com:6969/ 我正在计算其哈希值与页面上的哈希值匹配。 然后,我向跟踪器发出请求。 喜欢 http://torrent.ubuntu.com:6969/announce?info_hash=9a81333c1b16e4a83c10f3052c1590aadf5e2e20 但是我明白了 d14:失败原因63:未授权请求的下载与此跟踪器一起使用。e 根据规范这应该工作吗? 跟踪器规格常规规格 回答1 您以十六进制而不是URL编码指定了info_hash。 SHA-1哈希的字节应直接编码,如下所示: http://torrent.ubuntu.com:6969/file?info_hash=%9A%813%3C%1B%16%E4%A8%3C%10%F3%05%2C%15%90%AA%DF%5E.%20 另外,对于announce URL,通常需要一些其他参数,例如peer_id 。
  • 计算机网络——p2p
    1. P2P系统 既是客户端consumer也是服务器端 producer+consumer=prosumer任何时候都有加入或离开的自由无限的peer diversity: 服务能力、存储空间 、网络带宽和服务需求开放的广域无中心分布系统 2. 混合式P2P网络(第一代) C/S式集中目录查询,P2P式下载 Peers连接到能提供共享内容的中心目录上,匹配请求与索引 文件直接在两个Peers间交换 2.1. P2P网络先驱 Napster C/S式集中目录查询,P2P式下载 Peers连接到能提供共享内容的中心目录上,匹配请求与索引 文件直接在两个Peers间交换 Napster的缺点: C/S的单点故障、系统瓶颈、可扩展性低 未考虑不同用户的能力差异、无鼓励机制 版权问题 2.2. 分片优化的BitTorrent BT下载,首先需要一个种子文件,种子文件包含以下数据: announce - tracker的URL(tracker是特殊的服务器,帮助peers之间联系) info - 该条映射到一个字典,该字典的键将取决于共享的一个或多个文件: name - 建议保存的文件名(一个文件)和目录名称(多个文件) piece length - 每个文件块的字节数。通常256KB = 262144B pieces - 每个文件块的SHA-1的集成Hash。因为SHA-1会返回160
  • Bittorrent tracker request
    Using a torrent file from http://torrent.ubuntu.com:6969/ I am calculating its hash which matches with the hash on the page. Then i make a request to the tracker. Like http://torrent.ubuntu.com:6969/announce?info_hash=9a81333c1b16e4a83c10f3052c1590aadf5e2e20 But i get d14:failure reason63:Requested download is not authorized for use with this tracker.e According to the spec this should work? Tracker Spec General Spec
  • DeepSORT多目标跟踪算法
    DeepSORT 多目标跟踪算法 整体思路 SORT 算法的思路是将目标检测算法得到的检测框与预测的跟踪框的 iou(交并比)输入到匈牙利算法中进行线性分配来关联帧间 Id。而 DeepSORT 算法则是将目标的外观信息加入到帧间匹配的计算中,这样在目标被遮挡但后续再次出现的情况下,还能正确匹配 Id,从而减少 Id Switch。 算法思路 状态估计(state estimation)和轨迹处理(track handing) 状态估计 用一个 8 维空间表示轨迹在某个时刻的状态即 ( u , v , γ , h , x ˙ , y ˙ , γ ˙ , h ˙ ) (u, v, \gamma, h, \dot{x}, \dot{y}, \dot{\gamma}, \dot{h}) (u,v,γ,h,x˙,y˙​,γ˙​,h˙), ( u , v ) (u,v) (u,v)表示 bbox 的中心坐标, γ \gamma γ表示宽高比, h h h表示高度,最后四个变量代表前四个变量的速度信息。使用一个基于匀速模型和线性观测模型的标准卡尔曼滤波器进行目标状态的预测,预测结果为 ( u , v , γ , h ) (u,v,\gamma , h) (u,v,γ,h)。具体关于卡尔曼滤波的解释,可以见我单独说明的文章。 轨迹处理 针对跟踪器: 设置计数器,在使用卡尔曼滤波进行预测时递增
  • linux下启动fastDFS
    1-部署文件服务器需要的软件包 drwxr-xr-x. 10 8980 users 4096 8月 28 03:23 FastDFS drwxrwxr-x. 3 500 500 4096 5月 4 2014 fastdfs-nginx-module -rw-r--r--. 1 root root 17510 9月 21 2017 fastdfs-nginx-module_v1.16.tar.gz -rw-r--r--. 1 root root 344620 9月 21 2017 FastDFS_v5.08.tar.gz drwxr-xr-x. 4 root root 4096 8月 28 03:21 libfastcommon-master -rw-r--r--. 1 root root 161971 10月 17 2016 libfastcommon-master.zip drwxr-xr-x. 9 1001 1001 4096 8月 28 04:40 nginx-1.10.0 -rw-r--r--. 1 root root 908954 4月 26 2016 nginx-1.10.0.tar.gz 2-安装fastDFS 2.1关闭防火墙 查看防火墙状态 [root@localhost nc]# service iptables status 看到防火墙开启了 表格
  • 目标跟踪的深度学习方法 与 opencv实现kcf方法
    目录 概述 31.1. 背景 31.2. 目标跟踪问题描述 31.3. 目标跟踪测试数据集及性能评价标准 4 算法选型 102.1. 现有算法分类 102.2. 图像目标跟踪方法 111.概述1.1.背景行为识别的前提是需要对人体目标进行识别和跟踪,现阶段我们已经通过使用开源人体姿态估计系统openpose实现了人体姿态识别,现在需要对人体目标进行跟踪判断视频后续画面中的人和前面画面中的对应关系。本文就现阶段计算机视觉目标跟踪方面的研究成果做总结描述。1.2.目标跟踪问题描述简单来说,目标跟踪就是在连续的视频序列中,建立所要跟踪物体的位置关系,得到物体完整的运动轨迹。给定图像第一帧的目标坐标位置,计算在下一帧图像中目标的确切位置。跟踪过程中的 光照变化、目标尺度变化、目标被遮挡、目标的形变、运动模糊、目标的快速运动、目标的旋转、目标逃离视差、背景杂波、低分辨率 等现象,都是目标跟踪问题的挑战。根据问题,目标跟踪算法主要有以下几个关键点:1、选取合适的特征:HOG特征,CNN(卷积神经网络)特征2、优秀的分类器:SVM等3、合适的更新模型时间的策略:因为判别模型更新的太频繁会影响跟踪算法的速度,更新速度太慢又会导致目标丢失。1.3.目标跟踪测试数据集及性能评价标准现在比较流行的跟踪Benckmark(基准,数据集)有OTB、VOT、KITTI-tracking
  • BitTorrent磁铁链接如何工作?(How do BitTorrent magnet links work?)
    问题 我第一次使用磁链。 好奇它是如何工作的,我查看了规格并没有找到任何答案。 Wiki说xt意思是“确切的主题”,后跟带有SHA1哈希的格式(在这种情况下为btih )。 我看到提到了base32,知道它是每个字符5位和32个字符,我发现它正好可以容纳160位,这正好是SHA1的大小。 IP地址或其他任何内容都没有空间,只是SHA1。 那么,BitTorrent客户端如何找到实际文件? 我打开了URL Snooper,以查看它是否访问了页面(使用TCP)或进行了查找等操作,但是没有任何反应。 我不知道客户如何找到同龄人。 这是如何运作的? 另外,哈希是什么? 它是所有文件散列在一起的数组的哈希吗? 也许这是所需的实际torrent文件的哈希值(去除了某些信息)? 在虚拟机中,我尝试了与uTorrent(已全新安装)的磁力链接,并设法找到了对等节点。 第一个同龄人来自哪里? 这是新鲜的,没有其他洪流。 回答1 BitTorrent磁链使用1的SHA-1或截断的SHA-256哈希值(称为“ infohash”)来标识洪流。 与跟踪器或其他对等方进行通信时,对等方(客户端)用于标识洪流的值与该值相同。 传统的.torrent文件包含具有两个顶级密钥的数据结构: announce ,标识用于下载的跟踪器以及info ,包含torrent的文件名和哈希。 “ infohash
  • (五)Linux环境搭建fastDFS、nginx以及fastDFS-nginx整合
    fastDFS相关资源下载 搭建工具 1、Xshell:用于连接linux终端,方便操作。 2、Xftp:用于传输文件。 准备工作 一般我们会在linux上,新建一个专门用于存放工具的文件夹。 如:在/usr/local下新建一个software文件夹 通过Xshell连接linux终端 通过Xshell打开Xftp文件传输工具 进行文件传输 安装FastDFS 1、上传FastDFS的相关压缩包 2、安装前置环境 ——通过yum命令下载相关安装包,yum基于网络的安装方式 yum -y install gcc-c++ yum -y install libevent 3、安装libfastcommons cd /usr/local/software tar -zxvf libfastcommonV1.0.7.tar.gz cd libfastcommon-1.0.7 编译安装: ./make.sh ./make.sh install 注意: 如果操作系统是32位,需要将libfastcommon.so文件从/usr/lib64 拷贝到 /usr/lib下 (可通过uname -a 命令查看操作系统的位数) 4、解压FastDFS安装包 tar -zxvf FastDFS_v5.0.5.tar.gz cd FastDFS 编译安装: ./make.sh ./make.sh
  • CVPR 2021 Learning Spatio-Temporal Transformer for Visual Tracking
    动机 对于视觉目标跟踪,卷积核具有局部依赖而全局无关的缺陷。 视觉目标跟踪是计算机视觉中的一个基础而又具有挑战性的研究课题。在过去的几年中,基于卷积神经网络的目标跟踪取得了令人瞩目的进展。然而,由于无论是在空间上还是在时间上卷积核只能处理一个局部邻域,因此不能很好地对图像内容和特征的长程关系进行建模。目前流行的跟踪器,包括离线Siamese跟踪器和在线学习模型,几乎都是建立在卷积运算基础上的。结果表明,这些方法只对图像内容的局部关系建模效果较好,而对长时全局交互的描述不能很好很好的建模。这种缺陷可能会降低模型在处理场景的能力,该场景中全局上下文信息对目标对象的局部化是非常重要的。例如目标经历大规模变化或频繁进出视图。 transformer是全局依赖的,在视觉领域也有很大的发展。 长时相互作用的问题已经通过transformer的使用在序列建模中得到解决。Transformer不仅在自然语言建模和语音识别等领域取得了巨大的成功。近年来,transformer在计算机视觉模型中的应用也得到了很大的发展。受最近的检测转换器(DETR)的启发,提出了一种新的端到端的编码器-解码器transformer跟踪结构,以提高传统卷积模型的性能。 时空信息的挖掘是目标跟踪领域的核心问题。 空间信息和时间信息对目标跟踪都很重要。前者包含目标的外观信息,用于目标定位;后者包含目标在帧间的状态变化
  • 多目标追踪-2019综述《Deep Learning in Video Multi-Object Tracking: A Survey》
    《Deep Learning in Video Multi-Object Tracking: A Survey》 论文链接 近期开始研究多目标追踪,因此先找了一篇比较新的2019年综述性论文入门。 本论文着眼于single-camera videos and 2D data. 将MOT通用算法归纳为4个步骤,并分别介绍了Deep Learning在各步骤中的应用,给出了典型论文以供读者进一步阅读学习。 文章目录 1 Introduction2 MOT: algorithms, metrics and datasets2.1 Introduction to MOT algorithms2.2 Metrics2.3 benchmark datasets 3 Deep learning in MOT3.1 DL in detection step3.2 DL in feature extraction and motion prediction3.3 DL in affinity computation3.4 DL in Association/Tracking step 4 Analysis and comparisons4.1 Setup and organization4.2 Discussion of the results4.2.1 General observations4
  • Sum hours from time tracker to calendar by day
    I've got a working calendar function, and a working sum to calculate the project hours from the time tracker, but I'm struggeling to combine them into a working function. See comments in code to figure out the current progress, a printscreen is also provided below. How can I get the QUERY to echo out the SUM based on the $year $month and $day_num on each row in the calendar? This is my current code: <?php include 'db.php'; // GET USER DATA $sql = "SELECT * FROM users where user_username = '".$_SESSION['username']."'"; $result = $mysqli->query($sql); while($row = $result->fetch_assoc()) {