文件在我电脑的安装路径
/home/hp/miniconda3/envs/env_py36
激活方式source activate env_py36 替代了如下步骤 激活了miniconada的虚拟环境
注意:在home下ctrl+h显示隐藏文件,打开.bashrc文件,最后修改
1:
如下写法/home/hp/miniconda3/bin在前,
export PATH="/home/hp/miniconda3/bin:$PATH"
因而先运行虚拟miniconda.
2:
如果需要用原来的装了tenseoflow的python需要改写
export PATH="$PATH:/home/hp/miniconda3/bin"
这样先运行我原来的python
问题三:(已解决)
找不到tools模块
解决办法:只需要完成红线部分,赋予地址即可,不然找不到
进入SiamMask文件夹,读取当前路径,给予PAYTHONPATH当前路径
1 每次更改bashrc之后ctrl+s保存
2 另外当前终端需要source ~/.bashrc来激活其中内容。
3 或者可以重新开启终端,上述步骤会自动运行
chmod +x的意思就是给执行权限
如下参考下面博客:
https://blog.csdn.net/u012106306/article/details/80436911
LINUX下不同的文件类型有不同的颜色,这里
举例
蓝色表示目录;
绿色表示可执行文件;
红色表示压缩文件;
浅蓝色表示链接文件;
灰色表示其它文件;
因此如果只是普通的上传start.sh这个文件,那么上传之后也就是一个普通的文件,不能执行
PS:UBUNTU终端下并没有变化一直蓝色
通过RunDemo.sh脚本文件,自动运行多重指令(PS:赋予.sh文件权限 chmod +x RunDemo.sh)
如图放置
RunDemo.sh文件内容如下:
#cp ./DownloadModel/* ./SiamMask-master/experiments/siammask/
#source activate env_py36
#上面两条命令要提前在终端里执行完毕
cd SiamMask
export SiamMask=$PWD
# bash make.sh
export PYTHONPATH=$PWD:$PYTHONPATH
cd $SiamMask/experiments/siammask
# export PYTHONPATH=$PWD:$PYTHONPATH
python ../../tools/demo.py --resume SiamMask_DAVIS.pth --config config_davis.json
参考作者如下说明
先是原版本:demo.py
# --------------------------------------------------------
# SiamMask
# Licensed under The MIT License
# Written by Qiang Wang (wangqiang2015 at ia.ac.cn)
# --------------------------------------------------------
import glob
from tools.test import *
parser = argparse.ArgumentParser(description='PyTorch Tracking Demo')
parser.add_argument('--resume', default='', type=str, required=True,
metavar='PATH',help='path to latest checkpoint (default: none)')
parser.add_argument('--config', dest='config', default='config_davis.json',
help='hyper-parameter of SiamMask in json format')
parser.add_argument('--base_path', default='../../data/tennis', help='datasets')
args = parser.parse_args()
if __name__ == '__main__':
# Setup device
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
torch.backends.cudnn.benchmark = True
# Setup Model
cfg = load_config(args)
from custom import Custom
siammask = Custom(anchors=cfg['anchors'])
if args.resume:
assert isfile(args.resume), '{} is not a valid file'.format(args.resume)
siammask = load_pretrain(siammask, args.resume)
siammask.eval().to(device)
# Parse Image file
img_files = sorted(glob.glob(join(args.base_path, '*.jp*')))
ims = [cv2.imread(imf) for imf in img_files]
# Select ROI
cv2.namedWindow("SiamMask", cv2.WND_PROP_FULLSCREEN)
# cv2.setWindowProperty("SiamMask", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
try:
init_rect = cv2.selectROI('SiamMask', ims[0], False, False)
x, y, w, h = init_rect
except:
exit()
toc = 0
for f, im in enumerate(ims):
tic = cv2.getTickCount()
if f == 0: # init
target_pos = np.array([x + w / 2, y + h / 2])
target_sz = np.array([w, h])
state = siamese_init(im, target_pos, target_sz, siammask, cfg['hp']) # init tracker
elif f > 0: # tracking
state = siamese_track(state, im, mask_enable=True, refine_enable=True) # track
location = state['ploygon'].flatten()
mask = state['mask'] > state['p'].seg_thr
im[:, :, 2] = (mask > 0) * 255 + (mask == 0) * im[:, :, 2]
cv2.polylines(im, [np.int0(location).reshape((-1, 1, 2))], True, (0, 255, 0), 3)
cv2.imshow('SiamMask', im)
key = cv2.waitKey(1)
if key > 0:
break
toc += cv2.getTickCount() - tic
toc /= cv2.getTickFrequency()
fps = f / toc
print('SiamMask Time: {:02.1f}s Speed: {:3.1f}fps (with visulization!)'.format(toc, fps))
再是改进后的直接读取视频
:demo.py
# --------------------------------------------------------
# SiamMask
# Licensed under The MIT License
# Written by Qiang Wang (wangqiang2015 at ia.ac.cn)
# --------------------------------------------------------
import glob
from tools.test import *
parser = argparse.ArgumentParser(description='PyTorch Tracking Demo')
parser.add_argument('--resume', default='', type=str, required=True,
metavar='PATH',help='path to latest checkpoint (default: none)')
parser.add_argument('--config', dest='config', default='config_davis.json',
help='hyper-parameter of SiamMask in json format')
parser.add_argument('--base_path', default='../../data/tennis', help='datasets')
args = parser.parse_args()
if __name__ == '__main__':
# Setup device
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
torch.backends.cudnn.benchmark = True
# Setup Model
cfg = load_config(args)
from custom import Custom
siammask = Custom(anchors=cfg['anchors'])
if args.resume:
assert isfile(args.resume), '{} is not a valid file'.format(args.resume)
siammask = load_pretrain(siammask, args.resume)
siammask.eval().to(device)
# Parse Image file
img_files = sorted(glob.glob(join(args.base_path, '*.jp*')))
ims = [cv2.imread(imf) for imf in img_files]
###Modify###
VeryBig=999999999 # 用于将视频框调整到最大
Cap = cv2.VideoCapture(0) # 设置读取摄像头
# Cap.set(cv2.CAP_PROP_FRAME_WIDTH,VeryBig)
# Cap.set(cv2.CAP_PROP_FRAME_HEIGHT,VeryBig)
ret, frame = Cap.read() # 读取帧
ims = [frame] # 把frame放入列表格式的frame, 因为原文是将每帧图片放入列表
###Modify###
# Select ROI
cv2.namedWindow("SiamMask", cv2.WND_PROP_FULLSCREEN)
# cv2.setWindowProperty("SiamMask", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
try:
init_rect = cv2.selectROI('SiamMask', ims[0], False, False)
x, y, w, h = init_rect
except:
exit()
toc = 0
###Modify### 此部分被下面替换
# for f, im in enumerate(ims): # 列表中逐个提取图片
# tic = cv2.getTickCount()
# if f == 0: # init
# target_pos = np.array([x + w / 2, y + h / 2])
# target_sz = np.array([w, h])
# state = siamese_init(im, target_pos, target_sz, siammask, cfg['hp']) # init tracker
# elif f > 0: # tracking
# state = siamese_track(state, im, mask_enable=True, refine_enable=True) # track
# location = state['ploygon'].flatten()
# mask = state['mask'] > state['p'].seg_thr
# im[:, :, 2] = (mask > 0) * 255 + (mask == 0) * im[:, :, 2]
# cv2.polylines(im, [np.int0(location).reshape((-1, 1, 2))], True, (0, 255, 0), 3)
# cv2.imshow('SiamMask', im)
# key = cv2.waitKey(1)
# if key > 0:
# break
# toc += cv2.getTickCount() - tic
###Modify###
im=frame
f=0
target_pos = np.array([x + w / 2, y + h / 2])
target_sz = np.array([w, h])
state = siamese_init(im, target_pos, target_sz, siammask, cfg['hp']) # init tracker
while(True):
tic = cv2.getTickCount()
ret, im = Cap.read() # 逐个提取frame
if (ret==False):
break;
state = siamese_track(state, im, mask_enable=True, refine_enable=True) # track
location = state['ploygon'].flatten()
mask = state['mask'] > state['p'].seg_thr
im[:, :, 2] = (mask > 0) * 255 + (mask == 0) * im[:, :, 2]
cv2.polylines(im, [np.int0(location).reshape((-1, 1, 2))], True, (0, 255, 0), 3)
cv2.imshow('SiamMask', im)
key = cv2.waitKey(1)
if key > 0:
break
toc += cv2.getTickCount() - tic
f=f+1
###Modify###
toc /= cv2.getTickFrequency()
fps = f / toc
print('SiamMask Time: {:02.1f}s Speed: {:3.1f}fps (with visulization!)'.format(toc, fps))