スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

手を動かさないと分 からないことあるね

手を動かさないと分からないことってあるね。
プログラミングしてるとあれもこれもしたくなってくるけど。やっぱり実装してみないと分からないことっておおいいなあ。
スポンサーサイト

CygwinにCoroのインストールでエラー

Coroのインストールでテストが通らない模様。
なんじゃら

t/12_exit.t ........... 1/5 Can't coerce ARRAY to integer in shift at /home/tetsuya/.cpanm/work/1343070948.2380/Coro-6.08/blib/lib/Coro.pm line 691.
Modification of a read-only value attempted at /home/tetsuya/.cpanm/work/1343070948.2380/Coro-6.08/blib/lib/Coro.pm line 691.
Modification of a read-only value attempted at /home/tetsuya/.cpanm/work/1343070948.2380/Coro-6.08/blib/lib/Coro.pm line 691.
panic: POPSTACK



結局、12_exit.tを12_exit.t.bkみたいに改名してテストをスルーするように
して無理やり通しています。

OpenCV2.3.1にてmiyagawanizeにチャレンジ

気を取り直して、再チャレンジ。
今回はこのサイトを参照して、
http://wiki.livedoor.jp/kou1okada/d/Cygwin%20-%20OpenCV

./tmpディレクトリに資材(opencv_for_cygwin.tgz.b64)を準備。

ソース一式はここから入手して
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/

opencvというフォルダ名をOpenCV2.3.1に改名してから実行しました。

./tmp/OpenCv2.3.1

./build_opencv_for_cygwin.sh
make -f Makefile.opencv_for_cygwin



実行後できる./opencv/opencv-2.3.1-1.tar.bz2をいうファイルを/に移動してから展開

bunzip2.exe opencv-2.3.1-1.tar.bz2
mv opencv-2.3.1-1.tar /
cd /
tar -xvf opencv-2.3.1-1.tar



さあ、これでOpenCVの準備完了。
Image::ObjectDetectの準備。

cpanm -f Image::ObjectDetect



miyagawanize実行したらエラーになってしまった。

Can't load '/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Image/ObjectDetect/ObjectDetect.dll' for module Image::ObjectDetect: No such file or directory at /usr/lib/perl5/5.10/i686-cygwin/XSLoader.pm line 70.
at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 10.
at /usr/lib/perl5/5.10/i686-cygwin/XSLoader.pm line 72.
XSLoader::load('Image::ObjectDetect', 0.12) called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 10
Image::ObjectDetect::BEGIN() called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19
eval {...} called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19
require Image/ObjectDetect.pm called at miyagawanize.pl line 5
main::BEGIN() called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19
eval {...} called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19.
at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19.
require Image/ObjectDetect.pm called at miyagawanize.pl line 5
main::BEGIN() called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19
eval {...} called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 19
Compilation failed in require at miyagawanize.pl line 5.
at miyagawanize.pl line 5.
main::BEGIN() called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 5
eval {...} called at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 5
BEGIN failed--compilation aborted at miyagawanize.pl line 5.
at miyagawanize.pl line 5.



おかしい、'/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Image/ObjectDetect/ObjectDetect.dll’自体はあるのに。なぜ読めないというエラーになるんだろう。
うーん。よくわからない。

とりあえず、Image::ObjectDetectのロードでエラーになっているのが問題ということだけは分かったが・・・
どうすればいいのでしょう・・・

Image::ObjectDetectのインストールをcpanm経由でなくて、tar経由にして
perl Makefile.PLでできるMakefileを直接編集。

Makefileの編集箇所

LDDLFLAGS = --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--stack,8388608 -Wl,--enable-auto-image-base -L/usr/lib -fstack-protector
LDFLAGS = -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--stack,8388608 -Wl,--enable-auto-image-base -fstack-protector -L/usr/local/lib
LIBC = /usr/lib/libc.a



とりあえず、これで無事にjpegでも動いた!!!!!!!!!

ゆーすけべーmiyagawanizeをWindows/Cygwinで動かしたいが

Image::ObjectDetectをcpanmにてインストールすべくopencvのcygwin版を慶応大のサーバーから取得、bunzip2.exeコマンドで、それを解凍。tar -xvf で展開。

http://hvrl.ics.keio.ac.jp/kimura/opencv/


