From 6d21985528741198b27d691aee4a1d556580ca98 Mon Sep 17 00:00:00 2001 From: Chunk Date: Wed, 4 Mar 2015 17:51:38 +0800 Subject: [PATCH] MPB finished. The next step is dataset. --- common.pyc | Bin 2979 -> 0 bytes jpegObj/__init__.pyc | Bin 14522 -> 0 bytes jpegObj/base.pyc | Bin 1791 -> 0 bytes jpegObj/dct.pyc | Bin 2478 -> 0 bytes msteg/StegBase.pyc | Bin 6181 -> 0 bytes msteg/__init__.pyc | Bin 251 -> 0 bytes msteg/steganalysis/MPB.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- msteg/steganalysis/MPB.pyc | Bin 4462 -> 0 bytes msteg/steganalysis/__init__.pyc | Bin 189 -> 0 bytes msteg/steganography/F3.pyc | Bin 3791 -> 0 bytes msteg/steganography/F4.pyc | Bin 4777 -> 0 bytes msteg/steganography/F5.pyc | Bin 9457 -> 0 bytes msteg/steganography/LSB.pyc | Bin 4366 -> 0 bytes msteg/steganography/__init__.pyc | Bin 190 -> 0 bytes test_jpeg.py | 3 --- 15 files changed, 83 insertions(+), 6 deletions(-) diff --git a/common.pyc b/common.pyc index 27f6487..080bc31 100644 Binary files a/common.pyc and b/common.pyc differ diff --git a/jpegObj/__init__.pyc b/jpegObj/__init__.pyc index b60cc33..3b4cf0c 100644 Binary files a/jpegObj/__init__.pyc and b/jpegObj/__init__.pyc differ diff --git a/jpegObj/base.pyc b/jpegObj/base.pyc index df49e9e..e0df39c 100644 Binary files a/jpegObj/base.pyc and b/jpegObj/base.pyc differ diff --git a/jpegObj/dct.pyc b/jpegObj/dct.pyc index 1e7ed6f..1df6868 100644 Binary files a/jpegObj/dct.pyc and b/jpegObj/dct.pyc differ diff --git a/msteg/StegBase.pyc b/msteg/StegBase.pyc index 02fbd8d..159c4cb 100644 Binary files a/msteg/StegBase.pyc and b/msteg/StegBase.pyc differ diff --git a/msteg/__init__.pyc b/msteg/__init__.pyc index 8fb5d2b..8c3fbba 100644 Binary files a/msteg/__init__.pyc and b/msteg/__init__.pyc differ diff --git a/msteg/steganalysis/MPB.py b/msteg/steganalysis/MPB.py index 6db9a50..b7d7d44 100644 --- a/msteg/steganalysis/MPB.py +++ b/msteg/steganalysis/MPB.py @@ -14,10 +14,12 @@ from common import * import csv import json import pickle +import cv2 from sklearn import svm base_dir = '/home/hadoop/data/HeadShoulder/' + class MPB(StegBase): """ Markov Process Based Steganalyasis Algo. @@ -25,8 +27,10 @@ class MPB(StegBase): def __init__(self): StegBase.__init__(self, sample_key) + self.model = None + self.svm = None - def get_trans_prob_mat_orig(self, ciq, T=4): + def _get_trans_prob_mat_orig(self, ciq, T=4): """ Original! Calculate Transition Probability Matrix. @@ -88,7 +92,10 @@ class MPB(StegBase): :param T: signed integer, usually 1~7 :return: TPM - 3-D tensor, numpy array of size (2*T+1, 2*T+1, 4) """ - # return self.get_trans_prob_mat_orig(ciq, T) + + # return self._get_trans_prob_mat_orig(ciq, T) + + # timer = Timer() ciq = np.absolute(ciq).clip(0, T) TPM = np.zeros((2 * T + 1, 2 * T + 1, 4), np.float64) @@ -159,13 +166,23 @@ class MPB(StegBase): return TPM - def _load_dataset(self,list_file): + def load_dataset(self, mode, file): + if mode == 'local': + return self._load_dataset_from_local(file) + elif mode == 'remote' or mode == 'hbase': + return self._load_dataset_from_hbase(file) + else: + raise Exception("Unknown mode!") + + def _load_dataset_from_local(self, list_file='images_map_Train.tsv'): """ load jpeg dataset according to a file of file-list. :param list_file: a tsv file with each line for a jpeg file path :return:(X,Y) for SVM """ + list_file = base_dir + list_file + X = [] Y = [] dict_tagbuf = {} @@ -194,13 +211,76 @@ class MPB(StegBase): return X, Y + def _load_dataset_from_hbase(self, table='ImgCV'): + pass + + + def _model_svm_train_sk(self, X, Y): + timer = Timer() + timer.mark() + lin_clf = svm.LinearSVC() + lin_clf.fit(X, Y) + with open('res/tmp.model', 'wb') as modelfile: + model = pickle.dump(lin_clf, modelfile) + + timer.report() + + self.svm = 'sk' + self.model = lin_clf + + return lin_clf + + def _model_svm_predict_sk(self, image, clf=None): + if clf is None: + if self.svm == 'sk' and self.model != None: + clf = self.model + else: + with open('res/tmp.model', 'rb') as modelfile: + clf = pickle.load(modelfile) + + im = jpegObj.Jpeg(image, key=sample_key) + ciq = im.coef_arrays[jpegObj.colorMap['Y']] + tpm = self.get_trans_prob_mat(ciq) + + return clf.predict(tpm) + + + def _model_svm_train_cv(self, X, Y): + svm_params = dict(kernel_type=cv2.SVM_LINEAR, + svm_type=cv2.SVM_C_SVC, + C=2.67, gamma=5.383) + + timer = Timer() + timer.mark() + svm = cv2.SVM() + svm.train(X, Y, params=svm_params) + svm.save('res/svm_data.model') + self.svm = 'cv' + self.model = svm + return svm + def _model_svm_predict_cv(self, image, svm=None): + if svm is None: + if self.svm == 'cv' and self.model != None: + clf = self.model + else: + svm = cv2.SVM() + svm.load('res/svm_data.model') + im = jpegObj.Jpeg(image, key=sample_key) + ciq = im.coef_arrays[jpegObj.colorMap['Y']] + tpm = self.get_trans_prob_mat(ciq) + return svm.predict(tpm) + def train_svm(self): + X, Y = self.load_dataset('local', 'images_map_Train.tsv') + return self._model_svm_train_sk(X, Y) + def predict_svm(self,image): + return self._model_svm_predict_sk(image) diff --git a/msteg/steganalysis/MPB.pyc b/msteg/steganalysis/MPB.pyc index 92d0b75..d1d23cf 100644 Binary files a/msteg/steganalysis/MPB.pyc and b/msteg/steganalysis/MPB.pyc differ diff --git a/msteg/steganalysis/__init__.pyc b/msteg/steganalysis/__init__.pyc index f5328e5..72cd600 100644 Binary files a/msteg/steganalysis/__init__.pyc and b/msteg/steganalysis/__init__.pyc differ diff --git a/msteg/steganography/F3.pyc b/msteg/steganography/F3.pyc index adcd95d..f780cb4 100644 Binary files a/msteg/steganography/F3.pyc and b/msteg/steganography/F3.pyc differ diff --git a/msteg/steganography/F4.pyc b/msteg/steganography/F4.pyc index 5c67fc5..4de9940 100644 Binary files a/msteg/steganography/F4.pyc and b/msteg/steganography/F4.pyc differ diff --git a/msteg/steganography/F5.pyc b/msteg/steganography/F5.pyc index 4d08df6..95c5a18 100644 Binary files a/msteg/steganography/F5.pyc and b/msteg/steganography/F5.pyc differ diff --git a/msteg/steganography/LSB.pyc b/msteg/steganography/LSB.pyc index 70a29cb..4e40223 100644 Binary files a/msteg/steganography/LSB.pyc and b/msteg/steganography/LSB.pyc differ diff --git a/msteg/steganography/__init__.pyc b/msteg/steganography/__init__.pyc index 7722fd9..de73549 100644 Binary files a/msteg/steganography/__init__.pyc and b/msteg/steganography/__init__.pyc differ diff --git a/test_jpeg.py b/test_jpeg.py index d68966d..1600bd3 100644 --- a/test_jpeg.py +++ b/test_jpeg.py @@ -22,9 +22,6 @@ sample_key = [46812L, 20559L, 31360L, 16681L, 27536L, 39553L, 5427L, 63029L, 565 5908L, 59816L, 56765L] - - - def test_setblocks(): """ wholewise -- libgit2 0.21.2