--- /dev/null
+#include "Utils.h"
+
+using namespace suanzi;
+using namespace cv;
+
+double distance_cosine(const Eigen::VectorXd& u, const Eigen::VectorXd& v)
+{
+ return (1 - u.dot(v) / std::sqrt(u.dot(u) * v.dot(v)));
+}
+
+double distance_euclidean(const Eigen::VectorXd& u, const Eigen::VectorXd& v)
+{
+ Eigen::VectorXd d = u - v;
+ return std::sqrt(d.dot(d));
+}
+
+
+Rect getRectInDetection(const Detection& d)
+{
+ Rect r;
+ r.x = d.center_x - d.width / 2;
+ r.y = d.center_y - d.height / 2;
+ r.width = d.width;
+ r.height = d.height;
+ return r;
+}
+
+double calc_iou_ratio(const Rect& r1, const Rect& r2)
+{
+ double iou;
+ Rect r_inner = r1 & r2;
+ Rect r_union = r1 | r2;
+ if (r_inner.area() > 0){
+ iou = 1.0 * r_inner.area() / r_union.area();
+ }else{
+ Rect rr;
+ rr.x = min(r1.x + r1.width, r2.x + r2.width);
+ rr.y = min(r1.y + r1.height, r2.y + r2.height);
+ rr.width = max(r1.x, r2.x) - rr.x;
+ rr.height = max(r1.y, r2.y) - rr.y;
+ iou = -1.0 * rr.area() / r_union.area();
+ }
+ return iou;
+
+}