Enginius/Python&TensorFlow

Simple Handshaking between Matlab and TensorFlow

해리s 2017. 4. 17. 15:33

Simple handshaking scripts between Matlab and Python (Tensorflow). It is assumed that two processes (or machines) are virtually connected and synced via some external programs, such as Dropbox. A simple finite state machine is used to come up with this handshaking process. 

 손에 손 잡고~ 


1. MATLAB Side Code

 

% CONFIGURATION

step_matlab = 1; % FOR HANDSHAKING

savename = 'tensorflow_code/data/mats/step_fr_matlab.mat';

loadname = 'tensorflow_code/data/mats/step_fr_tf.mat';

 

% RUN FINITE STATE MACHINE

FSM_STEP = 0; FSM_STEP_PREV = 0;

while 1

    switch FSM_STEP

        case 0 % INITIALIZE 

            msg  = 'THIS IS FROM MATLAB';

            save(savename, 'step_matlab', 'msg');

            fprintf('[0] %s SAVED. STEP IS [%d]. \n' ...

                , savename, step_matlab);

            FSM_STEP = 1;

        case 1 % LOAD FROM TENSORFLOW (CHECK UPDATE)

            if exist(loadname, 'file')

                l = load(loadname);

                step_tf = l.step_tf;

                if step_tf > step_matlab

                    % IF TF GAVE BIGGER STEP, 

                    FSM_STEP = 2;

                end

            else

                % fprintf('%s DOES NOT EXIST. \n', loadname);

            end

        case 2 % DO SOME ACTION HERE 

            % HERE, WE JUST INCREASE THE STEP

            step_matlab = step_tf + 1; 

            msg  = 'THIS IS FROM MATLAB';

            FSM_STEP = 3;

            fprintf(2, '[2] STEP_MATLAB IS [%d] \n', step_matlab);

        case 3 % SAVE TO TENSORFLOW 

            save(savename, 'step_matlab', 'msg');

            FSM_STEP = 1;

    end

    if FSM_STEP ~= FSM_STEP_PREV % PRINT STEP TRANSITIONS

        fprintf('FSM STEP CHANGE FROM [%d] TO [%d] \n' ...

            , FSM_STEP_PREV, FSM_STEP);

        FSM_STEP_PREV = FSM_STEP;

    end

    pause(5);

end


2. Python Side Code

 

import os

import time

import scipy.io 

print ("PACKAGES LOADED")


# CONFIGURATION

loadname = './data/mats/step_fr_matlab.mat'

savename = './data/mats/step_fr_tf.mat'

step_tf  = 0


# RUN FINITE STATE MACHINE

FSM_STEP = 0

FSM_STEP_PREV= FSM_STEP

while True:

    if FSM_STEP is 0: # INITIALIZATION

        FSM_STEP = 1

    elif FSM_STEP is 1: # CHECK MATLAB UPDATE

        # LOAD 

        if os.path.exists(loadname) is False:

            print ("NO FILE EXISTS!")

        else:

            l = scipy.io.loadmat(loadname)

            step_matlab = l['step_matlab'][0]

        # CHECK

        if step_matlab > step_tf:

            FSM_STEP = 2;

    elif FSM_STEP is 2: # DO SOME ACTIONS HERE

        step_tf = step_matlab + 1

        FSM_STEP = 3

        print ("STEP_TF IS [%d]" % (step_tf))

    elif FSM_STEP is 3: # SAVE

        scipy.io.savemat(savename, mdict={'step_tf': step_tf})

        FSM_STEP = 1

    else:

        print ("FSM_STEP SHOULD NOT BE [%d]." % (FSM_STEP))

    

    # PRINT TRANSITIONS

    if FSM_STEP_PREV != FSM_STEP:

        print ("FSM_STEP [%d] => [%d]" % (FSM_STEP_PREV, FSM_STEP))

        FSM_STEP_PREV = FSM_STEP

    # TIME DELAY (ONE SECOND)

    time.sleep(5)