前の月 / 次の月 / 最新

hiChangeLog / 2008-05

2008-05
SMTWTFS
123
45678910
11121314151617
18192021222324
25262728293031

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

2008-05-23 Fri

pythonでビデオ信号のキャプチャ [python][wxPython]

昔ビデオ信号のキャプチャ用プログラムをゴリゴリ書いてえらく苦労したことがある。pythonならもっと簡単なのではと思い調べた。
環境:Windows MCE, python 2.5, Princetonデジ造PCA-DAV2(ドライバのみインストール、ShowBizは入れてない), WAT-502B

案の定、すごいのがあった。
VideoCapture
以下だけで、とりあえずの静止画像保存ができる。超簡単。

from VideoCapture import Device
cam = Device() # "devnum"引数でデバイスを選べる
cam.saveSnapshot('hello.jpg')

また、以下でリアルタイムに画像が見られる。参考:基本 : kei@sodan
GetBmp1とGetBmp2は同様に機能してるようだが、互いのメリットデメリットはよくわからない。
StaticBitmapは使ってはいけないようだ
import wx, os, sys
import Image,ImageDraw
from VideoCapture import Device

class MainWindow(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self, parent, wx.ID_ANY, title, size = (400,400))
        self.cam = Device()
        wx.EVT_PAINT(self, self.OnPaint)
        wx.EVT_IDLE(self, self.OnIdle)
        self.Show(True)

    def OnIdle(self, evt):
        self.Refresh(False)

    def OnPaint(self, evt):
        dc = wx.PaintDC(self)
        dc.DrawBitmap(self.GetBmp1(), 0, 0, True)

    def GetBmp1(self):
        image_pil = self.cam.getImage()
        image_wx = wx.EmptyImage(image_pil.size[0],image_pil.size[1])
        image_wx.SetData(image_pil.convert('RGB').tostring())
        return image_wx.ConvertToBitmap()

    def GetBmp2(self):
        buffer, width, height = self.cam.getBuffer()
        image_wx = wx.EmptyImage(width, height)
        image_wx.SetData(buffer)
        return image_wx.ConvertToBitmap()

        
app = wx.PySimpleApp()
frame = MainWindow(None, -1, "Imaging")
app.MainLoop()


Pythonでビデオキャプチャ作業メモ
PythonでUSBカメラから読み取り
コンターカメラ - Programming Must Go On
wxPythonとPILを使って縮小した画像を綺麗に表示CommentsAdd Star

Referrer (Inside): [2008-06-17-1]

2008-05-19 Mon

Unicodeファイル名はos.walkでは拾えるがglobだと無理っぽい [python]

Windows XP MCE with python 2.5
ここではアクサン付きの'e'を'E'と表記すると約束する。(文字化けが起き得ない確実な記録を重んずる)
ディレクトリ'unicodetest'以下に'hogE.txt'なるファイル名の空ファイルを作成した。
で、以下を実行した。

import os, glob

targetdir = u'unicodetest'
for dirpath, dirnames, filenames in os.walk(targetdir):
  for fname in filenames:
    print fname.encode('utf-8')

os.chdir(targetdir)
for f in glob.glob(u'*'):
     print f.encode('utf-8')
ファイルにリダイレクトしてメモ帳で中身を確認したら
hogE.txt
hoge.txt
だった。globでは'E'が'e'に書換えられている。Unicodeを分かってくれないのか。
下記を見るとそんな感じだ。
http://pc11.2ch.net/test/read.cgi/tech/1153585095/588
http://pc11.2ch.net/test/read.cgi/tech/1153585095/598

なお上のtargetdirのUnicode指定を外すと、os.walkでも、globと同じく勝手な書換えが起きる。

2008-05-16 Fri

POST送信の方法 - 特にmultipart/form-data [python]

スクリプトからcgiに変数を直接渡せると便利。ファイルも渡せるともっと便利。これがpythonで実現できるか?

変数だけだったら問題なく可能。
urllibを使ってPOST送信 - Perl使いのPythonちゃん

ではmultipart/form-dataでファイルも渡せるか?
どうやら標準では無理のようだ。
だけどこれに取り組んだ有志が既にいる模様。
ASPN : Python Cookbook : Http client to POST using multipart/form-data
pythonスクリプトからmultipart/form-dataを送る。

いくつか実現方法があるようだが、http://odin.himinbi.org/MultipartPostHandler.py でできた。使用例はスクリプト内に記してある。製作者に感謝。

2008-05-15 Thu

クリップボードの画像をPNGで保存する [wxPython]

WWWで見たサンプルコードを自分用に書き直してメモ。

import wx
clp = wx.Clipboard()
clp.Open()
if clp.IsSupported(wx.DataFormat(wx.DF_BITMAP)):
    do = wx.BitmapDataObject()
    clp.GetData(do)
    bmp = do.GetBitmap()
    bmp.SaveFile('clp.png', wx.BITMAP_TYPE_PNG)
    print 'finished'
else:
    print 'bitmap is not available on the clipboard'
clp.Close()
win32apiとlibpngの直叩きで同じことをした経験があるが、(wx)Pythonであまりにも簡単に出来て驚嘆した。あの苦労は何だったのだろう。。。

参考:
How to save bitmap from MS Windows clipboard to xxx.png?
クリップボードに画像(DIBイメージ)をおくりこむ - 三次元日誌

2008-05-13 Tue

pythonと日本語とunicode [python]

pythonを使っていて

UnicodeDecodeError: 'ascii' codec can't decode ...
なるエラーが出た時にどうするべきか?
[2007-10-13-1]で場当たり的な対処を学んだが、ちゃんと理解せねばと思いまた学んだ。
下記は私の現在の理解。もし間違ってたらすみません。

