ライフスライス/カメラスクリプト

ライフスライス/カメラスクリプト

Nokia 6630 で使えるライフスライス用のスクリプト。

ほとんどPython for 702NK/702NK2プログラミングブックのパクリ

注意

たぶん Nokia 6630 の特性だとは思うが、大量ファイルが存在するディレクトリへのアクセスが非常にノロイです。 これはどのアプリを使っても遅い

ライフスライスだと2日連続でライフスライスする場合は注意 1ディレクトリに1000に近い数のファイルがあると、画像の書き込みに50秒以上かかるようになってしまう。 これだと、撮影間隔を短く設定していても、全然長くなる場合があるので注意。

ソース

ご勝手にどうぞ

本のほうのカメラサンプルコードにはパス指定の記述に誤りがある。バックスラッシュは2つ重ねないとエスケープになってしまう。

出版社の mycom に正誤情報がなかった。

「lsImage」としているディレクトリがないとコケるので作っておく

2007年05月20日

  • 起動時に撮影間隔を設定できるように変更
  • ディレクトリを日付で切るように変更
  • ちょっとPythonの文法を勘違いしてたところ変更
#時間系
import time
 
#ファイル操作系
import os
 
#標準のUI
import appuifw
 
#携帯固有の機能
import e32
 
#画像の扱い
import graphics
 
#カメラコントロール
import camera
#-----importここまで-----------------------
 
#ライフスライスカメラクラス宣言
#本丸写しでは芸がないのでクラス
class LifeSliceCamera:
    #待ち秒数。
    #待ち秒数はインスタンス間で不変なのでクラス属性に
    intervalSecond = 60
 
    #動作中フラグ
    #runFlg 
 
    #撮影間隔を設定
    def __init__(self, _intervalSecond):
        #nullチェック
        if _intervalSecond != None:
 
            self.intervalSecond = _intervalSecond
        #違うならデフォルト値
        else:
            self.intervalSecond = LifeSliceCamera.intervalSecond
 
    #ライフスライス開始
    def startLifeSlice(self):
        #動作中フラグを立てる
        self.runFlg = 1
        #撮影開始
        self.takePictures()
 
    #ライフスライス終了
    def stopLifeSlice(self):
        #フラグを倒す
        self.runFlg = 0
 
    #写真を撮り続ける
    def takePictures(self):
        #ファイル名の保存場所定義
        fileName = ""
        #ディレクトリ名
        dirName = ""
 
        #動作ループ開始
        while self.runFlg:
 
            #写真を撮る
            myImage = camera.take_photo()
 
            #逆さまなので180度まわす(状況に応じて)
            myImage = myImage.transpose(graphics.ROTATE_180)
 
            #ファイル名の決定(年月日時分秒jpgにする)
            fileName = time.strftime("%Y%m%d%H%M%S", time.localtime())
 
            #日付ごとにディレクトリを切る
            dirName = time.strftime("%Y%m%d", time.localtime())
            if not os.path.exists("e:\\lsImage\\" + dirName):
                print "Dir exist"
                os.mkdir("e:\\lsImage\\" + dirName)
 
            print fileName
            #保存 コールバックなし(同期処理)
 
            myImage.save("e:\\lsImage\\" + dirName + "\\" + fileName + ".jpg")            
 
            #休みを入れる
            e32.ao_sleep(self.intervalSecond)
        #---------------------------------------------
        #終了
        print "end"
 
#ここからメイン
 
#撮影間隔を決めるダイアログ表示
intervalSecond = appuifw.query(unicode("撮影間隔設定(秒)", "utf-8"), "number")
 
#ライフスライスカメラオブジェクトの作成
lsc = LifeSliceCamera(intervalSecond)
 
#キャンセルボタンに終了のメソッドを関連付ける
appuifw.app.exit_key_handler = lsc.stopLifeSlice
 
#開始
lsc.startLifeSlice()
lifeslice/camera_script.txt · 最終更新: 2017-02-09 17:01 by ore