Étape 3: Le logiciel
J’utilise Raspian OS, juste le téléchargement par défaut sur le site de framboise pi.
Pour collecter toutes les images, j’utilise un serveur de fichiers central (dans mon cas, j’utilise un Qnap). J’ai configuré l’image raspbian de se connecter au serveur de fichiers en utilisant cifs. Cela se fait dans le fichier/etc/fstab.
J’utilise également le serveur de fichier central pour stocker mes logiciels, donc je peux apporter des modifications sans avoir à mettre à jour chaque framboise sur ses propres.
Après avoir terminé cette image, j’ai utilisé le dd (sur mon mac) pour cloner la carte de SD x 40 pour chaque framboise.
J’ai voulu écrire un script « écoute » qui irait chaque framboise, écoutant un réseau particulier diffusion paquet qui pourrait déclencher la caméra puis enregistrez la photo et copiez-le sur le serveur de fichiers. Comme je l’entends toutes les images d’être stockées dans un répertoire unique (un seul répertoire par coup), j’utilise l’adresse IP locale de chaque framboise (les 3 derniers chiffres) pour un préfixe du nom de fichier.
Voici le script écoute python que j’utilise :
#! / usr/bin/python
douille d’importation
importer des struct
fcntl Import
importation des sous-processus
import sys
MCAST_GRP = « 224.1.1.1 »
MCAST_PORT = 5007
chaussettes = socket (socket.AF_INET, socket. SOCK_DGRAM, prise de courant. IPPROTO_UDP)
Sock.setsockopt (prise de courant. SOL_SOCKET, prise de courant. SO_REUSEADDR, 1)
Sock.bind (('', MCAST_PORT))
mreq = struct.pack (« 4sl », socket.inet_aton(MCAST_GRP), prise de courant. INADDR_ANY)
Sock.setsockopt (prise de courant. IPPROTO_IP, prise de courant. IP_ADD_MEMBERSHIP, mreq)
def get_ip_address(ifname) :
s = socket (socket.AF_INET, socket. SOCK_DGRAM)
Return socket.inet_ntoa (fcntl.ioctl)
s.Fileno(),
0X8915, # SIOCGIFADDR
struct.Pack ('256s ', ifname[:15])
) [20:24])
ID = get_ip_address('eth0')
IP1, ip2, ip3, ip4 = id.split('.')
imprimer "ID:" + ip4
#create un fichier d’options, ce fichier doit contenir les paramètres pour le cmd d’image raspistill
optionfile = open('/server/options.cfg','r')
options = optionfile.readline()
optionfile.Close()
imprimer "optons:" + options
While True :
données = sock.recv(10240)
données = data.strip()
Si données == « reboot » :
imprimer « redémarrage... »
cmd = "sudo reboot"
PID = subprocess.call (cmd, shell = True)
autre chose :
imprimer « shooting » + données
cmd = « raspistill -o /tmp/photo.jpg » + options
PID = subprocess.call (cmd, shell = True)
annuaires imprimés « création »
cmd = ' mkdir/Server/3dscan /' + données
PID = subprocess.call (cmd, shell = True)
imprimer « copier l’image »
cmd = 'cp /tmp/photo.jpg/Server/3dscan /' + données + "/" + données + "_" + ip4 + ".jpg"
PID = subprocess.call (cmd, shell = True)
impression « photo téléchargée »
Pour lancer toutes les framboises pour prendre une photo, j’ai créé un script « envoyer ». Qui demanderait un nom. Ce nom est envoyé vers les framboises à inclure dans le préfixe du nom de fichier. Donc, je sais qui proviennent des images.
Ici, le python envoyer script :
douille d’importation
import sys
moment de l’importation
Print "nom de la photo:'
n = sys.stdin.readline()
n = n.strip('\n')
MCAST_GRP = « 224.1.1.1 »
MCAST_PORT = 5007
chaussettes = socket (socket.AF_INET, socket. SOCK_DGRAM, prise de courant. IPPROTO_UDP)
Sock.setsockopt (prise de courant. IPPROTO_IP, prise de courant. IP_TTL, 2)
Sock.SendTo (n, (MCAST_GRP, MCAST_PORT))
L’écoute script vérifie le nom reçu. Si le nom est remise à zéro, de recharger ou de redémarrage il fait une action spéciale, au lieu de tirer une photo.
Pour configurer les options je veux utiliser pour raspistill (la valeur par défaut image logiciel de capture sur la framboise pour la caméra de PI), j’utilise un fichier options.cfg pour configurer cela. Encore une fois, cela est stocké sur le serveur de fichier central, si je peux facilement changer les options.
J’ai fait quelques tests pour voir comment dans la synchro toutes les tartes aux framboises-prendre la photo. Comme ils sont tous de recevoir le paquet de diffusion réseau au moment exactement les mêmes, j’ai trouvé ce grand travaillé. J’ai fait une installation d’essai avec 12 unités tous prendre une photo de mon iPhone exécutant l’application de chronomètre. Chaque photo qu’il a capturé exacte même 1/10e de seconde.