Accès aux fichiers image dans le nextcloud#

Ce notebook va démontrer comment télécharger des fichiers depuis un serveur nextcloud, comment les traiter localement et téléverser les résultats sur le serveur.

Si vous travaillez ou étudiez à l’Université de Leipzig, vous pouvez vous inscrire pour obtenir un compte sur un tel serveur ici.

from skimage.io import imread, imsave
from skimage.measure import label
import ipywidgets as widgets
import stackview

import nextcloud_client

Connexion#

Après avoir exécuté la cellule suivante localement, vous verrez trois champs de saisie où vous pourrez entrer l’URL du serveur, le nom d’utilisateur et le mot de passe.

server_widget = widgets.Text(value='https://speicherwolke.uni-leipzig.de', description='Server')
username_widget = widgets.Text(description='Username:')
password_widget = widgets.Password(description='Password')

widgets.VBox([server_widget, username_widget, password_widget])

NE PAS appuyer sur Shift-Enter après avoir saisi le nom d’utilisateur et le mot de passe

if username_widget.value == '':
    raise RuntimeError('Enter username and password above')
ncc = nextcloud_client.Client(server_widget.value)
ncc.login(username_widget.value, password_widget.value)
# réinitialiser le mot de passe
password_widget.value = ""

Un message d’erreur typique est 401 : Accès refusé. Vérifiez votre nom d’utilisateur et votre mot de passe.

Parcourir le serveur distant#

Pour voir si la connexion a réussi, nous pouvons simplement lister les fichiers dans un dossier donné.

# entrez un dossier sur le lecteur owncloud qui existe. '/' est le dossier racine.
remote_folder = "/data/"

for f in ncc.list(remote_folder):
    print (f.path)
/data/blobs.tif

Récupération d’un fichier#

Nous pouvons télécharger un fichier dans un répertoire local.

# entrez le fichier source ici
remote_source_file = '/data/blobs.tif'
# entrez la destination
local_file = 'blobs.tif'

ncc.get_file(remote_path=remote_source_file, 
            local_file=local_file)
True

Traitement d’image#

Comme nous avons téléchargé le fichier, le traitement d’image fonctionne comme d’habitude.

image = imread(local_file)
stackview.insight(image)
shape(254, 256)
dtypeuint8
size63.5 kB
min8
max248
labels = label(image > image.max() / 2)
stackview.insight(labels)
shape(254, 256)
dtypeint32
size254.0 kB
min0
max64

Téléversement des résultats#

Avant de téléverser une image sur le cloud, nous devons la sauvegarder localement.

local_file_to_upload = "blobs_labels.tif"

imsave(local_file_to_upload, labels, check_contrast=False)

Nous allons téléverser le fichier dans ce dossier :

remote_folder
'/data/'
ncc.put_file(remote_folder, local_file_to_upload)
True

Pour être sûr, nous vérifions si le fichier est arrivé en affichant à nouveau les fichiers du dossier.

for f in ncc.list(remote_folder):
    print (f.path)
/data/blobs.tif
/data/blobs_labels.tif

Déconnexion#

Quand vous avez terminé, déconnectez-vous !

ncc.logout()
True