Yolo+Deepsort 动态追踪
动态追踪算法
算法地址:https://github.com/mikel-brostrom/Yolov7_StrongSORT_OSNet。
pip install -r requirements.txt
运行
项目下载好后,根据github的使用文档,可以在项目目录下执行:
python track.py --source test.mp4 --strong-sort-weights osnet_x0_25_market1501.pt
如果执行
python track.py --source test.mp4
项目会自动去google网盘下载osnet模型,所以可以提前下载StrongSort模型模型下载区,然后用--strong-sort-weights
指定即可这里 source 可以是视频文件、摄像头 ID 或者网络视频(rtsp、http、https 都支持)
Yolo 模型
这个项目使用的Yolo算法,所以在里面的Yolo目录中可以像往常一样使用yolo算法生成自己的训练模型,最后在追踪算法内指定YOLO模型即可
--yolo-weights yolov7.pt --img 640
StrongSort模型
模型可以到 https://kaiyangzhou.github.io/deep-person-reid/MODEL_ZOO 下载,这里的模型后缀是 pth,可以直接重命名为 pt
代码解析
打开track.py
从109行开始加载数据流,dataset为要识别的视频流
148行开始便利dataset视频流,将每一帧作为输入,im,im0s,im0都是视频的一帧,赋值给了curr_frames, prev_frames,当前帧和上一帧
162行pred = model(im),pred为帧图片识别结果
198行将当前帧图片和上一帧图片作为入参输入到strongSort内
利用算法
算法在:track.py 中,算法执行可以选择
--show-vid
从而开启一个识别视频流,同时后台会实时的打印识别到的物体算法所有的入参可以在 track.py 第 287行中看到
算法在第248行打印识别结果,可以在这里将识别结果发送到kafka或者写入redis操作,从而配合其他系统使用
算法在171行开始处理图形识别
Yolo视觉识别
Yolo算法
Yolo是一个非常棒的视觉识别算法,项目地址:https://github.com/ultralytics/yolov5
个人地址:
/home/tr/Documents/JupyterNotebook/YOLOv5
在myTrain.ipynb中写了使用训练的demo
文件目录介绍
data目录:存放训练数据集,数据标记,训练配置等(yaml文件)
model 模型算法核心(不用关注)
runs 每执行一次detect,或者训练都会在目录下生成新的结果目录
weights 存放模型结果
标记图片工具-生成训练工具
1 | docker pull heartexlabs/label-studio:latest\n |
docker 拉取完毕后访问6002端口即可,注册账户,上传图片进行标记,具体使用方法很简单,标记完毕后导出数据格式为yolo
编写训练配置
在label-studio中标记好导出的数据有两个目录,images和labels,labels内每个txt文件对应各自的图片文件,第一列为物品类别,后面分别是方框的xy坐标
需要注意的是,第一列的类别标签一会要作为配置文件内的类别,不能弄混
假设导出的数据目录为:tr03(内有images和labels目录),放入YOLOV5/datasets内,创建文件:YOLOV5/yolov5/data/tr03.yaml,内容如下
1 | # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] |
Yolo算法的训练
Yolo已经存在了一些训练好的模型,我们再次训练的时候,可以基于已有的模型,也可以自己从头训练
!python train.py --img 640 --batch 16 --epochs 600 --data tr03.yaml --weights ./weights/yolov5s.pt
这个命令就是基于 weights目录下的yolov5s.pt模型训练,训练600次
执行完毕以后,会在runs目录下生成最新结果,我们的模型文件也在其中
Yolo算法的使用
有了模型文件后可以利用模型识别各种图片
1 | # YOLOv5 PyTorch HUB Inference (DetectionModels only) |
Esp8266入门
orika使用
orika
一、Orika背景介绍
Orika是java Bean映射框架,可以实现从一个对象递归拷贝数据至另一个对象。在开发多层应用程序中非常有用。在这些层之间交换数据时,通常为了适应不同API需要转换一个实例至另一个实例。
有很多方法可以实现:硬代码拷贝或Dozer实现bean映射等。总之,需要简化不同层对象之间映射过程。
Orika使用字节码生成器创建开销最小的快速映射,比其他基于反射方式实现(如,Dozer)更快。之前使用Bean Copy 性能非常慢,发现在这个领域业界还是有很多新秀的。 Orika 应该就算一个比较好的吧。
二、优势
性能
大概是Dozer的8-10 倍, 这个上面的已经做了描述内存消耗
大概是Dozer内存消耗的一半多点。 为什么做到这点的还没想清楚, 估计是因为运行期不需要维护复杂的Mapping 关系。 不需要大量的Mapping 关系查找以及需要的对这些查找优化所消耗的空间。简单
Orika的代码短小精悍, 而且可读性非常强, Dozer如果要加减一个功能, 不才完全没有信心, Orika 我还是可以偶尔在Orika里面打几个酱油的。
三、基础使用
Maven项目依赖包:POM文件直接依赖进去即可。
1 | <dependency> |
创建两个Bean对象,用于复制使用。
1 | // UserVo对象 |
2.A集合复制到B集合(集合复制)
1 | //1.普通逻辑处 |
四、高级使用方法
创建两个Bean对象,用于复制使用。
UserVo对象
1 | @Data //Set GET方法 |
User对象
1 | @Data |
使用场景(对象A与对象B中属性不一致时,如果对象中属性太多,普通逻辑处理代码太多)
1.A对象复制到B对象,对象中属性不一样时
1 | //业务场景,将A对象复制B对象中,A对象中的字段与B对象中的字段不一致 |
2.A集合对象复制到B集合对象,对象中属性不一样时
1 | //1.普通逻辑处里A对象中与B对象字段不一致处理 |
五、总结工具类
1 | /** |