2016-06-16 8 views
2

Ich benutze Python 2.7 und OpenCV 2.4. Ich möchte das Bild von der Remote-Maschine lesen und anzeigen. Dann versuche ich, die Bibliothek paramiko zu verwenden. Ich kann die Datei jedoch nicht lesen.Python ssh Bild lesen

Hier ist mein Code. Zuerst habe ich alle Bibliotheken und Setup-Verbindung importieren:

import paramiko 
import cv2 
s = paramiko.SSHClient() 
s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
s.connect("XXX.XXX.XXX",22,username="NAME",password='PW',timeout=4) 

Zweitens öffne ich eine Sitzung SFTP und öffnen Sie das Zielbild:

sftp = s.open_sftp() 
remote_file = sftp.open('/home/frame/image.jpg') 

Ich versuche, die remote_file zu drucken: print remote_file

Es **paramiko.sftp_file.SFTPFile object at 0x000000000572AC50**

Schließlich versuche ich, das Bild zu lesen und zu zeigen:

img = cv2.imread(remote_file) 
cv2.imshow("image", img) 

Allerdings kommt Fehler aus:

File "ssh.py", line 25, in <module> 
    img = cv2.imread(remote_file) 
TypeError: expected string or Unicode object, SFTPFile found 

_________________________________________________________________________-

ich um Hilfe bin zu fragen, wie kann ich das Bild von einem anderen entfernten Rechner lesen. Ist mein Weg richtig? Vielen Dank.

+2

Warum erwarten Sie, dass 'imread' (die einen Pfad zu einer Datei akzeptiert) wird mit einem Objekt vom Typ' SFTPFile' arbeiten? Die beste Chance ist, die Binärdatei aus der 'SFTPFile' zu ​​holen und dann' imdecode' zu ​​verwenden. – Miki

+0

@Miki Danke für Ihre Antwort. Wie kann ich die Binärdatei (oder den String) aus der "SFTPFile" holen? – VICTOR

Antwort

2

hier eine Lösung:

import numpy as np 

... 

sftp = s.open_sftp() 
with sftp.open('/home/frame/image.jpg') as f: 
    img = cv2.imdecode(np.fromstring(f.read(), np.uint8), 1) 

cv2.imshow("image", img) 
cv2.waitKey(0) 
+0

Es funktioniert !!!!!!!!!!!!! Danke Stern! – VICTOR