一、效果如下
检测-跟踪-绊线
二、方案:检测→跟踪→事件检测
三、交叉检测模块
参考project:
https://github.com/yas-sim/object-tracking-line-crossing-area-intrusion
3.1 如何判断两条直线是否相交?
判断两线段相交_肘子的博客-CSDN博客_线段相交 『判断两线段相交』
原理概述:
①首先是排除。『信噪比』的概念。要在正+类和负-类中,进行负类剔除。再进行正类判断
好处:在穷遍历的时候,减少时间开销。
②用叉积来进行约束:叉积的正负符号代表A向量在B的左侧还是右侧,顺时针or逆时针方向
直线相交:必须保证是分立两侧,即CA和CD,CB和CD的叉积符号应该相反。同理,两
个方向应该同时约束才对。
③方向判断,A→B,or B←A,是看内积符号,内积>0,cos>0
x1y2-x2y1<0,同向; ux*vy - uy*vx < 0, u × v == traj × line < 0 ,说明轨迹在绊线的左侧
line=(A,B),traj=(prev,curr)。v=A-B, u=prev-curr. u在v的左侧。从A->B的左侧穿越。
A->B的左侧为:AB=(x1,y1),则顺时针为:s=(y1,-x1),s×AB=y1*y1-x1*(-x1)>0,所以(y1,-x1)在AB的顺时针方向。