IT | EN

Ing. Francesco Cioffi

fcioffi.net

Installazione di un programma C su una Axis Network Camera 207W

Il nostro obiettivo è quello di installare del software direttamente sulla telecamera sfruttando il sistema operativo e le risorse locali per fare delle elaborazioni più o meno complesse sul flusso video originale.

Dopo un po' di ricerche iniziali abbiamo trovato un cross-compiler in grado di compilare programmi C/C++ per processore ARM (ARTPEC-A nel caso del nostro giocattolino):

http://www.axis.com/ftp/pub_soft/cam_srv/arm_tools/comptools-arm-1.20050730.1.tar.gz

http://www.axis.com/ftp/pub_soft/cam_srv/arm_tools/arm_tools.htm

Per compilare bisogna aggiungere alcuni flag al compilatore:

-march=armv4 -mtune=arm9tdmi

Fatto questo (esultanti e sicuri che la strada fosse spianata) compiliamo le librerie OpenCV. Queste librerie permettono di elaborare flusso video e di accedere ai device video (quelli standard :-() acquisendo stream.

http://downloads.sourceforge.net/opencvlibrary/opencv-1.0.0.tar.gz?modtime=1162852454&big_mirror=1

usando il cross-compiler ed abilitando la compilazione statica:

    $ CXXFLAGS="-march=armv4 -mtune=arm9tdmi" ./configure --host=arm-linux \
      --prefix=/home/fcioffi/coding/axis/arm-tools/ --without-gtk \
      --disable-apps --enable-static --enable-debug
  
(prima di questo comando ricorda di aver incluso nel PATH il percorso ad arm-linux-g++. Il riepilogo del configure deve dire di aver trovato il cross-compiler!)

A questo punto non resta che provare un programma qualsiasi:

    #include <stdio.h>
    #include "highgui.h"
    int main( int argc, char** argv )
    { 
      printf("Hello ...\n");
      fflush(stdout);
      IplImage* color_img = 0;
      if ((color_img = cvLoadImage("test.jpg")) == 0)
      {
        printf("Could not load image\n");
        fflush(stdout);
        return 1;
      }
      printf("Image loaded: %d\n", color_img->imageSize);
      cvSaveImage("./tmp.jpg", color_img);
      cvReleaseImage(&color_img);
      return 0;
    }
  
    $ /arm-tools/bin/arm-linux-g++ -march=armv4 -mtune=arm9tdmi -static \ 
      -o loadImage loadImage.c \ 
      -I/arm-tools/include/opencv -lhighgui \ 
      /arm-tools/lib/libpthread.a /arm-tools/lib/libcxcore
  
(libreria più / libreria meno)

La compilazione sembra procedere in modo corretto (URRA ... ormai siamo sicuro di aver ottenuto un bel risultato!), ma purtroppo eseguendo il file sulla CAM iniziano i problemi: le chiamate a funzioni di OpenCV si bloccano, segmentation fault o errori senza senso.

Inoltre abbiamo scoperto che non è neanche possibile acquisire direttamente lo stream video in quanto questo non è in formato V4L standard, e per avere le interfacce per accedervi:

(TA - DAN!) http://www.axis.com/partner/adp_intro.htm

L'unico modo sembra usare la chiamata buffer_handler che sembra tanto un presa in giro della AXIS per non dire: ABBIAMO "CHIUSO" TUTTO... AHAHAH!

Menu

Visite dal 19.12.2007: 17686

Ultimo aggiornamento della pagina: 02.2009