パッケージ情報のファイルopencv.pcを解凍先に合わせるように編集した。


prefix=/opt/opencv2.4.2
exec_prefix=${prefix}
libdir=/opt/opencv2.4.2/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include



パッケージ情報のファイルがあるディレクトリを環境変数PKG_CONFIG_PATHに指定した。(.bashrcに追記。)

export PKG_CONFIG_PATH=/opt/opencv2.4.2/lib/pkgconfig




環境変数のexport

. ~/.bashrc



そして、Image::ObjectDetectのインストール

cpanm Image::ObjectDetect



しかし、のインストールで失敗。コンパイルはされてるがリンクでライブラリが見つからないというエラー。


g++-4 --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--stack,8388608 -Wl,--enable-auto-image-base -L/usr/local/lib -fstack-protector ObjectDetect.o -o blib/arch/auto/Image/ObjectDetect/ObjectDetect.dll \
/usr/lib/perl5/5.10/i686-cygwin/CORE/cygperl5_10.dll \

ObjectDetect.o:ObjectDetect.c:(.text+0xc2): undefined reference to `_cvReleaseHaarClassifierCascade'
ObjectDetect.o:ObjectDetect.c:(.text+0x299): undefined reference to `_cvLoadImage'
ObjectDetect.o:ObjectDetect.c:(.text+0x2c6): undefined reference to `_cvCreateImage'
ObjectDetect.o:ObjectDetect.c:(.text+0x2e0): undefined reference to `_cvCvtColor'
ObjectDetect.o:ObjectDetect.c:(.text+0x2ef): undefined reference to `_cvEqualizeHist'
ObjectDetect.o:ObjectDetect.c:(.text+0x2fb): undefined reference to `_cvCreateMemStorage'
ObjectDetect.o:ObjectDetect.c:(.text+0x360): undefined reference to `_cvHaarDetectObjects'
ObjectDetect.o:ObjectDetect.c:(.text+0x3bb): undefined reference to `_cvGetSeqElem'
ObjectDetect.o:ObjectDetect.c:(.text+0x65f): undefined reference to `_cvReleaseMemStorage'
ObjectDetect.o:ObjectDetect.c:(.text+0x66a): undefined reference to `_cvReleaseImage'
ObjectDetect.o:ObjectDetect.c:(.text+0x675): undefined reference to `_cvReleaseImage'
ObjectDetect.o:ObjectDetect.c:(.text+0x986): undefined reference to `_cvLoad'
collect2: ld はステータス 1 で終了しました
Makefile:472: recipe for target `blib/arch/auto/Image/ObjectDetect/ObjectDetect.dll' failed
make: *** [blib/arch/auto/Image/ObjectDetect/ObjectDetect.dll] Error 1
-> FAIL Installing Image::ObjectDetect failed. See /home/tetsuya/.cpanm/build.log for details.



確かにリンクのオプションでopencvのライブラリが渡ってないような気がするが解決方法がわからないが。・・
opencv.pcを更に編集。以下のように。

exec_prefix=${prefix}
libdir=${prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.2
Libs: -L${libdir} -lopencv_calib3d.dll -lopencv_nonfree.dll -lopencv_contrib.dll -lopencv_objdetect.dll -lopencv_core.dll -lopencv_photo.dll -lopencv_features2d.dll -lopencv_stitching.dll -lopencv_flann.dll -lopencv_ts.dll -lopencv_gpu.dll -lopencv_video.dll -lopencv_highgui.dll -lopencv_videostab.dll -lopencv_imgproc.dll -lopencv_legacy.dll -lopencv_ml.dll
Cflags: -I${includedir_old} -I${includedir_new}



PATH環境変数にDLLの於いてあるbinパスへ通す。
以上の結果、なんとか少し前進している模様。
インストールまでは通るようになりました!!
いぇーい

$ cpanm Image::ObjectDetect
--> Working on Image::ObjectDetect
Fetching http://www.cpan.org/authors/id/J/JI/JIRO/Image-ObjectDetect-0.12.tar.gz ... OK
Configuring Image-ObjectDetect-0.12 ... OK
Building and testing Image-ObjectDetect-0.12 ... OK
Successfully installed Image-ObjectDetect-0.12
1 distribution installed



もう少しでmiyagawanizeができるかも・・・・
がんばります。。


perl -MImager -e 'print join ", ", sort keys %Imager::formats'
bmp, gif, ifs, jpeg, png, pnm, raw, t1, tga, tiff, w32





$ perl miyagawanize.pl kao.jpg
Can't load the image file at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 23.

$ perl miyagawanize.pl kao.png



むむっ。jpgはできなかったが、pngだとできた!!!!
やったーーー。
でも、jpegサポートしてるんじゃないのか???


さてと、libjpegをいれてみるかって
apt-cyg のインストールを
http://kkaneko.com/rinkou/cygwin/cygwin.html
をみながら。。

まずはここからソースをダウンロードしてっと
http://apt-cyg.googlecode.com/svn/trunk/

/binディレクトリにおいて、chmod +x

$ apt-cyg install libjpeg-devel



Imagerの再インストール

$ cpanm -f Imager
cpanm -f Image::ObjectDetect



JPEGで再トライ・・・・


$ perl miyagawanize.pl kao.jpg
Can't load the image file at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 23.



やっぱり、jpgの読み込みができなーい。。。。
もう少しなのに。。。。
デバッガー起動で、落ちてる箇所を絞り込み

でもさぁ。jpegを出力することはできるのに、なんで読み込むことが
できないんだろう。・・・
pngから出力したjpegを入力してもだめだし。



main::(miyagawanize.pl:11): my @faces = $detector->detect($file);
DB<1> n
Can't load the image file at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 23.
at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Image/ObjectDetect.pm line 23.
Image::ObjectDetect::detect('Image::ObjectDetect=SCALAR(0x2064d350)', 'kao.jpg') called at miyagawanize.pl line 11
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.



Image::ObjectDetectのCのソースだと以下でエラーになっている。
つまりCygwin-OpenCVのcvLoadImageでjpegが読めないっていうこと。
なんでだろう。

img = cvLoadImage(filename, 1);
if (!img)
croak("Can't load the image file");



ここで、ギブアップ!!

OpenCV2.3.1で再度挑戦しよう。次回に続く。

googleのOAuth2をperlで・・サービスアカウントについてなどまとめると

ふー。現在サーバー、サーバー認証に挑戦中だが途中経過

https://developers.google.com/accounts/docs/OAuth2ServiceAccount

キーの取得はどこから?で悩んだが、以下にいって「API Access」を選んで
「Create another client ID」ボタンを押すと「Service account」という
チェックボックスがあるではないか!
https://code.google.com/apis/console/?pli=1

ダウンロードするとファイル名に出てくるのがおそらくClientIDになるものだろう。
これをJSON形式のclaimのissに指定しないといけないんだろう。

でも、現在perlで秘密鍵での署名つけ?の方法が良く分からずつまずく。
Rubyのサンプルソースはgithubにありましたが、perlもこれをまねをすればいいとは
分かったのですが、そこから先がわからない。

https://gist.github.com/2713830

OAUTHの誤解

OAUTHの認証が必要なのは、アプリが認証したユーザの情報にアクセスする時であって。
アプリがアプリ作成者の情報にアクセスするときはブラウザを使ったユーザ認証する必要がなく。アプリ作成者のサーバー間認証をすればよい。
だから私の作っているFUSIONテーブルのアプリもサーバ間認証に替えないといけない。
参りましたが仕方がないです。
「手を動かさないと」こういった基本的なこともなかなか理解できないかもしれない。

FUSION TABLEの主キーはどう扱うんだ

そもそもフュージョンテーブルには主キーという概念がないのだけど。やりたいことは位置テーブル(1)にひもずくコメント(複数)を保存したい。ローケーションを主キー扱いしてしまうのが一案。
ROWIDを主キーにしてしまうのもありだろうけど別テーブルにコメントテーブルをつくると結合しずらい。
うーん。位置テーブルに挿入したあとROWIDをセレクトしてそのあと。位置テーブルとコメントテーブルのID列にぶちこむっていうのはどうだ。
悪くなさそうな気がする。

yomikoを使うのかあ

ゆーすけべーラジオを購読したのですが整形して読む方法はないかなと早まって質問してしまった。
ゆーすけべー日記を読み返してみると「よみこ」というソフトで読めばよさそうだ。
プロフィール

鈍足ランナー

Author:鈍足ランナー
作成アプリ

Learn from AlphaGeeks
Twinani


最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。