Rapid MinerによるOpenCV@Pythonのグラフィカルスクリプトの試行

本リンク先にあるようにRapid Minerでnative Pythonがコール可能。試行記事(日本語)

ひとまず、以下を確認した。

・追加される「Execute Python」上でOpenCV(cv2)をコールするPythonスクリプトが実行可能を確認。

・「Execute Python」の入出力はpandasのデータフレームなので、スクリプト内でnumpyのndarrayに変換が必須?(下記のサンプルスクリプトを参照)。

・ブロック間で複数個のデータ授受が可能(一つのブロックで複数個の入出力を持てる)。

・データフレームは2次元データ。⇒ブロック間でのデータ授受には1ch画像のみ可能のようである(工夫すれば多chも可能か?)。

⇒各手法のブロックを準備しておけばアルゴリズム試行が手軽にできるようになるかもしれない。

試作したスクリプトを以下に記す(各ブロックで記述したスクリプト)。

「cv2.imread」

In [4]:
import pandas as pd
import cv2

def rm_main():
    
    #画像読込
    img = cv2.imread("C:\\tmp\\lena.jpg",0)

    #画像をポップアップ表示してみる
    cv2.imshow("Show Image",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    #numpyデータをpandasのデータフレームに変換
    data = pd.DataFrame(img)
    return data

「cv2.bilateralFilter」

In [4]:
import pandas as pd
import numpy as np
import cv2

def rm_main(data):

    #pandasのデータフレームをnumpyデータに変換
    in_img = np.array(data, dtype="uint8")

    #バイラテラルフィルタ処理
    out_img = cv2.bilateralFilter(in_img, 30, 40, 10)                              
    
    #numpyデータをpandasのデータフレームに変換    
    data = pd.DataFrame(out_img)
    return data

「cv2.AKAZE」

In [2]:
import pandas as pd
import numpy as np
import cv2

def rm_main(data):

    #pandasのデータフレームをnumpyデータに変換    
    in_img = np.array(data, dtype="uint8")

    #AKAZE    
    akaze = cv2.AKAZE_create()                                
    kp = akaze.detect(in_img,None)                        
    kp, des = akaze.compute(in_img, kp)
    
    #抽出した特徴点を表示
    out_img = cv2.drawKeypoints(in_img, kp, None,(255,255,255),4)  

    gray_img  = cv2.cvtColor(out_img,  cv2.COLOR_BGR2GRAY)

    #numpyデータをpandasのデータフレームに変換 
    data = pd.DataFrame(gray_img)
    
    return data

「cv2.imgshow」

In [3]:
import pandas as pd
import numpy as np
import cv2

def rm_main(data):

    #pandasのデータフレームをnumpyデータに変換      
    in_img = np.array(data, dtype="uint8")

    #画像をポップアップ表示してみる      
    cv2.imshow("Show Image",in_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    return data
inserted by FC2 system