国内两大摄像头厂商“大华”、“海康威视”,旗下摄像头均支持ONVIF,但是两个厂家对ONVIF的理解有一定的相差。最近在做机器人视觉的时候,选型的过程中才有了4款摄像头(大华、海康各两款)。
记录一下开发过程中遇到的坑:
两家都支持SOAP的WS-Username Token和Digest鉴权,但是...(坑来了),大华在进行WS-Username Token鉴权时,会严格检查created域,当客户端与IPC的时间跨度相差比较大时,大华这边直接“401 Unauthorized”。相比之下海康可以顺利通过。这里就形成了一个隐形的死循环问题:由于摄像头刚刚初始化并上电,时间是错误,那么在进行下一步操作前,得先同步时间...问题就在这里,时间不对,要同步时间 => 要同步时间,就得访问设置时间的SOAP接口 => 要调用SOAP,就要鉴权 => 时间不对,鉴权失败......

MMP,折腾了1个星期,10+天没更新,上周末突然发现校时的SOAP接口Digest方式鉴权时可以通过的。于是只好曲线救G。
用 Digest 鉴权同步时间,其他接口继续使用 WS-Username Token

折腾了两天,现在终于从坑里爬出来了,留个笔记。
众所周知,ffmpeg是个非常牛B lity的东西,很多需要拉流或者推流的时候,这都是不二选择。并且这货还有其他很多功能,比如剥离视频中的图像与音轨,比如转换视频、音频的格式。当下一个正在进行中的项目,需要通过ONVIF协议,把机器人的摄像头H.265画面回传到控制中心,这就有了这次掉坑里的经历。
注意,重点来了: ffmpeg 有个 rtsp_transport 参数,通过设定这个参数值为 tcp ,使得ffmpeg强制使用tcp协议传输RTSP流(RTSP流模式使用UDP方式传输)。
错误示范:
ffmpeg -rtsp_transport tcp -i rtsp://camera-ip-address/channel/stream?param=value&other=something -f rtsp rtsp://media-server/app/stream_id?token=xxx
如果这样来跑ffmpeg,这货死活就是要走UDP。而数据中心的WAF刚好又关闭了所有的UDP端口......郁闷的我都想提流程申请开通UDP了。

GOOGLE翻了N多文章,发现了一个细节,stackoverflow上很多高分回答中,rtsp_transport这个参数的位置都在后面。如下正确示范:
ffmpeg -i rtsp://camera-ip/channel/stream?param=value -f rtsp -rtsp_transport tcp rtsp://media-server/app/stream-id?token=xxx

............刚吃完饭的我,顺手就抄个作业,MMP,世界真美好。ffmpeg现在终于老老实实的用TCP传输了。今天可以按时睡觉。

最近才知道一个让我哭笑不得的事情:在广东人眼中,广东以外的省,统统都是北方......
某个在广东的前同事最近向我咨询,如何改进GPS/北斗定位设备的数据质量,如何提高超载监控设备的数据精准度。顺便palapala吐槽了一堆市面上现有的某两大知名品牌车载终端的数据质量(我啥都没说,懂的都懂)。
拉了个网络会议,邀请了某通的算法工程师,大致了解了一下情况:
1、目前国五和国六排放的工程车,终端数据都要遵循JT808国标
2、定位数据偶尔发生漂移,少则几百米,多则几十公里
3、车子的承重数据波形图,瞬时漂移多达1000KG以上,距离90%的精确要求相差甚远

分析了问题的原因:
1、安装的时候,既为了省事,也为了防破坏,GPS天线都是跟终端用扎带捆绑在一起,塞到副驾驶位的工具箱里面。这样就导致了GPS接收数据的不稳定性。查看了轨迹图,漂移较严重的时候,大多在周边有高楼的情况下。某些特殊位置(地图上没有名字的区域),信号失真,这个应该是安全考虑,附近区域做了特殊防护措施。
2、承重数据,当前的算法居然是利用JT808的手刹信号作为标定点...让我哭笑不得。司机的驾驶习惯、终端的数据延迟等因素,都会导致手刹信号不可靠。还有一些特殊场景:诸如修路的时候,搅拌车边走边卸料,这就不可能去拉手刹。

解决办法:
1、把天线外露,放置到驾驶楼的顶部
2、采用卡尔曼滤波算法,核心思想:预测+估值,计算出合理的数值区间,让波动收敛在可控范围内。

改进意见是提了,但愿这个问题尽快得到解决。

ARM漫天飞的年代,没必要还在坚守古老的C89了。谭浩强教授的C语言教程都升级多少个版本了,嵌入式行业还在抱着古董级的东西不放......上一篇文章,贴了AHT20传感器的示例,所以干脆一不做二不休,顺便把最近写的INA226传感器的Python版代码也公布了。

说明一下:

  1. INA226不贵,某宝上随便搜搜就知道,是德州仪器的
  2. 这个SOC是I2C协议,兼容SMBUS,所以可以直接用Python的smbus2组件
  3. 如果你怕Python工作不稳定,那么我告诉你:你想多了,我这里在工业环境下照样好好的。实在不放心,那就systemd托管起来

不废话,上图:
1.png
2.png

嵌入式开发,动不动就是C,千篇一律的C,甚至好多都特么的还是古老的ANSI89版的标准。
大学里的C语言基础教程都升级了,这嵌入式行业就这么不思进取么?
看看奥松官方的DEMO,还是用的GPIO作为示例,我也是醉了。
最近的项目刚好用到了这款传感器,都啥年代了,ARM遍地都是......所以决定,在条件允许的前提下,抛弃古老的C语言,尝试着用Python3.x来实现一下传感器数据的读取。
话不多说,上图(要抄作业的自己照着图敲一遍,别老想着Ctrl+C & Ctrl+V,这样不会有进步的)
1.png
2.png
3.png
4.png
5.png