月別アーカイブ: 2007年12月

Pythonで偶然、変なプログラム書いた

[pukiwiki]
*今年最後のWBS土曜版
塩田さんがフワフワのモコモコ&ブーツ~
2週間のお別れです~~ぐすん。
*[[10年経って心臓が再び動き出した少女!(イギリス):http://boxheadroom.com/2006/04/14/girl_heart]]
たまたまテレビを付けたら、ドラマでピギーバック移植のシーンが有りました。
*[[Python からCOMコンポーネントを使って、Microsoft Excelのファイルを読み込む:http://shisashi.blogspot.com/2007/12/python-commicrosoft-excel.html]]
*[[Python Win32 Automation – 傀儡師の館 :http://b.hatena.ne.jp/entry/4733987]]
いま、楽天がメンテ中なので、あとで読む
*[[子供でもできる Python:http://b.hatena.ne.jp/entry/6208576]]
*[[UniDic ってなんだ (Python で人工無能):http://b.hatena.ne.jp/entry/6873552]]

*[[BeautifulSoupで株価をゴリゴリ:http://shisashi.blogspot.com/2007/12/python-commicrosoft-excel.html]]
*ジェネレータ+デフォルト引数=イテレータ?
[/pukiwiki]

寝ぼけてたら、偶然、こんな感じのコードを書いてしまったのでメモ。

class Test :
    def __init__(self):
        self.g=(x for x in xrange(1,10))
    def next(self):
        for i in self.g:
            return i
test=Test()
t=1
while t:
    t=test.next()
    print raw_input(t)

太字が偶然な部分。forループからreturnするたび、数字がカウントアップするという。。。
これって、多分、間違った書きかたかと思われ。。。いや、希望通りに動いてるけどorz
ちゃんとしたイテレータの書き方のチュートリアル探さなくちゃ。。。

もう少しシンプルに書き直してみた

from glob import iglob #globのジェネレータ版
def next(g=iglob("*.jpg")):
    for x in g :
        return x
    #raise Exception
while 1 : print raw_input(next()) 

-next()を呼ぶたびにカレントディレクトリのjpegファイル名を一個返します。
-終端に来るとNoneを返す
-例外を発生させてもOK

最初、変態~と思ったけど、慣れたら気持ちよくなってきた(汗

イベントドリブンなプログラムで便利です。
いや、ホントは、ちゃんとしたイテレータ書けばいいんですけど(汗
[pukiwiki]
*こんなの書かなくても
<<追記>> 2008-01-01
ジェネレータ.next()でいけた。 

_>>> g=(x for x in [1,2,3])
_>>> g.next() ;g.next() ;g.next();g.next()
_1
_2
_3
_Traceback (most recent call last):
_ File ““, line 1, in
_ g.next() ;g.next() ;g.next();g.next()
_StopIteration

この記事書いたときにも同様なコードを試したけど、うまくいかないような気がしたのだけれど、それは勘違いだったみたいです。
[/pukiwiki]

Python Unconference Tokyo 1など

[pukiwiki]
*[[Python Unconference Tokyo 1:http://www.python.jp/Zope/workshop/200712]]
あとで読む
*[[Djangoに関する情報 ( UeblogWiki):http://www.ueblog.org/mediawiki/index.php?title=Django]]
日本語のまとめwiki。あとで読む~

*[[Universal Feed Parser:http://feedparser.org/]]
直感的に使いやすそう。気に入ったらTシャツ買ってくれ、とのこと。ドロップシッピングって、こういう使い方も有りなんですね。
*[[Pyanno Python Annotations:http://www.fightingquaker.com/pyanno/]]
デコレーターを使って、関数への引数の型チェックなどを行う、らしい。メモだけ。
-[[python のデコレーター構文:http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/decorator.htm]]
*[[zipfile(PyMOTW):http://blog.doughellmann.com/2007/12/pymotw-zipfile.html]]
*[[zipfile — ZIP アーカイブの処理:http://www.python.jp/doc/2.4/lib/module-zipfile.html]]
_from zipfile import ZipFile
_from StringIO import StringIO
_zf=ZipFile(“hoge.zip”,”r”)
_l=zf.namelist()
_for x in l :print x
_fp=StringIO(zf.read(l[0]))
以下、普通のファイルみたく扱えるという、、、

%%でも、書庫中のファイル名に日本語が使われてると、うまく開けないときが多いみたいです。残念。。。%%エスケープしないといけないかと思いきや、再度チャレンジしたら、普通に開けました。

*[[Python+Tkinter+PILで画像データ表示(Cafe de Paison ):http://paison.hp.infoseek.co.jp/paison/tkinter/pil1.html]]
仕事待ちだったので、zipfileと組み合わせて、zip書庫中のjpegをスライドショーさせて遊んでました。便利。。。

—-
*[[町村官房長官、「UFOの存在信じる」:http://www.excite.co.jp/News/odd/00081198027824.html]]
-なんでここまで大騒ぎになったのか。。。つーか、なんでこんな質問が出たんだろう?~
-個人的には、小泉さん&竹中さんは宇宙人に見えるという。。。
-米軍にはUFOに遭遇したときのマニュアルが存在する、って記事を昔読んだような。。。あとで検索してみるかも。
[/pukiwiki]

GIMPで顔認識(Python経由でOpenCV)

こちらの記事の続き。

ほとんど、GIMPとOpenCVのサンプルコードのひきうつしですが。。。

あらかじめ、CVtypes.pyに、前述の記事のパッチをあてておく必要があります。

OpenCVサンプルコード内 haarcascadesフォルダを中身のxmlファイルごとGIMPプラグインフォルダにコピー。
以下のコードをcvfacedetect.pyという名前で、GIMPプラグインフォルダ(GIMP24\lib\gimp\2.0\plug-ins)に保存、GIMP次回起動時に認識される、はずです。

認識されていれば、GIMPで画像を開き、フィルターの中にOpenCVという階層が出来ます。その中のcvfacedetectを選ぶと、フィルタを実行します。

人物の顔が丸く選択されたら成功です。
実行自体は短いのですが、起動までに「か~な~り~」時間がかかるので実用性には欠けます。あくまでOpenCVを使ってみるサンプルコード、ということで。

卒業アルバムなど集合写真でやってみると、意外に引っかからない人が居たりして楽しかったり(汗
続きを読む GIMPで顔認識(Python経由でOpenCV)

「CVtypes.py」OpenCVをctypes経由で使う

[pukiwiki]
自分が忘れた時のために、作業メモ

[[GIMP2.4 win32版のプラグインをPythonで書く インストール編:http://boxheadroom.com/2007/12/16/gimp_python]]の続きです。
*OpenCVをインストール:
-[[Sourceforgeからダウンロード:http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16937]]
-http://boxheadroom.com/wiki/?OpenCV なども参照
**インストーラ版の場合
-インストーラはOpenCV_1.0.exe
-DLLをGIMPバイナリーのフォルダにコピー
-GIMP-Pythonから呼び出す時の都合で、C:\Program Files\OpenCV\bin 以下のDLLファイルをgimp24.exeと同じフォルダにコピーします。
-もっと良い方法が有ると思いますが。。。
**ZIP版の場合
-GIMPから使うだけなら、chopencv-2.5.0-win-binary.zip内のDLLをGIMP24.exeと同じフォルダにコピーするだけ。
-これだけだと、他のPythonプログラムからはOpenCVが使えないかと思います。
*[[CVtypes:http://pypi.python.org/pypi/CVtypes/]]
[[Sourceforgeからダウンロードできます:http://sourceforge.net/project/showfiles.php?group_id=82407]]
アーカイブ中のCVtypes.pyを、
_Pythonをインストールしたフォルダ/Lib/site-packages
にコピーします。
*パッチ
このままだと使いづらいので、私は以下のパッチをあてています。
CVtypes.pyの適当な行に以下を追加
_cvInpaint =cfunc(‘cvInpaint’, _cvDLL, None,
_ (‘src’, c_void_p, 1), # const CvArr* src
_ (‘mask’, c_void_p, 1), # CvArr* dst
_ (‘dst’, c_void_p, 1), # CvArr* dst
_ (‘flags’, c_int, 1), # int flags
_ (‘inpaintRadius’, c_double, 1), # double threshold1
_)

_def cvImageAsString(img):
_ btype = ctypes.c_char * img[0].imageSize
_ return btype.from_address(img[0].imageData)
_
*使い方
http://OpenCV.jp などとの違い。
使うには、
_from CVtypes import cv

OpenCVのCVCreateImage(~)などの関数名は
_cv.CreateImage
と、cvピリオドが頭に付く形に。定数なども同様に。
具体的なサンプルコードは、次の記事で。
[/pukiwiki]

The Django Book/ Building Skills in Pythonなど

[pukiwiki]

*[[The Django Book:http://djangobook.com/en/1.0/]]
Pythonで書かれたWebアプリケーション・フレームワークの解説(英語)~
印刷物も出版されてます、とのこと。

Djangoは流行らしいので、読んでみたいorz
* Building Skills in Python
Pythonプログラミングの本、三冊。ライセンスは[[Creative Commons by-nc-nd:http://creativecommons.org/licenses/by-nc-nd/2.0/deed.ja]]

商用(授業に使うとか?)の場合は、紙の本を買ってください、とのこと。
-[[Building Skills in Programming:http://homepage.mac.com/s_lott/books/nonprogrammer.html]]
-[[Building Skills in Python:http://homepage.mac.com/s_lott/books/python.html]]
-[[Building Skills in OO Design:http://homepage.mac.com/s_lott/books/oodesign.html]]

[[情報元:http://homepage.mac.com/s_lott/iblog/architecture/C588245363/E20071217103823/index.html]]

*[[The HarvestMan Web Crawler:http://www.harvestmanontheweb.com/]]
あとでアルゴリズムの解説などだけ読むかも
//*[[数学研究もオープンソースで。Mathematicaに挑むSage:http://wiredvision.jp/blog/compiler/200712/20071211123829.html]]

*[[Python・BeautifulSoupを使ってAmazonAPIで取ってきたなのはさんDVD情報を整形してみた:http://d.hatena.ne.jp/s_fumizuki/20071215#1197731363]]
//*[[web制作屋は、一体どのスキルを持っていれば即戦力なのか?:http://e0166.blog89.fc2.com/blog-entry-356.html]]

//http://www.daniweb.com/code/python.html
[/pukiwiki]