一.目标:
1.对环境的配置
2.对水下罗非鱼的目标检测和跟踪
二.步骤实现:
- 安装pycharm
- 安装anaconda以及对pycharm环境配置(opencv,pytorch.etc)
- 用labelme进行图片选择并生成xml标签文件
- 下载及修改代码
- 进行数据集的调整训练
- 对图片进行检测及调整训练结果,对视频进行检测并调整
- 得出结果并进行调整
三.代码:
将要检测的视频以图片的格式输出:
import cv2
import argparse
import os
def parse_args():
"""
Parse input arguments
"""
parser = argparse.ArgumentParser(description='Process pic')
parser.add_argument('--input', help='video to process', dest='input', default=None, type=str)
parser.add_argument('--output', help='pic to store', dest='output', default=None, type=str)
# default为间隔多少帧截取一张图片
parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=10,type=int) # 此处可更改提取帧的间隔
args = parser.parse_args(['--input', 'F:/untitled/yolov5-5.0/fish1.mp4', '--output','F:/untitled/yolov5-5.0/data/images/']) # 此处添加路径,input为输入视频的路径 ,output为输出存放图片的路径
return args
def process_video(i_video, o_video, num):
cap = cv2.VideoCapture(i_video)
num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)
expand_name = '.jpg'
if not cap.isOpened():
print("Please check the path.")
cnt = 0
count = 0
while 1:
ret, frame = cap.read()
if not ret:
break
frame = cv2.resize(frame, (1500,700)) # 在尺寸可以修改图片尺寸
cnt += 1
if cnt % num == 0:
count += 1
print(os.path.join(o_video, str(count) + expand_name))
cv2.imwrite(os.path.join(o_video, str(count) + expand_name), frame)
if __name__ == '__main__':
args = parse_args()
if not os.path.exists(args.output):
os.makedirs(args.output)
print('Called with args:')
print(args)
process_video(args.input, args.output, args.skip_frame)
将.jpg格式的图片用labelme裁处‘fish’的标签文件,并将它转化为xml标签文件
Form:GitHub - ultralytics/yolov5 at v5.0
取yolov5的开源包
运用命令 pip install -r requirement.txt
添加自己的数据集并生成训练集(train)和测式集(val)
- Annotations(存放xml文件)
- JPMGImage(存放图片文件)
添加权重文件:yolov5m.pt;
将图片分成测试集和训练集,并提取文件名生产txt文件;
在yolov5.yaml和voc.yaml进行修改类别个数及种类;
修改train.py并进行测试:
电脑配置低,适当降低wokers和batch—size的default值
得出best.pt及last.pt权重文件
修改detect.py并进行视频检测:
四.实验结果
视频测试:
附pytorch安装:
http://t.zoukankan.com/farewell-farewell-p-14046076.html
(卸载部分不用看,就看安装,顺序比较清爽)



