raspberrypiでccv画像処理ライブラリ


高度な画像処理を行うためのライブラリとしてccvというライブラリがあります。

例えば画像中の文字位置を抽出するための処理swtなどが提供されます。

これをraspberrypiで使おうと思うとコンパイルができずに困ったのでその方法。

raspberry piのosはraspbiabです。

  1. 事前のsudo apt-get install clang clangをいれとく
  2. ccvのzipをダウンロード →   http://libccv.org/lib/ccv-swt/
  3. $unzip stable.zip

    で展開する。

  4. 展開されたccv/lib内のmakefileのcflags下に
     CFLAGS += -ccc-host-triple armv6-unknown-eabi -march=armv6 -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard

    を追加

  5. さらにmakefileのsqliteをコンパイルする部分にも
    -ccc-host-triple armv6-unknown-eabi -march=armv6 -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard 

    を追加(これをしないとsqliteの部分のコンパイルでエラーー発生)これはコンパイラにarmアーキテクチャの仕様を伝えるため。
    最終的には

     
    includeconfig.mk
    #CC += -faddress-sanitizer -fno-omit-frame-pointer
    CFLAGS := -O3 -ffast-math -Wall $(CFLAGS)# -fprofile-arcs -ftest-coverage
    CFLAGS += -ccc-host-triple armv6-unknown-eabi -march=armv6 -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard
    NVFLAGS := -O3 $(NVFLAGS)
    
    .PHONY: all clean
    
    all: libccv.a
    
    clean:
            rm -f *.o 3rdparty/sha1/*.o 3rdparty/sfmt/*.o 3rdparty/kissfft/*.o 3rdparty/dsfmt/*.o 3rdparty/sqlite3/*.o cuda/*.o libccv.a
    
    libccv.a: ccv_cache.o ccv_memory.o 3rdparty/sha1/sha1.o 3rdparty/kissfft/kiss_fft.o 3rdparty/kissfft/kiss_fftnd.o 3rdparty/kissfft/kiss_fftr.o 3rdparty/kissfft/kiss_fftndr.o 3rdparty/kissfft/kissf_fft.o 3rdparty/kissfft/kissf_fftnd.o 3rdparty/kissfft/kissf_fft    r.o 3rdparty/kissfft/kissf_fftndr.o 3rdparty/dsfmt/dSFMT.o 3rdparty/sfmt/SFMT.o 3rdparty/sqlite3/sqlite3.o ccv_io.o ccv_numeric.o ccv_algebra.o ccv_util.o ccv_basic.o ccv_resample.o ccv_transform.o ccv_classic.o ccv_daisy.o ccv_sift.o ccv_bbf.o ccv_mser.o ccv_    swt.o ccv_dpm.o ccv_tld.o ccv_ferns.o ccv_icf.o ccv_convnet.o $(CUDA_OBJS)
            $(AR) rcs $@$^
    
    ccv_io.o: ccv_io.c ccv.h ccv_internal.h io/*.c
            $(CC)$< -o $@ -c $(CFLAGS)
    
    3rdparty/sqlite3/sqlite3.o: 3rdparty/sqlite3/sqlite3.c
            $(CC)$< -o $@ -c -O3 -D SQLITE_THREADSAFE=0 -D SQLITE_OMIT_LOAD_EXTENSION  -ccc-host-triple armv6-unknown-eabi -march=armv6 -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard
    
     %.o:%.c ccv.h ccv_internal.h cuda/*.h
            $(CC)$< -o $@ -c $(CFLAGS) 
    %.o:%.cu ccv.h cuda/*.h
            $(NVCC)$< -o $@ -c $(NVFLAGS)                                         
    

    となります。

  6. /libで
    $./configure[/shell]実行</li><li>ccv/libで make 実行<br /><pre>ccv/lib $ make

    ここは時間がかかる

  7. ccv/binにて
    $clang swtdetect.c -o swtdetect.o -c -O3 -Wall -I"../lib" -D HAVE_LIBPNG -D HAVE_LIBJPEG -D HAVE_FFTW3 -D HAVE_LIBLINEAR -D HAVE_CBLAS -D HAVE_AVCODEC -D HAVE_AVFORMAT -D HAVE_GSL -ccc-host-triple armv6-unknown-eabi -march=armv6 -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard $clang -o swtdetect swtdetect.o -L"../lib" -lccv -lm -lpng -ljpeg -lfftw3 -lfftw3f -lpthread -llinear -lblas -lavcodec -lavformat -lgsl

    を実行.

  8. makefileのswtdetect以外を消してもよい。その場合5と同様

    CFLAGS += -ccc-host-triple armv6-unknown-eabi -march=armv6 -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard

    を追加する必要あり。これもアーキテクチャ申告のため。

  9. あとは画像を用意して

    ./swtdetect image.jpg 

    これで文字位置がとれる。

これで動くと思います。

The following two tabs change content below.
miyamoto
IoT/ DIY / music / 日本語ラップ
miyamoto

About miyamoto

IoT/ DIY / music / 日本語ラップ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Post Navigation