カテゴリー別アーカイブ: PC

【Py2.5】文字列をビット単位で調べる

[pukiwiki]

急に、Flash(SWF)のヘッダを調べたくなったのだけれど、バイナリエディタだけだと大変なので、ビット単位で調べるための関数を書いてみました

で、そもそも、何で今更FlashをPythonでいじろうと思ったかといいますと。。。
*[[【動画】世界初 3Dデジカメ:http://www.tv-tokyo.co.jp/emorning/contents/2009-04/03/028652.html]]
こちらの立体カメラの静止画、左右2枚を ”「マウスドラッグすると微妙に向きが変わって見えるFlash」”に変換したいな、と。
(できれば、左右の画像の中割も行いたい)
[/pukiwiki]

続きを読む 【Py2.5】文字列をビット単位で調べる

namedtuple(名前付きタプル)をPython2.5でやってみた

[pukiwiki]
日本語WortdNetフロントエンドをPython2.5で。

*[[日本語WordNet:http://nlpwww.nict.go.jp/wn-ja/]]
こちらが公式サイト。
-[[WordNet(ウィキペディア) :http://ja.wikipedia.org/wiki/WordNet]]
linkの意味などの説明
*[[(Pythonで)日本語WordNetのデータベースを探索するフロントエンドプログラム:http://subtech.g.hatena.ne.jp/y_yanbe/20090314/p2]]
こちらの記事のプログラムを動かすには、Python2.6以降に追加された namedtupleが必要。 (collectionモジュールに収録)

なのですがー うちは2.5を使ってるので、上記プログラムに必要な機能のみ作ってみました。

[/pukiwiki]
続きを読む namedtuple(名前付きタプル)をPython2.5でやってみた

「PDFMiner」を使ってテキストを抽出

[pukiwiki]
”日本語”のPDFファイル300個ほどからデータを抜き出すことになりました。
で、プロテクトもかかってないし、手作業で行おうかと思ったのですが、以前から興味のあった、Pure Python なライブラリPDFMinerを使い、テキストデータを抽出してみました。
[/pukiwiki]

続きを読む 「PDFMiner」を使ってテキストを抽出

ぺんてる airpen MINI(エアペンミニ )

[pukiwiki]
*[[海外大手ウェブサイト98のリンク重複具合グラフ:http://blog.makezine.com/archive/2009/02/visualizing_the_number_of_links_on.html]]
ただし、あくまでリンクURLの重複らしいので、ネタ的に被るはずのGoogle News, Yahoo News , CNN 、ロイターなどは ぜんぜん 重なってないです。
—-
普段は、多色ボールペン+スケッチブックでメモをとることが多い私。
なので、ちょっと気になってる製品がありまして。。。

*[[デジタルペンな生活 airpen MINI(エアペンミニ EA3)をしゃぶりつくしてやるぅぅ:http://blog.livedoor.jp/splashdigi/]]
ぺんてるの airpen Mini。 欲しいなぁと思いつつも、もうちょっと情報が欲しいなーと思ってたのですが、 詳しい使用感が書かれてるblogさんを発見。情報に感謝。とくにコチラの記事が気になります
-[[airpen MiniのSDK:http://blog.livedoor.jp/splashdigi/archives/330651.html]]
-[[airpenで使えるSDKの日本語マニュアル:http://blog.livedoor.jp/splashdigi/archives/330651.html]]
[/pukiwiki]
続きを読む ぺんてる airpen MINI(エアペンミニ )

【PyGame】画面のAVI書き出し&スクリーンショット

棚上げしてあったPyGameのチュートリアルにチャレンジ開始。
ついでに、PyGameの画面を静止画や動画で保存できるようにするモジュールを書いてみました。

PyGameとは、ゲーム用のライブラリSDLをPythonから使えるようにしたもの。

本格的にゲームを作るつもりは無いのですが。。。ちょっとしたインタラクティブな映像を作るのによさげ。
表示中の映像をAVIに保存する機能は、標準では用意されてないみたいなので、書いてみました。

(もっと 賢いやり方があったら教えてください。。。)
数日~数週間、一時 勉強を中断しなきゃいけないので、コードを紛失しないようにメモ。
また、時間が出来たら 動くサンプルコード&サンプル動画を作成予定
<<注意>>
音声は保存できません。 (OpenCVの制限)

コード

以下を videowriter.pyというファイル名で保存。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
#videowriter.py
import Image
import CVtypes as cv
import atexit

#SCREEN_SIZE = (W, H)

class VideoWriter(object):
    def write_frame_pygame(self,sc):
        """
            write_frame for PyGame Surface
        """
        #print self.idx
        self.idx+=1
        s=str(sc.get_buffer().raw)
        cv.cvSetData(self.cvimg,s,self.W*self.bpp)
        #cv.cvShowImage("test",self.cvimg)
        cv.cvWriteFrame(self.vw,self.cvimg)

    def atexist(self):
        cv.cvReleaseVideoWriter(self.vw)

    def __init__(self,fname, size=(640,480),
                 fps=30,codec=-1,bpp=4,mode="pygame"):
        """
        bpp=bit_per_pixel
        mode  , now pygame only (extendable)
        """
        self.idx=0
        modelist={"pygame":self.write_frame_pygame}

        self.write_frame=modelist[mode]
        self.bpp=bpp
        self.SCREEN_SIZE=size
        self.W,self.H=size
        self.vw=cv.cvCreateVideoWriter(fname,
            codec,fps,cv.CvSize(*size))
        self.cvimg=cv.cvCreateImage(cv.CvSize(*size),8,bpp)
        atexit.register(self.atexist)
        #終了時に aviファイルを自動的にclose

#オマケ
#PyGameのSurfaceデータを PIL画像データに変換
def img(s):
#ピクセル取得
    buf=s.get_buffer()
    im =Image.fromstring("RGBA",s.get_size(),buf.raw)
    B,G,R,A=im.split()
    return Image.merge("RGBA",(R,G,B,A))

使い方

このコード自体は検証してないです。  後日、ちゃんと動くサンプルを作成予定~
代表的なPyGameのサンプルコードは、こんな感じのループになってるのですが

import pygame
from pygame.locals import *
from videowriter import VideoWriter,img  #☆☆☆ インポート
#
vw=VideoWriter("filename.avi")        #☆☆☆  出力ファイル名を指定して初期化
#
SCREEN_SIZE=(640,480)

pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE)
~~~~(中略)~~~~~~
clock = pygame.time.Clock()
while True: #Pygameのメインループ
    clock.tick(30)  #毎秒の表示コマ数に応じてウェイト
                        #ディスク上のAVIへ書き込むことを考えると、FPSは 15コマ/秒程度がよさげ
                        # (速いマシンなら もっと速くできるかもですが)
    screen.blit( ほげほげ, (x,y))  # 個々のキャラクターを描画

  ~~~~このへんに、描画のメイン処理~~~~~~
    pygame.display.update()             #画面に反映
    vw.write_frame(screen)               #☆☆☆ ここでAVI に 1コマ書き出し


    for event in pygame.event.get():   #窓を閉じると終了
        if event.type == QUIT:
            sys.exit()

という感じで使います。

オマケの静止画保存

from videowriter import VideoWriter,img  #☆☆☆ インポート
from datetime import datetime
#画面のスクリーンショットをとりたくなった場所で適宜
im=img(screen)
im.save("screenshot%s.jpg"%datetime.today().strftime("%Y%m%d-%H%M%S"))

続きを読む 【PyGame】画面のAVI書き出し&スクリーンショット