- Unicode
 ・21ビットの文字集合。かつては16ビットで、その領域はBMPと呼ばれ、UCS-2と同一。
 ・文字の種類とコードポイントなる数字の羅列が一対一対応。
 ・UTF-8、UTF-16などのエンコーディングでもって、コードポイントをバイト列で表現できる。

- python
 ・文字列型とUnicode文字列型は別物。前者はバイト列、後者はコードポイント列。
 ・入出力、演算の際に両者を自動で変換する親切機能あり(たぶん2.5まで)。
 ・上記機能により冒頭のエラーが出る場合が多い。対処方法は、扱うデータの種類(Unicodeか否か?エンコーディングは?)の把握に帰着する。
 ・標準ライブラリでUnicodeからの(への)エンコード(デコード)が可能。だがエンコーディング判別の機能はない。外部ライブラリでも、事実上の標準はなさそう。
 ・文字列加工はUnicodeでやるべき。


参考:
日本語文字列コード問題まとめ <= ここのpythonの記事は非常に参考になる
Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法
jijixi's diary - Python におけるマルチバイト文字の扱いをまとめてみる
PEP 0263 -- Defining Python Source Code Encodings
Unicode - Wikipedia
Unicode HOWTO (python)
ユニコード - Pylons 日本語 - PythonWeb
WeekBuildのHACK日記 UnicodeとUTF-8の違い
内部エンコーディングに使われるエンコードをUTF-8に設定する方法。 - Perl使いのPythonちゃん

Python プログラミング <= エンコード判別のためのjcode.pyがある
ppkd(ppkf)を使って、文字エンコードを自動判別(文字エンコードについて) - Perl使いのPythonちゃん
nkf for pythonの入れ方と使い方 - ふにゃるん

2008-05-11 Sun

バッチファイルの戻り値 [コマンド]

Windows(DOS、コマンドプロンプト)で用いるバッチファイルの戻り値はどうなっているのか。
・DOSコマンドの戻り値は%errorlevel%に格納される。
・バッチファイルで例えば Exit/b 7 とすると、バッチ呼出し元の%errorlevel%に7が格納される。
・上記の指定が無い場合、バッチの終了によって%errorlevel%は変更を受けない。
ということを下記で学んだ:
バッチメモ(Hishidama's bat-file Memo)
DOS/V & Windows コマンド・プロンプト・リファレンス
DOSプロンプトで発行したコマンドの結果を調べる

オマケ
バッチ・ファイル中で日付をファイル名に使用する

2008-05-07 Wed

ddの使い方 - CDの中身をバックアップしたい [コマンド]

T/O

dd if=\\.\e: of=c:\temp\disc1.iso bs=1M
http://www.chrysocome.net/dd

ファイルかどうか、あるいはディレクトリかどうか調べるにはos.path.isfileかos.path.isdir [python]

T/O

import glob, os
for f in glob.glob('*'):
    print f, os.path.isfile(f), os.path.isdir(f)

pythonスクリプトのコマンドライン引数 [python]

sys.argvに格納されている。

import sys
for arg in sys.argv:
  print arg
see: http://reddog.s35.xrea.com/wiki/Python%C8%F7%CB%BA%CF%BF.html

SKKのインストール再び [emacs]

[2007-04-09-4]とほとんど同じ。
わけあってまたインストールした。今度はEmacsW32に入れる。
apel-10.7 と ddskk-20080504 の組み合わせ。emacsにPATHを通して、設定ファイルをいじらずに下記でまあできた。

make
make what-where
make install

だが実はSKKインストール中に「そんなファイル無いです」と言われ怒られた。
http://d.hatena.ne.jp/Riso/20080129 で全く同じ症状とその対処がまとめられていたので、その通りにして解決した。

Referrer (Inside): [2009-03-29-1]

smbmountで日本語ファイル名を正しく表示できた [Linux]

LANG=en_US.UTF-8なDebian Etchから、Windowsの共有ディレクトリをsmbfsでマウントし、日本語ファイル名も正しく表示させたい。
下記でできた。

smbmount //Mymachine/mydir /mnt -o codepage=cp932,iocharset=utf8
オプションをつける際にスペースがあるとうまくいかない。つまり、下記はダメな例。
smbmount //Mymachine/mydir /mnt -o codepage=cp932, iocharset=utf8
参考:http://lists.debian.or.jp/debian-users/200405/msg00071.html

2008-05-02 Fri

WinSCPで、Windows上の日本語ファイル名のファイルをLinuxにコピーする [Linux]

Windows上のの日本語ファイル名のファイルをLinuxにコピーし、Linux上でもちゃんと見られるようにしたい。

LANG=en_US.UTF-8なDebian Etchにコピーする際に、WinSCP4.0.7で、接続プロトコルとしてSFTPを用い、Session選ぶ画面("WinSCP Login"ウィンドウ)の左のEnvironment => SFTPのProtocol optionから"Server does not use UTF-8"をOffにしてやってみた。WinSCP上では、コピーしたファイルが正常に見れた。また、PuTTY 0.59 ごった煮版で、設定ダイアログのウィンドウ=>変換=>文字セットをUTF-8としてログインしてみたら、lsで先にコピーしたファイル名が正しく表示された。

どの段階でどの文字コードがどういう風に使われあるいは変換されているのかイマイチ理解できていないが、まあうまくいってそうなのでいいだろう。
参考:日本語ファイル関連メモ

2008-05-01 Thu

debianのネットワーク設定 [debian][Linux]

以下を見ながら設定して万事解決。
http://park15.wakwak.com/~unixlife/linux/de-network.html

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2010-03-08 22:21