venerdì 4 luglio 2014

Raspberry Pi First Boot

Mentre eseguivo le varie configurazioni del Raspberry Pi (installare software di terze parti, compilare librerie esterne ecc... ecc...), più volte è successo che ho "perso tutto" a causa di miei errori o altri problemi e sono stato costretto a rifare tutto da capo. Avendo solamente una SD da 32GB non potevo nemmeno utilizzare lo stratagemma del Backup. Quindi ho creato un semplice file .txt contenente tutte le operazioni da eseguire (passo per passo in ordine) in modo da riportare il mio Rasoberry Pi alla situaizone in cui si trovava all'ultimo utilizzo. Il file contiene quindi tutta la parte di configurazione iniziale, l'installazione di software e di librerie esterne.

(N.B: segue dopo questo post la guida dettagliata)

Potete scaricare il file firstboot.txt al seguente indirizzo: firstboot.txt

Oppure lo trovate anche su pastebin: firstboot.txt su Pastebin

Questo è il contenuto del file firstboot.txt:

13 commenti:

  1. Salve,
    Grazie per il tutorial. Ho seguito tutti i passi della guida riguradanti l'installazione di OpenCV e del driver uv4l. Prendendo solo la parte di codice python che mi interessava (quella inerente all'acquisizione di un flusso video) ho scritto:

    import cv2


    cv2.namedWindow("preview")

    vc = cv2.VideoCapture(0)

    #vc.set(3,128) #con queste due righe dava errore
    #vc.set(4,128)


    if vc.isOpened(): # try to get the first frame

    rval, frame = vc.read()

    else:

    rval = False

    while rval:

    cv2.imshow("preview", frame)

    rval, frame = vc.read()

    key = cv2.waitKey(33)

    if key == 27: # exit on ESC

    break

    Tutto funziona perfettamente ma il flusso video, almeno ciò che mi viene visualizzato, è leggermente ritardato (se confrontato a ciò che si ottiene con comandi linux del tipo 'raspivid' o 'raspistill'). Avresti qualche suggerimento in proposito? Grazie

    RispondiElimina
    Risposte
    1. Ciao Marco, sei sicuro di aver installato i Driver in maniera corretta e di averli configurati correttamente?
      È da molto che non metto mano su quel pezzo di codice ma ricordo che alcuni problemi simili a quello di cui hai parlato tu si verificavano quando non venivano installati correttamente i driver un4l.
      N.B: Un ritardo sarà comunque e sempre presente nel flusso del video a causa delle capacità della scheda RPi. ;)

      Elimina
    2. Grazie per la tempestiva risposta. Come potrei verificare che l'installazione sia o meno andata a buon fine ? Rifacendola daccapo? Per quanto riguarda il ritardo sempre presente sono daccordo con te ma non riesco a capire come mai i comandi linux raspivid o raspistill funzionino in real-time (o molto vicini al real-time) mentre OpenCV sia più lento.

      Elimina
    3. Ma quindi non stai applicando nessun filtro di OpenCV? Strano! No hai perfettamente ragione, se non applichi alcuna funzione di OpenCV allora la cosa deve essere funzionante e fluida come i comandi linux.

      MI VIENE IN MENTE UNA COSA: Stai usando la camera on baord del Raspberry pi oppure una webcam? Questi driver funzionano e rendono lo strema fluido e perfetto SOLAMENTE se usi la camera on board. Capito Marco? (Vedi al seguente link i componenti che io utilizzo: http://ramrahmaniciclope.blogspot.it/2014/06/acquisto-componenti.html)

      Per fare la verifica dell'installazione ti posso consigliare:
      1. Vai al seguente indirizzo ed esegui di nuovo l'installazione secondo la guida ufficiale: http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14
      2. Al link seguente invece trovi l'integrazione di OpenCV secondo la guida ufficiale dei driver che ho usato io: http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=16#example4

      Elimina
    4. Utilizzo la camera board di RPi. Seguendo i tuoi consigli ti riporto cosa è successo:
      1) Ho reinstallato il driver seguendo il link 1. (aggiornando anche il firmware come previsto);
      2) Seguendo poi la guida al link 2. accade che al momento di:
      sudo apt-get install opencv-dev

      dice:
      E: Unable to locate package opencv-dev

      per cui non sono riuscito a continuare:

      ("//usr/local/lib/libopencv_imgproc.so.2.4: undefined reference to `cv::parallel_for_(cv::Range const&, cv::ParallelLoopBody const&, double)'
      //usr/local/lib/libopencv_imgproc.so.2.4: undefined reference to `typeinfo for cv::ParallelLoopBody'
      //usr/local/lib/libopencv_imgproc.so.2.4: undefined reference to `cv::ParallelLoopBody::~ParallelLoopBody()' ")

      3) Riprovando col codice python di sopra la latenza continua ad esserci, inoltre comandi del tipo:

      vc.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 64.0)
      vc.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,64.0)
      vc.set(cv2.cv.CV_CAP_PROP_FPS,30.0)

      immediatamente dopo la creazione di VideoCapture, non so per quale motivo, fanno riavviare la shell di Idle anziché continuare con lo script;

      4) Non so se può aiutare ad individuare il problema ma ho notato che nel percorso "/usr/local/lib/python2.7/dist-packages" non c'è una vera e propria cartella di opencv ma le classi cv e cv2 risultano sparse, mentre file del tipo libopencv_objdetect.so (credo uno di quelli venuti fuori dalla build) sono sparsi, alcuni come collegamento, in /usr/local/lib.

      Elimina
    5. Marco ma ti sei assicurato di partire con una SD completamente pulita? Perché questa guida che ho pubblicata è stata testata su 3-5 raspberry nei lab durante i lavori e alcuni erano pure di versione minore. Quindi dati i problemi che hai ti consiglierei di partire con una SD completamente pulita e seguire poi i miei tutorial passo per passo e vedrai che otterrai uno stream video liscio e perfetto. Un ultima cosa: ma a quanto imposti le dimensioni del frame quando fai lo stream del video con python?

      Elimina
  2. Proverò allora a ripartire con una RPi con SD pulita e ti faccio sapere. Per quanto riguarda il frame ho fatto diverse prove sia lasciando inalterate le dimensioni di default del driver (full HD) e modificandole attraverso OpenCV, sia settando 640x480 il driver. Come ti dicevo con le funzioni:

    vc.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 64.0)
    vc.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,64.0)

    non ne vuole sapere di modificare la risoluzione, anzi riavvia la shell. Un buon settaggio l'ho ottenuto con la vecchia interfaccia di openCV, ossia invocando il modulo cv2.cv e quindi utilizzando comandi del tipo:
    SetProperty ecc.

    RispondiElimina
    Risposte
    1. Per ottenere uno stream pulito e fluido devi utilizzare le dimensioni 64.0x64.0, con dimensioni differenti (specialmente maggiori) non lo otterrai mai. Se quei due comandi non funzionano vuol dire che c'è qualche problema nella tua installazione di OpenCV. Che versione di OpenCV stai installando
      Ricordati che a causa della mancanza di Driver officiali puoi installare sino a massimo OpenCV 2.3.1, ok?

      Elimina
  3. Ho iniziato a seguire la guida con una SD "pulita" e anche questa volta tutto fila liscio fino al seguente comando:
    sudo apt-get install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev libpngwriter0-dev libpngwriter0c2 zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0† libgstreamer0.10-dev libxine1-ffmpeg† libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev

    Così come la prima volta, infatti, al momento dell'installazione di OpenCV questo mi restituisce:

    E:Unable to locate package libpngwriter0-dev
    E:Unable to locate package libpngwriter0c2
    E:Unable to locate package libavcodec52
    E:Unable to locate package libavformat52
    E:Unable to locate package libgstreamer0.10†
    E:Couldn't find any package by regex 'libgstreamer0.10†'
    E:Unable to locate package libxinel-ffmpeg†

    Con la vecchia SD non me ne preoccupai e andai avanti. Ora chiedo consiglio a te al fine di installare correttamente il software.

    PS: Avevo già inviato un commento del genere ma il gestore dei commenti non mi diede feedback.

    Grazie

    RispondiElimina
    Risposte
    1. Mi dici quale versione di OpenCV stai installando innanzitutto? Vorrei citarti una delle risposte che ho ricevuto su Stackoverflow quando lavoravo sul progetto attivamente:

      OpenCV 2.4.* does not work on the Raspberry Pi. The latest stable version that works on the Raspberry Pi is OpenCV 2.3.1, which is what your second website links to. The reason for this is the lack of an official V4L driver.

      The reason you can't find those packages is because they are out of date. Substitute libavcodec53 and libavformat53 for libavcodec52 and libavformat52 and it should work. Newer versions of libpngwriter0-dev and libpngwriter0c2 are not available, but does not seem to affect the build.

      Other than that, following your second links tutorial (where you compile it yourself) worked just fine for me.

      Elimina
  4. Ancora non sono arrivato alla scelta della versione di opencv ed il suo scaricamento attraverso wget e quindi ai praragrafi [OPENCV 2.3.1] o [OPENCV 2.4.5], bensì alcune righe prima e per il momento mi sono fermato aspettando un tuo parere in proposito. Da quello che ti hanno risposto in stackoverflow sembrerebbe che converrebbe:

    sudo apt-get install libavformat53 libavcodec53 (che ne pensi?)

    e che libpngwriter0-dev libpngwriter0c2 pur assenti non influenzino l'installazione.

    Per il resto se tutto va bene converrebbe seguire solo il paragrafo [OPENCV 2.3.1] della tua guida visto che la 2.4 non funziona. Tu come hai risolto alla fine?

    RispondiElimina
    Risposte
    1. Marco io ho ripreso in mano il RPi e il progetto Ciclope in questi giorni.

      Ho comprato il modello 2 del RPi, e ora ho attivo un modello B+.

      Sei riuscito a risolvere tu?

      Elimina
  5. Mi potresti contattare alla seguente mail
    peppegti@gmail.com

    RispondiElimina