本地电脑使用Python2.7的环境。
主要功能是用摄像头读取图片并使用SFTP服务进行传输。为了让服务器知道数据已经传输完毕了,使用SSH创建一个文件夹,通过查找这个文件夹是否存在来判定是否传输完毕。最后还是用SFTP服务进行处理完图片的回传
我用以下代码和服务器上的faster-rcnn配合,实现本地端的目标检测。
# -*- coding: utf-8 -*-
import os
import os.path
import paramiko
import datetime
import re
import cv2
import time
import numpy as np
config = {
# 本地项目路径
'local_path': 'C:\project\opencv-python',
# 服务器项目路径
'ssh_path': '/root/faster_rcnn3/Faster-RCNN_TF-master/data',
# 项目名
'project_name': 'demo',
# 忽视列表
'ignore_list': [],
# ssh地址、端口、用户名、密码
'hostname': 'fw.trinicloud.cn',
'port': 37294,
'username': 'root',
'password': '778987664'
}
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=config['hostname'], port=config['port'], username=config['username'],password=config['password'])
# ssh传输
transport = paramiko.Transport((config['hostname'], config['port']))
transport.connect(username=config['username'], password=config['password'])
sftp = paramiko.SFTPClient.from_transport(transport)
cap=cv2.VideoCapture(0)
while True:
#从摄像头读取图片
sucess,img=cap.read()
begin1 = datetime.datetime.now()
k=cv2.waitKey(1)
if k == 27:
#通过esc键退出摄像
cv2.destroyAllWindows()
break
res = cv2.resize(img, (400, 300), interpolation=cv2.INTER_CUBIC)
cv2.imwrite("demo/image2.jpg", res)
print('数据保存完毕,保存路径demo/image2.jpg===10%')
local_path='C:\project\opencv-python\demo\image2.jpg'
ssh_path='/root/faster_rcnn3/Faster-RCNN_TF-master/data/demo/image2.jpg'
print('从'),local_path,('传数据到'),ssh_path,('==20%')
sftp.put(local_path, ssh_path)
ssh.exec_command('mkdir /root/faster_rcnn3/Faster-RCNN_TF-master/data/demo/image2')
print('数据上传成功==25%' )
begin2 = datetime.datetime.now()
stdin, stdout, stderr = ssh.exec_command('find /root/faster_rcnn3/Faster-RCNN_TF-master/data/demo/image2')
result = stdout.read().decode('utf-8')
while (len(result) != 0):
stdin, stdout, stderr = ssh.exec_command('find /root/faster_rcnn3/Faster-RCNN_TF-master/data/demo/image2')
result = stdout.read().decode('utf-8')
end2_t = datetime.datetime.now()
time_mini = float(str((end2_t - begin2))[5:14])
print time_mini
end2 = datetime.datetime.now()
print('服务器处理完毕===50%')
print('服务器处理耗时:'), end2 - begin2, ('==60%')
src = '/root/image2.jpg'
des = 'C:/project/opencv-python/image2.jpg'
print('从'), src, ('传数据到'), des, ('==70%')
sftp.get(src, des)
print('数据回传成功==80%')
print('数据一个周期完成==99.9%')
end1 = datetime.datetime.now()
print('花费时间是:'), end1 - begin1, ('==100%')
img = cv2.imread("image2.jpg")
cv2.destroyAllWindows()
cv2.imshow("image2", img)