2009 年 1 月 のアーカイブ

PythonでWebカメラから静止画を撮影してみる




















あ、Windows Live Writer新しくなってから始めて使ったわ…

VideoCapture(名前ないのか…)を使うと楽にカメラが扱える。

PILをインストールしてから、VideoCaptureの当該バージョンを自分のPythonインストールディレクトリに上書きすればいいだけ。

実行環境はWindows Vista Ultimate+Qcam Pro for notebook+Python 2.5

ソースは以下。超簡単。

import re
import time
from VideoCapture import Device

def main():
    t = time.time()
    cam = Device(devnum=0,showVideoWindow=1)
    print time.time() - t
    cam.setResolution(640,480)
    print time.time() - t
    for i in xrange(100):
        print time.time() - t
        cam.saveSnapshot('testtestimage%d.jpg' % i)
    print time.time() - t

if __name__ == '__main__':
    main()

実行結果は以下の通り。わりと早いし安定してる気がする。初回のsaveSnapshotで時間がかかるのか。以降は0.02秒程度なので余裕。今後実用してみて耐久性を見る予定。

0.680999994278
0.891999959946
0.891999959946
2.18300008774
2.20499992371
2.22799992561
2.25200009346
2.27399992943
2.29699993134
2.33400011063
2.35700011253
2.38000011444
2.40300011635
2.42499995232
2.4470000267
2.46900010109
2.49099993706
2.5150001049
2.53699994087
2.56100010872
2.58599996567
2.60800004005
2.63100004196
2.65700006485
2.6779999733
2.70199990273
2.72499990463
2.74699997902
2.77200007439
2.79399991035
2.81900000572
2.84200000763
2.86400008202
2.88800001144
2.9240000248
2.94600009918
2.96900010109
2.992000103
3.01399993896
3.03900003433
3.06399989128
3.08800005913
3.11100006104
3.132999897
3.15499997139
3.18700003624
3.20900011063
3.23200011253
3.25699996948
3.27999997139
3.30500006676
3.32699990273
3.34899997711
3.37199997902
3.39299988747
3.41400003433
3.43600010872
3.45900011063
3.48000001907
3.50300002098
3.52500009537
3.54600000381
3.56900000572
3.59100008011
3.61299991608
3.63499999046
3.65799999237
3.68000006676
3.70300006866
3.72399997711
3.7460000515
3.76900005341
3.79099988937
3.81299996376
3.83500003815
3.8599998951
3.88199996948
3.90599989891
3.92700004578
3.9470000267
3.97799992561
4.0
4.02200007439
4.04500007629
4.06699991226
4.09100008011
4.11500000954
4.13599991798
4.15899991989
4.1819999218
4.20399999619
4.22600007057
4.24900007248
4.27200007439
4.29299998283
4.31699991226
4.33899998665
4.36299991608
4.38400006294
4.40499997139
4.42499995232
4.44900012016
4.47000002861

ちなみにshowVideoWindow=1はカメラのウィンドウを表示するモードなので、0にしてテストもしてみたが、時間の増加量は大差ない模様。

あと、Qcamのオートフォーカスを効かせるためには一度saveSnapshotしてから、しばらくおかないとダメらしい。試してないけど、getImageでも多分平気。

キャプチャボードとかのソースでもいけるっぽいので、何かできそう。というか、DirectShowソースか。画面キャプチャで何かできるかな…


Pythonで書かれたDLNAサーバ




















Coherence – a DLNA/UPnP Framework for the Digital Living – Trac

こんなものがあったのかー。Pythonで書かれたDLNAのサーバ/クライアント。多分。

MIT Licenseだし、活発に動いているようだし、期待できる。何かに使えるかも。

例えば…何だろう。DLNA Gateway?

あ、Milestone見るとflv→mp4の変換が予定されてて、YouTubeが見られるようになるらしい。ということはちょっとプラスアルファで頑張ればニコ動も行ける可能性ありでは?トランスコードの合間に字幕突っ込んで。

映像だけじゃなく、Webの文字コンテンツとかとの連動も楽しいかもしれない。


PythonでHIDからiSerialNumberを取得




















USBデバイスからiSerialNumberを取得するべく悪戦苦闘していた。

kernelのDeviceIoControlで何とか取得することには成功したのだけど、さらに調べてみるとhid.dllにHidD_GetSerialNumberStringという関数があるのを発見。

hid = windll.hid
buf = c_ubyte * 0xff
buf = buf()
print hid.HidD_GetSerialNumberString(handle, byref(buf), 0xff)
print buf[0:]

こんな感じでOK。Pythonの場合。バッファは適当。最大128ワイドキャラクタとか書いてあったけど。

HidD_GetSerialNumberString(MSDN)