一、使用urllib,paramiko读取指定图片和视频
paramiko的sftp用于获取服务器上的指定文件名,需要安装openssl-server,openssl-client
urllib用于读取图片和视频。
需要注意:读取http视频文件需要将moov移动到mp4的头部,使用ffmpeg
ffmpeg -i a.mp4 -c copy -movflags faststart a1.mp4
可以自己准备两台电脑尝试:com1,com2
电脑com1开启http文件服务,nohup 后台执行服务
nohup python3 -m http.server 8001
打开浏览器访问文件,结果如下图。
二、参考代码如下
import paramiko
from ipdb import set_trace
import cv2
import os
import urllib
import numpy as np
# 服务器信息,主机名(IP地址)、端口号、用户名及密码
hostname = "192.168.0.165"
port = 22
username = "liux"
password = "123"
# 建立SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username, password,compress=True)
# 建立SFTP连接
sftp = ssh.open_sftp()
# 获取图片文件名
file_names = []
folder_path = '/home/liux/sftp/'
for file_info in sftp.listdir_attr(folder_path):
if not file_info.filename.startswith('.'): # 排除无效文件,如'.DS_Store'
#video mp4
# if file_info.filename.endswith((".mp4")):
# img
if file_info.filename.endswith(('.jpeg', '.jpg', '.png')):
file_names.append(file_info.filename)
# video url
# imagepath = os.path.join('http://192.168.0.165:8001/', file_names[0])
# cap = cv2.VideoCapture(imagepath)
# image url
imagepath = os.path.join('http://192.168.0.165:8001/', file_names[0])
resp = urllib.request.urlopen(imagepath)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image,cv2.IMREAD_COLOR)
cv2.imwrite("result.jpg",image)
# 关闭SFTP连接
sftp.close()
print(file_names)