UNIX のコマンドラインを使って、なるべく楽をしたいという方針です. Ruby や Octave を使う例は別のページで説明している.
Oxford buildings dataset へのリンク
Weizmann dataset
Recognition of human actions - NADA - KTH
GavabDB: face datasets
FRGC dataset. Biometric images with both 2D and 3D information
Human organs property Database for Computer simulation (RIKEN)
see also: http://cfd-duo.riken.go.jp/cbms-mp/howto_estimate_mooney.html , http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CEkQFjAA&url=http%3A%2F%2Fwww.bdigital.unal.edu.co%2F5454%2F7%2F1037577863.2011_3.pdf&ei=2HIOUPnAF4iwiQezgoHwBg&usg=AFQjCNGYtRH4gZ41470r16-jK8D-UyKCdA&sig2=783awuSv3VTo_0y2U5syNA
GetFEM++ : http://download.gna.org/getfem/html/homepage/
Action Database
http://schools.spsd.sk.ca/mountroyal/Hoffman/blender/blendertextures/html/menu1.html
http://schools.spsd.sk.ca/mountroyal/Hoffman/blender/blendertextures/html/menu2.html
http://blender.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=581&forum=10
https://svn.blender.org/svnroot/bf-blender/trunk/lib/tests/rendering/cycles/
ファイルをダウンロード.blender_binary の行を設定し,「python render_test_files.py」を実行
MeshLab でメッシュ化できる
Ruby処理系を使って簡単にできる(もちろん,他の手段もたくさんある)
◆ YYYY-MM-DD HH:MM:SS 形式で mtime を表示させる例
echo "p File.mtime('a.doc').strftime('%Y-%m-%d %H:%M:%S')" | ruby
sha1sum コマンド (Linux では簡単にインストールできる)を使用
sha1sum <ファイル名>
静止画像の情報の取得には, identify コマンドを使うのが便利.
※ 参考 Web ページ: http://www.imagemagick.org/script/escape.php
複数の静止画像ファイルについて,次の情報を取得する Ruby プログラムの例。
#! ruby -Ks # coding: windows-31j # usage: ruby imagefileinfo.rb filelist.rb > LIST.txt # This program # generate a image file list including its image file attributes # generate image file list # input : a YAML file that discribe pattern(s) of file names # [example of "filelist.rb"] # $a = <<-EOS # - path: /home/www/teaimage/20100524syouhin # pattern: *.JPG # - path: /home/www/teaimage/20100524syouhin_data # pattern: *.JPG # EOS # output : image file list with image information require 'rubygems' require 'progressbar' require 'yaml' require 'digest/sha2' load ARGV[0] b = YAML.load( $a ) for i in b # from a pattern to a file list files = Dir.glob( i["path"] + "/" + i["pattern"] ) progress_bar = ProgressBar.new( i["path"], files.length ) for j in files if j[0] = "/" then path = j else path = Dir.pwd + "/" + j end basename = File.basename( j ) mtime = File.mtime( j ).strftime('%Y-%m-%d %H:%M:%S') digest = Digest::SHA512.hexdigest( File.open( path, "rb" ).read ) # print out image file information printf( "%s %s '%s' %s ", path, basename, mtime, digest ) system( "identify", "-format", "%C %r %z %k %w %h '%x' '%y'", path.gsub("(","\(").gsub(")","\)") ) progress_bar.inc end progress_bar.finish end
使用法の例
これで、画像情報が一括取得される
ruby imagefileinfo.rb filelist.rb > LIST.txt
ImageMagick 等を使用
convert -format ...
(準備)SmillaEnlarger のインストール
sudo apt -y install libqt4-dev sudo apt -y install qt4-qmake cd /tmp wget http://sourceforge.net/projects/imageenlarger/files/imageenlarger/SmillaEnlarger%20Release%200.9.0/SmillaEnlarger_0.9.0_source.zip unzip SmillaEnlarger_0.9.0_source.zip cd SmillaEnlarger_0.9.0_source cd SmillaEnlargerSrc qmake ImageEnlarger.pro make all sudo make install sudo cp SmillaEnlarger /usr/local/bin
SmillaEnlarger <ファイル名> -o <ファイル名> -z <拡大率>
◆ 画像の例(4倍に拡大)
あるディレクトリ内の全画像ファイルについて、サイズを変えた別の画像を作りたい場合。
for i in *.jpg; do echo $i convert $i -resize 256 `basename $i .jpg`_thumb.png done
◆ 画像の例(4倍に拡大)
「convert -crop ...」で行う
Ruby プログラムの例。
#! ruby -Ks # coding: windows-31j # usage: ruby genthumb.rb filelist.rb 100x100 thumb png index.html all.png 20 # ruby genthumb.rb [file name] [size] [dir] [extension] # This program # generate thumbnails # generate image file list # input : a YAML file that discribe pattern(s) of file names # [example of "filelist.rb"] # $a = <<-EOS # - path: /home/www/teaimage/20100524syouhin # pattern: *.JPG # - path: /home/www/teaimage/20100524syouhin_data # pattern: *.JPG # EOS # output : thumbnails, HTML file, image file require 'rubygems' require 'progressbar' require 'yaml' require 'digest/sha2' load ARGV[0] thumb_size = ARGV[1] thumb_sub_dir = ARGV[2] thumb_ext = ARGV[3] thumb_index_html = ARGV[4] thumb_images_file = ARGV[5] thumb_images_size = ARGV[6] b = YAML.load( $a ) for i in b # from a pattern to a file list files = Dir.glob( i["path"] + "/" + i["pattern"] ) progress_bar = ProgressBar.new( File.basename(i["path"]), files.length ) # create thumbnails directory if i["path"][0] = "/" then path = i["path"] else path = Dir.pwd + "/" + i["path"] end thumb_dir = path + "/" + thumb_sub_dir system("mkdir", thumb_dir) f = File.open( thumb_dir + "/" + thumb_index_html, "w" ) for j in files basename = File.basename( j ) basename2 = File.basename( basename, File.extname( basename ) ) imfile = path + "/" + basename system ( "convert " + imfile.gsub("(","\(").gsub(")","\)") + " -thumbnail " + thumb_size + " " + thumb_dir + "/" + basename2.gsub("(","\(").gsub(")","\)") + "." + thumb_ext ) progress_bar.inc f.print( "<a href=\"../" + basename + "\"><img src=\"" + basename2.gsub("(","\(").gsub(")","\)") + "." + thumb_ext + "\"></a>" ) end progress_bar.finish f.close system("rm -f " + thumb_dir+ "/" + thumb_images_file ) system( "montage -resize " + thumb_images_size + " -geometry +2+2 " + thumb_dir + "/*." + thumb_ext + " " + thumb_dir + "/" + thumb_images_file ) end # system("rm -f " + i["path"] + "/thumbs/all_thumb.png" ) # system( "convert " + i["path"] + "/thumbs/all.png -resize 240 " + i["path"] + "/thumbs/all_thumb.png" )
使用法の例
下の実行画面では次のように設定している
cd /tmp sudo wget http://sourceforge.net/projects/libsift/files/libsiftfast/libsiftfast-1.2/libsiftfast-1.2-src.tgz sudo rm -rf /tmp/libsiftfast-1.2-src tar -xvzof libsiftfast-1.2-src.tgz cd libsiftfast-1.2-src make sudo make install
cd /tmp wget https://www.kkaneko.jp/dblab/opencv/fruits.jpg convert fruits.jpg fruits.pgm rm -f fruits.sift siftfast < fruits.pgm | sed 's/^$/@/g' | tr -d '\n' | sed 's/@/\n/g' > fruits.sift wget https://www.kkaneko.jp/dblab/opencv/lena_std.jpg convert lena_std.jpg lena_std.pgm rm -f ena_std.sift siftfast < lena_std.pgm | sed 's/^$/@/g' | tr -d '\n' | sed 's/@/\n/g' > lena_std.sift
※ 末尾の改行は除去。ただし、空白行は改行に置き換え。
octave S = dlmread( "fruits.sift", " ", 1, 0 ); [rgb, map, alpha] = imread("fruits.jpg"); mono = rgb2gray( rgb ); colormap( gray(256) ); hold imshow(mono); plot(S(:,2), S(:,1), '@');
octave S = dlmread( "lena_std.sift", " ", 1, 0 ); [rgb, map, alpha] = imread("lena_std.jpg"); mono = rgb2gray( rgb ); colormap( gray(256) ); hold imshow(mono); plot(S(:,2), S(:,1), '@');
cd /tmp wget http://www.vlfeat.org/download/vlfeat-0.9.9.tar.gz tar -xvzof vlfeat-0.9.9.tar.gz cd vlfeat-0.9.9 # Makefile に「-lpthread」を追加せねばならない場合もある make make install cd bin sudo cp glx/libvl.so /usr/local/lib sudo cp glx/sift /usr/local/bin/ sudo chmod 755 /usr/local/bin/sift sudo cp glx/aib /usr/local/bin/ sudo chmod 755 /usr/local/bin/aib sudo cp glx/mser /usr/local/bin/ sudo chmod 755 /usr/local/bin/mser cd ../src sudo cp mser.1 /usr/local/man/man1 sudo cp sift.1 /usr/local/man/man1 sudo cp vlfeat.7 /usr/local/man/man7 sudo /sbin/ldconfig
cd /tmp wget https://www.kkaneko.jp/dblab/opencv/fruits.jpg convert fruits.jpg fruits.pgm rm -f fruits.sift fruits.frame sift fruits.pgm mser fruits.pgm
■ SIFT
octave S = dlmread( "fruits.sift", " ", 1, 0 ); [rgb, map, alpha] = imread("fruits.jpg"); mono = rgb2gray( rgb ); colormap( gray(256) ); hold imshow(mono); plot(S(:,1), S(:,2), '@');
■ MSER
octave S = dlmread( "fruits.frame", " ", 1, 0 ); [rgb, map, alpha] = imread("fruits.jpg"); mono = rgb2gray( rgb ); colormap( gray(256) ); hold imshow(mono); plot(S(:,1), S(:,2), '@');
#! ruby -Ks # coding: windows-31j # usage: ruby imagesift.rb filelist.rb key frame # ruby imagesift.rb [file name] [sub directory name] [sub directory name] # This program # SIFT and MSER # generate image file list # input : a YAML file that discribe pattern(s) of file names # [example of "filelist.rb"] # $a = <<-EOS # - path: /home/www/teaimage/20100524syouhin # pattern: *.JPG # - path: /home/www/teaimage/20100524syouhin_data # pattern: *.JPG # EOS # output : SIFT and MSER file require 'rubygems' require 'progressbar' require 'yaml' require 'digest/sha2' load ARGV[0] key_sub_dir = ARGV[1] frame_sub_dir = ARGV[1] b = YAML.load( $a ) for i in b # from a pattern to a file list files = Dir.glob( i["path"] + "/" + i["pattern"] ).sort progress_bar = ProgressBar.new( File.basename(i["path"]), files.length ) # create thumbnails directory if i["path"][0] = "/" then path = i["path"] else path = Dir.pwd + "/" + i["path"] end system( "mkdir " + path + "/" + key_sub_dir ) system( "mkdir " + path + "/" + frame_sub_dir ) for j in files basename = File.basename( j ) basename2 = File.basename( basename, File.extname( basename ) ) system( "convert -resize 1280x1024 " + j + " /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".pgm" ) system( "siftpp -p /tmp/ /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".pgm > /dev/null" ) system( "cp /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".key" + " " + path + "/" + key_sub_dir ) system( "cd /tmp; mser /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".pgm > /dev/null" ) system( "cp /tmp/" + basename2.gsub("(","\(").gsub(")","\)") + ".frame" + " " + path + "/" + frame_sub_dir ) progress_bar.inc end progress_bar.finish end
sudo apt -y install autopano-sift
generatekeys <imagefile> <keyfile> showone <keyfile>
表示(実行手順例)
generatekeys 1.png 1.sift generatekeys 2.png 2.sift showtwo 1.sift 2.sift
対応リストの生成
generatekeys imagefile1 keyfile1 generatekeys imagefile2 keyfile2 autopanosift output.pto keyfile1 keyfile2 cat output.pto | grep "c n0 N1" | sed 's/c n0 N1 x//g' | sed 's/y//g' | sed 's/X//g' | sed 's/Y//g' | sed 's/ t0//g' > output.dat cat output.pto | grep "c n0 N1" | sed 's/c n0 N1 x/- \n - /g' | sed 's/y/\n - /g' | sed 's/X/\n - /g' | sed 's/Y/\n - /g' | sed 's/ t0//g' > output.yaml awk '{print $1 " " $2 " " $3 - $1 " " $4 - $2}' output.data > output.plot gnuplot plot "output.plot" with vector
http://www.vlfeat.org/~vedaldi/code/siftpp.html で「Source code」をクリック
sift -t 0 -e 0 lena_std.pgm
Ubuntu では luvcview が便利
sudo apt -y install luvcview luvcview
◆ MediaInfo のインストール
■ ubuntu の場合
■ FreeBSD の場合
cd /usr/ports/multimedia/mediainfo; make; make install
◆ MediaInfo を使ってみる
mencoder を使う場合
mencoder k1.iso -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vqscale=1 -o /tmp/k1.avi
arista-transcode を使う場合
arista-transcode dvd:///dev/sr0@0 -p computer -o hoge.avi
arista-transcode を使う場合
arista-transcode dvd:///home/hoge/hoge.iso -p computer -o hoge.avi
音声トラックが不要という場合.avidemux2 を使用するとき。
avidemux2_cli --nogui --autoindex --video-codec COPY --audio-codec NONE --load <ファイル名> --save <ファイル名>
音声トラックが不要という場合.ffmpeg を使用するとき。
ffmpeg -i <元ファイル.avi> -vcodec copy -an <新ファイル.avi>
avidemux2_cli --nogui --video-codec avi --audio-codec NONE --load <ファイル名> --save <ファイル名>
totem-video-thumbnailer -g 50 /usr/OpenCV-2.0.0/samples/c/tree.avi /tmp/tree_thumb.png
ffmpeg -i /usr/OpenCV-2.0.0/samples/c/tree.avi hoge-%04d,png
別の例
ffmpeg -vframes 1 -ss 20 -i /usr/OpenCV-2.0.0/samples/c/tree.avi -f image2 <新ファイル名>
◆ ビデオからフレームの切り出し
echo 'imwrite( aviread( "V0701001winff.avi", 10004), "10004.png" )' | octave
◆ Linux でビデオファイルの確認,前処理を行うツールの紹介
ビデオファイルのちょっとした確認などは,便利なツールがあります.
(フリーソフトではないので,各自で,よくライセンス条項などを確認すること)
◆ winff の実行例
winff を使って avi ファイルの変換を行ってみる
◆ avidemux の実行例
#! ruby -Ks # -*- coding: japanese-cp932 -*- # usage: ruby do.rb > do.sh; do.sh > LIST.txt require 'yaml' a = <<-EOS - name: 20110225* path: 20110225* pattern: */*.mp4 EOS b = YAML.load( a ) puts "#!/bin/sh" for i in b puts "for i in #{i["path"]}/#{i["pattern"]}; do" puts " echo -n `pwd`/$i " puts " echo -n \" \"" puts " echo -n `basename $i`" puts " echo -n \" \"" puts " echo -n `mediainfo --Inform=Video\\;\\'%Format%\\'\\ %Format_Profile%\\ %Format_Settings%\\ %CodecID%\\ %Codec%\\ %BitRate%\\ %Duration%\\ %AspectRatio%\\ %Width%\\ %Height%\\ %FrameRate%\\ %ColorSpace%\\ %BitRate%\\ %ID% $i`" # Format # Format_Profile # Format_Settings # CodecID # Codec # BitRate # Duration # Width # Height # FrameRate # ColorSpace # BitDepth # ID puts " echo -n \" \"" puts " echo `sha1 $i `| awk '{ print $4 }' " puts "done" end
コマンドの例
ffmpeg -r 2 -i /tmp/image%04d.JPG -vcodec mjpeg -sameq /tmp/hoge/hoge.avi
#! ruby -Ks # coding: windows-31j # usage: ruby genavi.rb filelist.rb 1024x768 hoge.avi avi # ruby genavi.rb [file name] [size] [file name] [sub directory name] # This program # generate AVI file # generate image file list # input : a YAML file that discribe pattern(s) of file names # [example of "filelist.rb"] # $a = <<-EOS # - path: /home/www/teaimage/20100524syouhin # pattern: *.JPG # - path: /home/www/teaimage/20100524syouhin_data # pattern: *.JPG # EOS # output : AVI file require 'rubygems' require 'progressbar' require 'yaml' require 'digest/sha2' load ARGV[0] avi_size = ARGV[1] avi_file_name = ARGV[2] avi_sub_dir = ARGV[3] b = YAML.load( $a ) for i in b # from a pattern to a file list files = Dir.glob( i["path"] + "/" + i["pattern"] ).sort progress_bar = ProgressBar.new( File.basename(i["path"]), files.length ) # create thumbnails directory if i["path"][0] = "/" then path = i["path"] else path = Dir.pwd + "/" + i["path"] end # generate a sequence of images whose file name starts from the "0001". and change the image size # 0001 から開始する連番画像に変える. ついでにサイズを変える system("rm -f /tmp/image*.png") k=1 for j in files name = sprintf( "/tmp/image%04d.png", k ) system( "convert " + j + " -resize " + avi_size + " " + name ) k = k + 1 progress_bar.inc end progress_bar.finish # "-r 1" is frame rate # -r 1 はフレームレート avi_dir = path + "/" + avi_sub_dir system("mkdir", avi_dir) system( "rm -f " + avi_dir + "/" + avi_file_name ) system( "ffmpeg -r 2 -i /tmp/image%04d.png -vcodec mjpeg -sameq " + avi_dir + "/" + avi_file_name ) end
使用法の例
作成されるビデオファイルのサイズは 1024x768, ファイル名は hoge.avi, サブディレクトリは avi に設定している
mplayer hoge.avi
画像 30枚の処理で 10分程度かかります(要するに手動でやるよりはずっと楽で便利)。
wget https://www.kkaneko.jp/dblab/opencv/lena_std.jpg convert lena_std.jpg lena_std.pdf
LeTeX ファイルの例
\documentclass[a4j]{jarticle} \usepackage[dvips]{graphicx} \begin{document} \section{sample image} \includegraphics[width=10cm,angle=0,clip]{lena_std.eps} \end{document}
dvi, ps, pdf ファイルの生成
platex hoge.tex dvips hoge.dvi ps2pdf hoge.ps xdvi hoge.dvi gs hoge.ps evince hoge.pdf
evince での表示例
本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.
問い合わせ先: 金子邦彦(かねこ くにひこ)