def main(): attacks_doc="\n" \ " Attacks to LSB replacement:\n" \ " - spa: Sample Pairs Analysis.\n" \ " - rs: RS attack." embsim_doc="\n" \ " Embedding simulators:\n" \ " - lsbr-sim: Embedding using LSB replacement simulator.\n" \ " - lsbm-sim: Embedding using LSB matching simulator.\n" \ " - hugo-sim: Embedding using HUGO simulator.\n" \ " - wow-sim: Embedding using WOW simulator.\n" \ " - s-uniward-sim: Embedding using S-UNIWARD simulator.\n" \ " - j-uniward-sim: Embedding using J-UNIWARD simulator.\n" \ " - hill-sim: Embedding using HILL simulator.\n" \ " - ebs-sim: Embedding using EBS simulator.\n" \ " - ued-sim: Embedding using UED simulator.\n" \ " - nsf5-sim: Embedding using nsF5 simulator." model_doc="\n" \ " Model training:\n" \ " - esvm: Ensemble of Support Vector Machines.\n" \ " - e4s: Ensemble Classifiers for Steganalysis.\n" \ " - xu-net: Convolutional Neural Network for Steganalysis." mldetect_doc="\n" \ " ML-based detectors:\n" \ " - esvm-predict: Predict using eSVM.\n" \ " - e4s-predict: Predict using EC." feaextract_doc="\n" \ " Feature extractors:\n" \ " - srm: Full Spatial Rich Models.\n" \ " - hill-maxsrm: Selection-Channel-Aware Spatial Rich Models for HILL.\n" \ " - srmq1: Spatial Rich Models with fixed quantization q=1c.\n" \ " - scrmq1: Spatial Color Rich Models with fixed quantization q=1c.\n" \ " - gfr: JPEG steganalysis with 2D Gabor Filters." auto_doc="\n" \ " Unsupervised attacks:\n" \ " - ats: Artificial Training Sets." if len(sys.argv) < 2: print sys.argv[0], "<command>\n" print "COMMANDS:" print attacks_doc print mldetect_doc print feaextract_doc print embsim_doc print model_doc print auto_doc print "\n" sys.exit(0) if False: pass # -- ATTACKS -- # {{{ spa elif sys.argv[1] == "spa": if len(sys.argv) != 3: print sys.argv[0], "spa <image>\n" sys.exit(0) if not utils.is_valid_image(sys.argv[2]): print "Please, provide a valid image" sys.exit(0) threshold = 0.05 I = misc.imread(sys.argv[2]) if len(I.shape) == 2: bitrate = attacks.spa(sys.argv[2], None) if bitrate < threshold: print "No hiden data found" else: print "Hiden data found", bitrate else: bitrate_R = attacks.spa(sys.argv[2], 0) bitrate_G = attacks.spa(sys.argv[2], 1) bitrate_B = attacks.spa(sys.argv[2], 2) if bitrate_R < threshold and bitrate_G < threshold and bitrate_B < threshold: print "No hiden data found" sys.exit(0) if bitrate_R >= threshold: print "Hiden data found in channel R", bitrate_R if bitrate_G >= threshold: print "Hiden data found in channel G", bitrate_G if bitrate_B >= threshold: print "Hiden data found in channel B", bitrate_B sys.exit(0) # }}} # {{{ rs elif sys.argv[1] == "rs": if len(sys.argv) != 3: print sys.argv[0], "spa <image>\n" sys.exit(0) if not utils.is_valid_image(sys.argv[2]): print "Please, provide a valid image" sys.exit(0) threshold = 0.05 I = misc.imread(sys.argv[2]) if len(I.shape) == 2: bitrate = attacks.rs(sys.argv[2], None) if bitrate < threshold: print "No hiden data found" else: print "Hiden data found", bitrate else: bitrate_R = attacks.rs(sys.argv[2], 0) bitrate_G = attacks.rs(sys.argv[2], 1) bitrate_B = attacks.rs(sys.argv[2], 2) if bitrate_R < threshold and bitrate_G < threshold and bitrate_B < threshold: print "No hiden data found" sys.exit(0) if bitrate_R >= threshold: print "Hiden data found in channel R", bitrate_R if bitrate_G >= threshold: print "Hiden data found in channel G", bitrate_G if bitrate_B >= threshold: print "Hiden data found in channel B", bitrate_B sys.exit(0) # }}} # -- ML-BASED DETECTORS -- # {{{ esvm-predict elif sys.argv[1] == "esvm-predict": if len(sys.argv) != 5: print sys.argv[ 0], "esvm-predict <model-file> <feature-extractor> <image/dir>" print feaextract_doc sys.exit(0) model_file = sys.argv[2] extractor = sys.argv[3] path = utils.absolute_path(sys.argv[4]) files = [] if os.path.isdir(path): for dirpath, _, filenames in os.walk(path): for f in filenames: path = os.path.abspath(os.path.join(dirpath, f)) if not utils.is_valid_image(path): print "Warning, please provide a valid image: ", f else: files.append(path) else: files = [path] clf = pickle.load(open(model_file, "r")) for f in files: X = feaext.extractor_fn(extractor)(f) X = X.reshape((1, X.shape[0])) p = clf.predict_proba(X) print p if p[0][0] > 0.5: print os.path.basename(f), "Cover, probability:", p[0][0] else: print os.path.basename(f), "Stego, probability:", p[0][1] # }}} # {{{ e4s-predict elif sys.argv[1] == "e4s-predict": if len(sys.argv) != 5: print sys.argv[ 0], "e4s-predict <model-file> <feature-extractor> <image/dir>\n" print "" print feaextract_doc print "" sys.exit(0) model_file = sys.argv[2] extractor = sys.argv[3] path = utils.absolute_path(sys.argv[4]) files = [] if os.path.isdir(path): for dirpath, _, filenames in os.walk(path): for f in filenames: path = os.path.abspath(os.path.join(dirpath, f)) if not utils.is_valid_image(path): print "Warning, please provide a valid image: ", f else: files.append(path) else: files = [path] clf = models.Ensemble4Stego() clf.load(model_file) for f in files: X = feaext.extractor_fn(extractor)(f) X = X.reshape((1, X.shape[0])) p = clf.predict(X) if p[0] == 0: print os.path.basename(f), "Cover" else: print os.path.basename(f), "Stego" # }}} # -- FEATURE EXTRACTORS -- # {{{ srm elif sys.argv[1] == "srm": if len(sys.argv) != 4: print sys.argv[0], "srm <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] feaext.extract_features(feaext.SRM_extract, image_path, ofile) # }}} # {{{ srmq1 elif sys.argv[1] == "srmq1": if len(sys.argv) != 4: print sys.argv[0], "srmq1 <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] feaext.extract_features(feaext.SRMQ1_extract, image_path, ofile) # }}} # {{{ scrmq1 elif sys.argv[1] == "scrmq1": if len(sys.argv) != 4: print sys.argv[0], "scrmq1 <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] feaext.extract_features(feaext.SCRMQ1_extract, image_path, ofile) # }}} # {{{ gfr elif sys.argv[1] == "gfr": if len(sys.argv) < 4: print sys.argv[ 0], "gfr <image/dir> <output-file> [quality] [rotations]\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] if len(sys.argv) < 5: quality = "auto" print "JPEG quality not provided, using detection via 'identify'" else: quality = sys.argv[4] if len(sys.argv) < 6: rotations = 32 print "Number of rotations for Gabor kernel no provided, using:", \ rotations else: rotations = sys.argv[6] params = {"quality": quality, "rotations": rotations} feaext.extract_features(feaext.GFR_extract, image_path, ofile, params) # }}} # {{{ hill-sigma-spam-psrm elif sys.argv[1] == "hill-sigma-spam-psrm": if len(sys.argv) != 4: print sys.argv[ 0], "hill-sigma-spam-psrm <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] feaext.extract_features(feaext.HILL_sigma_spam_PSRM_extract, image_path, ofile) # }}} # {{{ hill-maxsrm elif sys.argv[1] == "hill-maxsrm": if len(sys.argv) != 4: print sys.argv[0], "hill-maxsrm <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] feaext.extract_features(feaext.HILL_MAXSRM_extract, image_path, ofile) # }}} # -- EMBEDDING SIMULATORS -- # {{{ lsbr-sim elif sys.argv[1] == "lsbr-sim": if len(sys.argv) != 5: print sys.argv[0], "lsbr-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.lsbr, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ lsbm-sim elif sys.argv[1] == "lsbm-sim": if len(sys.argv) != 5: print sys.argv[0], "lsbm-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.lsbm, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ hugo-sim elif sys.argv[1] == "hugo-sim": if len(sys.argv) != 5: print sys.argv[0], "hugo-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.hugo, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ wow-sim elif sys.argv[1] == "wow-sim": if len(sys.argv) != 5: print sys.argv[0], "wow-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.wow, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ s-uniward-sim elif sys.argv[1] == "s-uniward-sim": if len(sys.argv) != 5: print sys.argv[ 0], "s-uniward-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.s_uniward, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ hill-sim elif sys.argv[1] == "hill-sim": if len(sys.argv) != 5: print sys.argv[0], "hill-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.hill, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ j-uniward-sim elif sys.argv[1] == "j-uniward-sim": if len(sys.argv) != 5: print sys.argv[ 0], "j-uniward-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.j_uniward, sys.argv[2], sys.argv[3], sys.argv[4], embed_fn_saving=True) # }}} # {{{ ebs-sim elif sys.argv[1] == "ebs-sim": if len(sys.argv) != 5: print sys.argv[0], "ebs-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.ebs, sys.argv[2], sys.argv[3], sys.argv[4], embed_fn_saving=True) # }}} # {{{ ued-sim elif sys.argv[1] == "ued-sim": if len(sys.argv) != 5: print sys.argv[0], "ued-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.ued, sys.argv[2], sys.argv[3], sys.argv[4], embed_fn_saving=True) # }}} # {{{ nsf5-sim elif sys.argv[1] == "nsf5-sim": if len(sys.argv) != 5: print sys.argv[0], "nsf5-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.nsf5, sys.argv[2], sys.argv[3], sys.argv[4], embed_fn_saving=True) # }}} # {{{ experimental-sim elif sys.argv[1] == "experimental-sim": if len(sys.argv) != 5: print sys.argv[ 0], "experimental-sim <image/dir> <payload> <output-dir>" print "NOTE: Please, put your EXPERIMENTAL.m file into external/octave\n" sys.exit(0) embed_message(stegosim.experimental, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # -- MODEL TRAINING -- # {{{ esvm elif sys.argv[1] == "esvm": if len(sys.argv) != 5: print sys.argv[0], "esvm <cover-fea> <stego-fea> <model-file>\n" sys.exit(0) from sklearn.model_selection import train_test_split cover_fea = sys.argv[2] stego_fea = sys.argv[3] model_file = utils.absolute_path(sys.argv[4]) X_cover = pandas.read_csv(cover_fea, delimiter=" ").values X_stego = pandas.read_csv(stego_fea, delimiter=" ").values #X_cover=numpy.loadtxt(cover_fea) #X_stego=numpy.loadtxt(stego_fea) X = numpy.vstack((X_cover, X_stego)) y = numpy.hstack(([0] * len(X_cover), [1] * len(X_stego))) X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.10) clf = models.EnsembleSVM() clf.fit(X_train, y_train) val_score = clf.score(X_val, y_val) pickle.dump(clf, open(model_file, "wb")) print "Validation score:", val_score # }}} # {{{ e4s elif sys.argv[1] == "e4s": if len(sys.argv) != 5: print sys.argv[0], "e4s <cover-fea> <stego-fea> <model-file>\n" sys.exit(0) from sklearn.model_selection import train_test_split cover_fea = sys.argv[2] stego_fea = sys.argv[3] model_file = utils.absolute_path(sys.argv[4]) X_cover = pandas.read_csv(cover_fea, delimiter=" ").values X_stego = pandas.read_csv(stego_fea, delimiter=" ").values #X_cover=numpy.loadtxt(cover_fea) #X_stego=numpy.loadtxt(stego_fea) X = numpy.vstack((X_cover, X_stego)) y = numpy.hstack(([0] * len(X_cover), [1] * len(X_stego))) X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.10) clf = models.Ensemble4Stego() clf.fit(X_train, y_train) val_score = clf.score(X_val, y_val) clf.save(model_file) print "Validation score:", val_score # }}} # {{{ xu-net elif sys.argv[1] == "xu-net": if len(sys.argv) != 5: print sys.argv[0], "xu-net <cover-dir> <stego-dir> <model-name>\n" sys.exit(0) print "WARNING! xu-net module is not finished yet!" cover_dir = sys.argv[2] stego_dir = sys.argv[3] model_name = sys.argv[4] net = models.XuNet() net.train(cover_dir, stego_dir, val_size=0.10, name=model_name) #print "Validation score:", val_score # }}} # -- AUTOMATED ATTACKS -- # {{{ ats elif sys.argv[1] == "ats": if len(sys.argv) != 6: print sys.argv[ 0], "ats <embed-sim> <payload> <fea-extract> <images>\n" print embsim_doc print "" print feaextract_doc print "" sys.exit(0) emb_sim = sys.argv[2] payload = sys.argv[3] feaextract = sys.argv[4] A_dir = sys.argv[5] fn_sim = stegosim.embedding_fn(emb_sim) fn_feaextract = feaext.extractor_fn(feaextract) import tempfile B_dir = tempfile.mkdtemp() C_dir = tempfile.mkdtemp() embed_message(fn_sim, A_dir, payload, B_dir) embed_message(fn_sim, B_dir, payload, C_dir) fea_dir = tempfile.mkdtemp() A_fea = os.path.join(fea_dir, "A.fea") C_fea = os.path.join(fea_dir, "C.fea") feaext.extract_features(fn_feaextract, A_dir, A_fea) feaext.extract_features(fn_feaextract, C_dir, C_fea) A = pandas.read_csv(A_fea, delimiter=" ").values C = pandas.read_csv(C_fea, delimiter=" ").values X = numpy.vstack((A, C)) y = numpy.hstack(([0] * len(A), [1] * len(C))) clf = models.Ensemble4Stego() clf.fit(X, y) files = [] for dirpath, _, filenames in os.walk(B_dir): for f in filenames: path = os.path.abspath(os.path.join(dirpath, f)) if not utils.is_valid_image(path): print "Warning, this is not a valid image: ", f else: files.append(path) for f in files: B = fn_feaextract(f) B = B.reshape((1, B.shape[0])) p = clf.predict(B) if p[0] == 0: print os.path.basename(f), "Cover" else: print os.path.basename(f), "Stego" shutil.rmtree(B_dir) shutil.rmtree(C_dir) shutil.rmtree(fea_dir) # }}} else: print "Wrong command!" if sys.argv[1] == "train-models": train_models()
def main(): if len(sys.argv) < 2: print sys.argv[0], "<command>\n" print "COMMANDS:" print "" print " Attacks to LSB replacement:" print " - spa: Sample Pairs Analysis." print " - rs: RS attack." print "" print " ML-based detectors:" print " - esvm-predict: Predict using eSVM." print " - e4s-predict: Predict using EC." print "" print " Feature extractors:" print " - srm: Full Spatial Rich Models." print " - srmq1: Spatial Rich Models with fixed quantization q=1c." print "" print " Embedding simulators:" print " - lsbr-sim: Embedding using LSB replacement simulator." print " - lsbm-sim: Embedding using LSB matching simulator." print " - hugo-sim: Embedding using HUGO simulator." print " - wow-sim: Embedding using WOW simulator." print " - s-uniward-sim: Embedding using S-UNIWARD simulator." print " - hill-sim: Embedding using HILL simulator." print "" print " Model training:" print " - esvm: Ensemble of Support Vector Machines." print " - e4s: Ensemble Classifiers for Steganalysis." print " - xu-net: Convolutional Neural Network for Steganalysis." print "" print "\n" sys.exit(0) if False: pass # -- ATTACKS -- # {{{ spa elif sys.argv[1] == "spa": if len(sys.argv) != 3: print sys.argv[0], "spa <image>\n" sys.exit(0) if not utils.is_valid_image(sys.argv[2]): print "Please, provide a valid image" sys.exit(0) threshold = 0.05 bitrate_R = attacks.spa(sys.argv[2], 0) bitrate_G = attacks.spa(sys.argv[2], 1) bitrate_B = attacks.spa(sys.argv[2], 2) if bitrate_R < threshold and bitrate_G < threshold and bitrate_B < threshold: print "No hiden data found" sys.exit(0) if bitrate_R >= threshold: print "Hiden data found in channel R", bitrate_R if bitrate_G >= threshold: print "Hiden data found in channel G", bitrate_G if bitrate_B >= threshold: print "Hiden data found in channel B", bitrate_B sys.exit(0) # }}} # {{{ rs elif sys.argv[1] == "rs": if len(sys.argv) != 3: print sys.argv[0], "spa <image>\n" sys.exit(0) if not utils.is_valid_image(sys.argv[2]): print "Please, provide a valid image" sys.exit(0) threshold = 0.05 bitrate_R = attacks.rs(sys.argv[2], 0) bitrate_G = attacks.rs(sys.argv[2], 1) bitrate_B = attacks.rs(sys.argv[2], 2) if bitrate_R < threshold and bitrate_G < threshold and bitrate_B < threshold: print "No hiden data found" sys.exit(0) if bitrate_R >= threshold: print "Hiden data found in channel R", bitrate_R if bitrate_G >= threshold: print "Hiden data found in channel G", bitrate_G if bitrate_B >= threshold: print "Hiden data found in channel B", bitrate_B sys.exit(0) # }}} # -- ML-BASED DETECTORS -- # {{{ esvm elif sys.argv[1] == "esvm-predict": if len(sys.argv) != 5: print sys.argv[ 0], "esvm-predict <model-file> <feature-extractor> <image/dir>\n" print "Feature extractors:" print " - srm: Full Spatial Rich Models." print " - srmq1: Spatial Rich Models with fixed quantization q=1c." print "" sys.exit(0) model_file = sys.argv[2] extractor = sys.argv[3] path = utils.absolute_path(sys.argv[4]) files = [] if os.path.isdir(path): for dirpath, _, filenames in os.walk(path): for f in filenames: path = os.path.abspath(os.path.join(dirpath, f)) if not utils.is_valid_image(path): print "Warning, please provide a valid image: ", f else: files.append(path) else: files = [path] clf = pickle.load(open(model_file, "r")) for f in files: if extractor == "srm": X = richmodels.SRM_extract(f) if extractor == "srmq1": X = richmodels.SRMQ1_extract(f) X = X.reshape((1, X.shape[0])) p = clf.predict_proba(X) print p if p[0][0] > 0.5: print os.path.basename(f), "Cover, probability:", p[0][0] else: print os.path.basename(f), "Stego, probability:", p[0][1] # }}} # {{{ e4s elif sys.argv[1] == "e4s-predict": if len(sys.argv) != 5: print sys.argv[ 0], "e4s-predict <model-file> <feature-extractor> <image/dir>\n" print "Feature extractors:" print " - srm: Full Spatial Rich Models." print " - srmq1: Spatial Rich Models with fixed quantization q=1c." print "" sys.exit(0) model_file = sys.argv[2] extractor = sys.argv[3] path = utils.absolute_path(sys.argv[4]) files = [] if os.path.isdir(path): for dirpath, _, filenames in os.walk(path): for f in filenames: path = os.path.abspath(os.path.join(dirpath, f)) if not utils.is_valid_image(path): print "Warning, please provide a valid image: ", f else: files.append(path) else: files = [path] clf = models.Ensemble4Stego() clf.load(model_file) for f in files: if extractor == "srm": X = richmodels.SRM_extract(f) if extractor == "srmq1": X = richmodels.SRMQ1_extract(f) X = X.reshape((1, X.shape[0])) p = clf.predict_proba(X) print p if p[0][0] > 0.5: print os.path.basename(f), "Cover, probability:", p[0][0] else: print os.path.basename(f), "Stego, probability:", p[0][1] # }}} # -- FEATURE EXTRACTORS -- # {{{ srm elif sys.argv[1] == "srm": if len(sys.argv) != 4: print sys.argv[0], "srm <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] extract_features(richmodels.SRM_extract, image_path, ofile) # }}} # {{{ srmq1 elif sys.argv[1] == "srmq1": if len(sys.argv) != 4: print sys.argv[0], "srm <image/dir> <output-file>\n" sys.exit(0) image_path = sys.argv[2] ofile = sys.argv[3] extract_features(richmodels.SRMQ1_extract, image_path, ofile) # }}} # -- EMBEDDING SIMULATORS -- # {{{ lsbr-sim elif sys.argv[1] == "lsbr-sim": if len(sys.argv) != 5: print sys.argv[0], "lsbr-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.lsbr, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ lsbm-sim elif sys.argv[1] == "lsbm-sim": if len(sys.argv) != 5: print sys.argv[0], "lsbm-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.lsbm, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ hugo-sim elif sys.argv[1] == "hugo-sim": if len(sys.argv) != 5: print sys.argv[0], "hugo-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.hugo, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ wow-sim elif sys.argv[1] == "wow-sim": if len(sys.argv) != 5: print sys.argv[0], "wow-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.wow, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ s-uniward-sim elif sys.argv[1] == "s-uniward-sim": if len(sys.argv) != 5: print sys.argv[ 0], "s-uniward-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.s_uniward, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # {{{ hill-sim elif sys.argv[1] == "hill-sim": if len(sys.argv) != 5: print sys.argv[ 0], "s-uniward-sim <image/dir> <payload> <output-dir>\n" sys.exit(0) embed_message(stegosim.hill, sys.argv[2], sys.argv[3], sys.argv[4]) # }}} # -- MODEL TRAINING -- # {{{ esvm elif sys.argv[1] == "esvm": if len(sys.argv) != 5: print sys.argv[0], "esvm <cover-fea> <stego-fea> <model-file>\n" sys.exit(0) from sklearn.model_selection import train_test_split cover_fea = sys.argv[2] stego_fea = sys.argv[3] model_file = sys.argv[4] X_cover = pandas.read_csv(cover_fea, delimiter=" ").values X_stego = pandas.read_csv(stego_fea, delimiter=" ").values #X_cover=numpy.loadtxt(cover_fea) #X_stego=numpy.loadtxt(stego_fea) X = numpy.vstack((X_cover, X_stego)) y = numpy.hstack(([0] * len(X_cover), [1] * len(X_stego))) X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.10) clf = models.EnsembleSVM() clf.fit(X_train, y_train) val_score = clf.score(X_val, y_val) pickle.dump(clf, open(model_file, "wb")) print "Validation score:", val_score # }}} # {{{ e4s elif sys.argv[1] == "e4s": if len(sys.argv) != 5: print sys.argv[0], "e4s <cover-fea> <stego-fea> <model-file>\n" sys.exit(0) from sklearn.model_selection import train_test_split cover_fea = sys.argv[2] stego_fea = sys.argv[3] model_file = sys.argv[4] X_cover = pandas.read_csv(cover_fea, delimiter=" ").values X_stego = pandas.read_csv(stego_fea, delimiter=" ").values #X_cover=numpy.loadtxt(cover_fea) #X_stego=numpy.loadtxt(stego_fea) X = numpy.vstack((X_cover, X_stego)) y = numpy.hstack(([0] * len(X_cover), [1] * len(X_stego))) X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.10) clf = models.Ensemble4Stego() clf.fit(X_train, y_train) val_score = clf.score(X_val, y_val) clf.save(model_file) print "Validation score:", val_score # }}} # {{{ xu-net elif sys.argv[1] == "xu-net": if len(sys.argv) != 5: print sys.argv[0], "xu-net <cover-dir> <stego-dir> <model-name>\n" sys.exit(0) cover_dir = sys.argv[2] stego_dir = sys.argv[3] model_name = sys.argv[4] net = models.XuNet() net.train(cover_dir, stego_dir, val_size=0.10, name=model_name) #print "Validation score:", val_score # }}} else: print "Wrong command!" if sys.argv[1] == "train-models": train_models()