google chart apiを使ってみた

Y軸が2つあって、Y軸のそれぞれの範囲が違って、棒グラフと折れ線グラフが同時に出ているグラフ。X軸のラベルが長すぎるため、2弾に分けて表示している。ラベルは回転とか縦書きは出来ない。下記のURLは本当は1行で、各行の#以降はこちらでつけた、各パラメーターに対するコメント。

http://chart.apis.google.com/chart?
cht=bvg& #折れ線グラフと棒グラフを同時に出す。
chm=D,0033FF,1,0,5,1&  #折れ線と棒の色とか種類とか。
chs=500x400&  #チャートの大きさ
chxt=x,r,y,x&  #Y軸とR軸が左右の軸、x軸は2つ。x軸のラベルが長いため2行で出す。
chxtc=0,5|1,5|2,5|3,5& #x軸、y軸、r軸、x軸(2つ目)の軸上の各ラベルにつく補助線
chd=t1:420,225,460,390,726,295,410,450|1000,1200,900,800,500,1300,2000,1500& 
#|で区切って、棒グラフ、折れ線グラフのデータ。t1とするのがポイント。
chxl=0:|2012-06-06||2012-06-08||2012-06-10||2012-06-12||
1:|300|2500|2:|0|730|
3:||2012-06-07||2012-06-09||2012-06-11||2012-06-13&
#x,r,y,x各軸のラベル
chds=0,730,300,2500 #y軸とr軸の最小値、最大値。前半の2つがy軸、後半2つがr軸。

 

一応、1行のものをあげておきます。

http://chart.apis.google.com/chart?cht=bvg&chm=D,0033FF,1,0,5,1&chs=500×400&chxt=x,r,y,x&chxtc=0,5|1,5|2,5&chd=t1:420,225,460,390,726,295,410,450|1000,1200,900,800,500,1300,2000,1500&chxl=0:|2012-06-06||2012-06-08||2012-06-10||2012-06-12||1:|300|2500|2:|0|730|3:||2012-06-07||2012-06-09||2012-06-11||2012-06-13&chds=0,730,300,2500

 

このURLでできるチャートは下記のようなものです。

pythonなんかで動的にグラフを出したい時は、上記のURLを生成するものをプログラムして、imgタグでくくればよい。

さくらのVPS(月1000円)を借りてみた。

メモ。

2週間はただのようで、とりあえずは仮契約となる。手続きが終わると、2〜3分後に「仮契約」のメールが届く。ちょっと時間差で来るので、これを待とう。IPアドレスとrootのパスワードがこのメールで届く。

VPNコントロールパネルから、仮想マシンを起動する。コントロールパネルにはブラウザで見られるコンソール(シリアル接続扱い)もあるので、これで起動が確認できる。

起動すると、デフォルトでSSHとPostfixが起動する。とりあえずセキュリティの観点で設定を急ごう。結構攻撃されます。

コントロールパネルのコンソールからrootでログインして、Postfixを停止する。

chkconfig postfix off

postfixを使う人はちゃんと設定しましょう。

SSHもデフォルト設定で、これはみなさん使うと思うので、気合を入れて設定しましょう。といっても、下記のリンクを参考に設定をします。

さくらのVPSを借りたら真っ先にやるべきssh設定

OpenCVによる物体検出も動かしたいので、

さくらVPS CentOS6.2 OpenCV-pythonを導入

ちょっとバージョンが古いけど、とりあえずOK。

Apacheも動かしたいので、

yum install httpd

でインストール後、

Webサーバー構築(Apache)

に従って適切に設定。

OpenCVのopencv_haartrainingを動かしてみたけど、あまりスペックが高くないにもかかわらず、処理が速く感じます。2日かかった学習が半日ぐらいで終わったような…。

Webサーバーのログを見ると、早くも攻撃の兆しが。iptablesでも書こうかな。それにしてもこれで1000円はほんとうに安い。感激だ。

 

OpenCV + haardetectobjects(物体検出)

マーカーの位置を検出させたいと思ってやってみた。

だいたいOpenCVで学ぶ画像認識を参考にすればいいのだけど、自分なりにまとめてみます。こちらの環境はMac(Lion)、OpenCV2.3、Python2.7です。OpenCVとPythonはMacPortsでインストールしています。

1.学習のためのデータ集め

ここから画像データをダウンロードして、解凍しておきます。

カリフォルニア工科大学のオブジェクト画像データ

URL: http://www.vision.caltech.edu/Image_Datasets/Caltech101/Caltech101.html

URL: http://www.vision.caltech.edu/Image_Datasets/Caltech256/

2.非正解画像の一覧ファイル作成

非正解画像の一覧をNG.txtとして保存します。

