「データ確認のためちょこっとだけ画像表示させるマクロ」のプラグイン版です。
# FileWatcher_Modoki_new.py
from ij import IJ
from ij import WindowManager
from ij.gui import ImageWindow
import time
import os
version = "1.2.0"
IJ.log("")
IJ.log("FileWatcher Modoki New")
IJ.log("ver" + version)
IJ.log("")
checkImageTime = 1.8
width = 580
height = 870
#------------------------------------------------------------------------------
# Define getFileList
def getFileList(dir):
list = []
for filename in os.listdir(dir):
if os.path.isdir(os.path.join(dir, filename)):
if not filename.startswith("."):
filename += "/"
list.append(filename)
if os.path.isfile(os.path.join(dir, filename)):
if not filename.startswith("."):
list.append(filename)
list.sort()
return list
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# define zeroPad
def zeroPad(number, length):
return str(number).zfill(length)
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Define getElapsedTime
def getElapsedTime(initialTime,currentTime):
global min
Time = currentTime - initialTime;
msec = Time % 1
msec = int(msec * 1000)
sec = int(Time % 60)
min = int(Time / 60) % 60
hour = int(Time / 3600)
strElapsedTime = zeroPad(hour,2) + "h : " + zeroPad(min,2) + "m : " + zeroPad(sec,2) + "." + zeroPad(msec,3) + "s"
return strElapsedTime
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Define closeOthers
def closeOthers(frontImageTitle):
# getTitle of displayed Images
displayedImages = WindowManager.getImageTitles()
# close all images except the foremost one
for title in displayedImages:
if title != frontImageTitle:
WindowManager.getFrame(title).close()
#------------------------------------------------------------------------------
# zero time
initialTime = time.time()
# select directory
surveillanceDir = IJ.getDirectory("Choose a directory")
initialList = getFileList(surveillanceDir)
# initialize
min = 0
while min < 30:
# currentMemory
bytes = float(IJ.currentMemory())
bytes = bytes / 1000000
# count elapsed time
currentTime = time.time()
elapsedTime = getElapsedTime(initialTime,currentTime)
IJ.log("\\Update:ElapsedTime ... " + elapsedTime + " " + "{:.2f}".format(bytes) + "[MB]")
# get current list
currentList = getFileList(surveillanceDir)
# obtain new files using set difference
newFiles = list(set(currentList) - set(initialList))
newFiles.sort()
# if new files are detected...
for newTitle in newFiles:
path = surveillanceDir + newTitle
print path
imp = IJ.openImage(path)
# show image
iw = ImageWindow(imp)
iw.setLocationAndSize(0,0,580,870)
imp.show()
# close all images except the foremost one
frontImageTitle = newTitle
closeOthers(frontImageTitle)
# ime to check the image
time.sleep(checkImageTime)
# reset time
initialTime = time.time()
# update list
initialList = currentList
# wait
time.sleep(0.1)
# End of proc
IJ.showMessage("Time out.")
raise RuntimeError("Time out")
Pythonの本を読んでいて「set型は順番を考慮しないというデメリットがある一方で、集合に関する演算が高速」的な記述を見たので実装してみました。
こちらが読んだ本。ImageJマクロのおかげでちょっとプログラミングがわかるけどPythonはよう知らん、という私にはちょうどいい感じの本でした。
肝心な処理速度ですが、前回の「最終更新時間チェック法」と比べてみたところ、残念ながら前回バージョンの方がちょびっとだけ速いという結果でした。最終更新時間チェック法は単ループで回してるので、それが効いてるみたいです。
それでも「set型 差集合法」もしっかり速いので、ひとまずはこれでじゅうぶんかなって感じです。
最終更新時間チェック法
おしまい
ライセンスなんかは一切無いので、ぜひぜひ自由に使ってみてください!