ymnk13 / UMATracker

動物(UMA)の動きを追跡します!! UMATracker = Useful Multiple Animal Tracking Software
7 stars 1 forks source link

ブロックのモジュール化 #14

Open Licht-T opened 9 years ago

Licht-T commented 9 years ago

半分メモ.

何が目的か

ブロックのコードをPython部分を含めモジュール化して,適当なディレクトリにDrag and dropすれば使えるようにすること.

どうやって実現するか

1. フィルタクラスを用意

import cv2
import numpy as np

class FilterFoo:
    # デバッグ用
    def __init__(self, img):
        self.height, self.height = img.shape[:2]

        self.initialize(img)

    # マスクなどを初期化
    def initialize(self, img):
        self.mask = ...

    # フィルタメソッド
    def filter(self, img, arg1, arg2, ...):
        return cv2.bitwise_and(img, img, mask=self.mask)

2. コードをAST構文木に直して編集

この辺のライブラリを使えば簡単に出来る. imgやらargやらを抜き出して,{0}みたいなのに変換. https://redbaron.readthedocs.org/en/latest/index.html

3. jinja2みたいなテンプレートライブラリを使って,JSやHTMLに展開

まずAST構文木から前処理とフィルタの部分をとってきてJSに展開したあと,フィルタリストをHTMLに展開.

何が問題か

実装コストの割に,見返りが少ない.

  1. ブロックの効果が制限される 矩形選択みたいに,インプットに対して何らかのエフェクトをかけるのが難しい.
  2. 外部ファイルのクラスやメソッドを呼び出すのが難しい 無理矢理インライン展開するようなライブラリがあるなら出来るけど,見たことない.
  3. ブロックのデザインに自由度がなくなる 無理矢理テンプレート展開するので,その辺のデザインをユーザーがいじるのは厳しい.