# find /hoge/fuga/101_ObjectCategories -name "image*.jpg" > NG.txt
# find /hoge/fuga/256_ObjectCategories -name "[0-9]*.jpg" >> NG.txt

みたいな感じでしょうか。中身は下記のようになります。

/hoge/fuga/101_ObjectCategories/BACKGROUND_Google/image_0004.jpg
/hoge/fuga/101_ObjectCategories/BACKGROUND_Google/image_0005.jpg
/hoge/fuga/101_ObjectCategories/BACKGROUND_Google/image_0006.jpg
/hoge/fuga/101_ObjectCategories/BACKGROUND_Google/image_0007.jpg
...

3.マーカー画像作成

今回は以下のような画像を作りました。80x80pixel、左右対称の画像にしておきます。また、背景の色をグレー(128)としておきます。kakukaku2.pngと名づけました。

NewImage

4.正解画像の生成

OpenCVのコマンドで作成できます。生成する画像の数を7000としておきます。

# opencv_createsamples -img kakukaku2.png -vec kakukaku2.vec -num 7000  
-bgcolor 128 -bg NG.txt -w 24 -h 24

wとhは24がいいみたいです。よくわかりませんが。。。-showコマンドで、どのような正解画像が生成されているかがわかります。非正解画像の上にマーカー画像が変形してペーストされているような画像になります。

5.学習

OpenCVのコマンドで作成できます。非正解画像のうち、4000枚を使用しました(nnegで指定)。もちろん、もっと使用しても構いませんが、計算時間が膨大になるでしょう。テストであれば、正解画像7000、非正解画像4000くらいがいいそうです。

# opencv_haartraining -data kakukaku2 -vec kakukaku2.vec -bg NG.txt
 -npos 7000 -nneg 4000 -w 24 -h 24 -mode ALL

6.検出させる

Pythonで下記のようなプログラムを組みました。

import sys
import cv
hc = cv.Load("kakukaku2.xml")
img = cv.LoadImage("news.jpg", 0)
faces = cv.HaarDetectObjects(img, hc, cv.CreateMemStorage())
for (x,y,w,h),n in faces:
cv.Rectangle(img, (x,y), (x+w,y+h), 255)
cv.SaveImage("detected.jpg", img)

ソースコード中のnews.jpgは下記のようなものです。2012年4月30日朝日新聞朝刊1面(東京発行)です。実際のサイズは1936x2592pixelですが、著作権の関係上、小さくして掲載します。

NewImage

上記のコードで検出させたところ、8つのマーク中、4つのマークを検出しました。detect.jpgの青い四角で囲まれたところが検出されたところです。

次に、HarrDetectObjectsのパラメーターを変更して実施。例えば下記のようにです。

cv.HaarDetectObjects(img, hc, cv.CreateMemStorage(),1.1, 2, 0, (60, 60))

2のあたりがしきい値のようなものっぽい。デフォルトは3なので、2に変更。また、(60,60)の部分は、マーカーの最小の大きさ。このサイズ以上でないと検出しません。この結果は、8つのマーク中、8つ全てを検出しましたが、誤検出(マーカー以外の部分をマーカーとして検出)も2ヶ所ありました。画像の前処理や、サンプル数を増やさないとだめでしょうか。

 

OpenCVをPythonで使う

PythonでOpenCV画像処理。

OpenCVのPythonインターフェースを使いたい場合は、MacPortで、

sudo port install opencv +python27

とすればよい。簡単だ…。Pythonのソースコードとしては、

import cv
src_img = cv.NamedWindow("Camera",1)
cp = cv.CaptureFromCAM(0)
while True:
fr = cv.QueryFrame(cp)
cv.ShowImage("Camera",fr)
key = cv.WaitKey(10)
if key == 27:
break

で、カメラからのキャプチャが始まる。ソースコードはこちらを参照しました。

 

OpenCV 2 プログラミングブック OpenCV 2.2/2.3対応
OpenCV 2 プログラミングブック OpenCV 2.2/2.3対応 OpenCV 2 プログラミングブック制作チーム

マイナビ 2011-12-27
売り上げランキング : 7403

Amazonで詳しく見る by G-Tools

 

Python + Microsoft Transrator API

ちょっと遊んでみたのでメモ。

ここからMicrosoft-Translator-Python-APIをダウンロードして、解凍します。コマンドラインから

#sudo python setup.py install

として、ライブラリをインストール。

つぎに、Bing Developerを登録し、Bing Developer API Keyを取得します。

いよいよ、pythonコード。

from microsofttranslator import Translator

translator = Translator('Bing Developer API Key')

print translator.translate("こんにちは" , "en")

これだけ。"en"の部分は、翻訳したい言語で、こちらを参照してください。