Commit 259ca19d020544331bf4097c9678a9721746d108

Authored by Chunk
1 parent d0be60e7
Exists in develop

ohno! heterogeneity of components is a disaster.

mjpeg/__init__.py
@@ -257,9 +257,12 @@ class Jpeg(Jsteg): @@ -257,9 +257,12 @@ class Jpeg(Jsteg):
257 colour channel (as a 4-D tensor: (v,h,row,col)). 257 colour channel (as a 4-D tensor: (v,h,row,col)).
258 """ 258 """
259 if channel == "All": 259 if channel == "All":
260 - return np.array([  
261 - [np.hsplit(arr, arr.shape[1] / 8) for arr in np.vsplit(compMat, compMat.shape[0] / 8)] for compMat in  
262 - self.coef_arrays]) 260 + # return [
  261 + # [np.hsplit(arr, arr.shape[1] / 8) for arr in np.vsplit(compMat, compMat.shape[0] / 8)] for compMat in
  262 + # self.coef_arrays]
  263 + return [
  264 + np.array([np.hsplit(arr, arr.shape[1] / 8) for compMat in
  265 + self.coef_arrays for arr in np.vsplit(compMat, compMat.shape[0] / 8)])]
263 266
264 compMat = self.getCoefMatrix(channel) 267 compMat = self.getCoefMatrix(channel)
265 return np.array([np.hsplit(arr, arr.shape[1] / 8) for arr in np.vsplit(compMat, compMat.shape[0] / 8)]) 268 return np.array([np.hsplit(arr, arr.shape[1] / 8) for arr in np.vsplit(compMat, compMat.shape[0] / 8)])
@@ -295,11 +298,19 @@ class Jpeg(Jsteg): @@ -295,11 +298,19 @@ class Jpeg(Jsteg):
295 return self.image_width, self.image_height 298 return self.image_width, self.image_height
296 299
297 def getCapacity(self, channel="All"): 300 def getCapacity(self, channel="All"):
298 - blocks = self.getCoefBlocks(channel)  
299 - print blocks.shape  
300 - return (np.sum(blocks[0] != 0) - np.size(blocks[0]) / 64) + (np.sum(blocks[1] != 0) - np.size(  
301 - blocks[1]) / 64) / 4 + (np.sum(blocks[2] != 0) - np.size(blocks[2]) / 64) / 4  
302 - # return np.sum(np.array(self.coef_arrays)!=0) - np.size(self.coef_arrays) / 64 301 + # blocks = self.getCoefBlocks(channel)
  302 + # print blocks.shape
  303 + # return (np.sum(blocks[0] != 0) - np.size(blocks[0]) / 64) + (np.sum(blocks[1] != 0) - np.size(
  304 + # blocks[1]) / 64) / 4 + (np.sum(blocks[2] != 0) - np.size(blocks[2]) / 64) / 4
  305 + capacity = 0
  306 + if channel == 'All':
  307 + for blocks in self.getCoefBlocks(channel):
  308 + print blocks
  309 + capacity += (np.sum(np.array(blocks) != 0) - np.size(blocks) / 64)
  310 + else:
  311 + blocks = self.getCoefBlocks(channel)
  312 + capacity += (np.sum(np.array(blocks) != 0) - np.size(blocks) / 64)
  313 + return capacity
303 314
304 315
305 def getQuality(self): 316 def getQuality(self):
@@ -359,28 +370,6 @@ class Jpeg(Jsteg): @@ -359,28 +370,6 @@ class Jpeg(Jsteg):
359 # assert max( abs(S).flatten() ) <=128, "Image colours out of range" 370 # assert max( abs(S).flatten() ) <=128, "Image colours out of range"
360 return (S + 128 ).astype(np.uint8) 371 return (S + 128 ).astype(np.uint8)
361 372
362 - # Complete, general decompression is not yet implemented::  
363 -  
364 - def getimage(self):  
365 - """  
366 - Decompress the image and a PIL Image object.  
367 - """  
368 -  
369 - # Probably better to use a numpy image/array.  
370 -  
371 - raise NotImplementedError, "Decompression is not yet implemented"  
372 -  
373 - # We miss the routines for upsampling and adjusting the size  
374 -  
375 - L = len(self.coef_arrays)  
376 - im = []  
377 - for i in range(L):  
378 - C = self.coef_arrays[i]  
379 - if C != None:  
380 - Q = self.quant_tables[self.comp_info[i]["quant_tbl_no"]]  
381 - im.append(ibdct(dequantise(C, Q)))  
382 - return Image.fromarray(im)  
383 -  
384 373
385 # Calibration 374 # Calibration
386 # ----------- 375 # -----------
msteg/__init__.py
@@ -2,8 +2,9 @@ __author__ = &#39;chunk&#39; @@ -2,8 +2,9 @@ __author__ = &#39;chunk&#39;
2 2
3 import numpy as np 3 import numpy as np
4 4
5 -from ..mjpeg import Jpeg  
6 from ..common import * 5 from ..common import *
  6 +from ..mjpeg import Jpeg
  7 +
7 8
8 __all__ = ['StegBase', 'sample_key'] 9 __all__ = ['StegBase', 'sample_key']
9 10
@@ -33,7 +34,7 @@ class StegBase(object): @@ -33,7 +34,7 @@ class StegBase(object):
33 """ 34 """
34 self.cov_jpeg = Jpeg(img_path) 35 self.cov_jpeg = Jpeg(img_path)
35 self.key = self.cov_jpeg.getkey() 36 self.key = self.cov_jpeg.getkey()
36 - self.cov_data = self.cov_jpeg.getCoefBlocks() 37 + self.cov_data = self.cov_jpeg.getCoefBlocks('All')
37 return self.cov_data 38 return self.cov_data
38 39
39 40
@@ -49,7 +50,7 @@ class StegBase(object): @@ -49,7 +50,7 @@ class StegBase(object):
49 self.hid_data = np.array(raw, dtype=np.uint8) 50 self.hid_data = np.array(raw, dtype=np.uint8)
50 51
51 if np.size(self.hid_data) * 8 > np.size(self.cov_data): 52 if np.size(self.hid_data) * 8 > np.size(self.cov_data):
52 - raise Exception("Cover image is too small to embed data.Cannot fit %d bits in %d DCT coefficients" % ( 53 + print("[WARN] Cover image is too small to embed data.Cannot fit %d bits in %d DCT coefficients" % (
53 np.size(self.hid_data) * 8, np.size(self.cov_data))) 54 np.size(self.hid_data) * 8, np.size(self.cov_data)))
54 return self.hid_data 55 return self.hid_data
55 56
res/166500/221379062154e32d0efa5cce32f1b.jpg 0 โ†’ 100644

130 KB

res/166500/55df71faed43b37a8ac242120a72d.jpg 0 โ†’ 100644

119 KB

res/166500/988d826212a6eed023ab99284971d.jpg 0 โ†’ 100644

89.9 KB

res/166500/cecdb4b3fef5433faa3d24259e3e4.jpg 0 โ†’ 100644

172 KB

res/166500/e0255871e984f61ee8dc1800b9184.jpg 0 โ†’ 100644

111 KB

res/166500/tmp000.jpg 0 โ†’ 100644

62.9 KB

res/embeded 0 โ†’ 100644
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +this is to be embeded.
  2 +//0216
  3 +vim of clang - https://github.com/JBakamovic/yavide
  4 +# Usage overview
  5 +Category | Shortcut | Description
  6 +--------------------------------- | --------------------------------- | ---------------------------------
  7 +**Project management** | |
  8 + | `<Ctrl-s>n` | Create new project
  9 + | `<Ctrl-s>i` | Import project with already existing code base
  10 + | `<Ctrl-s>o` | Open project
  11 + | `<Ctrl-s>c` | Close project
  12 + | `<Ctrl-s>s` | Save project
  13 + | `<Ctrl-s>d` | Delete project
  14 +**Buffer management** | |
  15 + | `<Ctrl-c>` | Close current buffer
  16 + | `<Ctrl-s>` | Save current buffer
  17 + | `<Ctrl-Tab>` | Go to next buffer
  18 + | `<Ctrl-Shift-Tab>` | Go to previous buffer
  19 + | `<Ctrl-Down>` | Scroll buffer by one line (down)
  20 + | `<Ctrl-Up>` | Scroll buffer by one line (up)
  21 +**Buffer modes** | |
  22 + | `<ESC>` | Enter the `normal` mode
  23 + | `<a>` | Enter the `insert` mode (append after cursor)
  24 + | `<i>` | Enter the `insert` mode (insert before cursor)
  25 + | `<Shift-v>` | Enter the `visual` mode (line mode)
  26 + | `<v>` | Enter the `visual` mode (character mode)
  27 +**Buffer editing** | |
  28 + | `<Ctrl-a>` | Select all
  29 + | `<Ctrl-x>` | Cut
  30 + | `<Ctrl-c>` | Copy
  31 + | `<Ctrl-v>` | Paste
  32 + | `<Ctrl-z>` | Undo
  33 + | `<Ctrl-r>` | Redo
  34 + | `<Shift-s>` | Delete the whole line
test/test_jpeg.py
1 __author__ = 'chunk' 1 __author__ = 'chunk'
2 2
3 import numpy as np 3 import numpy as np
4 -import mjpeg  
5 -from mjpeg import base 4 +from .. import mjpeg
  5 +from ..mjpeg import base
6 6
7 -from common import * 7 +from ..common import *
8 8
9 timer = Timer() 9 timer = Timer()
10 10
@@ -20,6 +20,8 @@ sample = [[7, 12, 14, -12, 1, 0, -1, 0], @@ -20,6 +20,8 @@ sample = [[7, 12, 14, -12, 1, 0, -1, 0],
20 sample_key = [46812L, 20559L, 31360L, 16681L, 27536L, 39553L, 5427L, 63029L, 56572L, 36476L, 25695L, 61908L, 63014L, 20 sample_key = [46812L, 20559L, 31360L, 16681L, 27536L, 39553L, 5427L, 63029L, 56572L, 36476L, 25695L, 61908L, 63014L,
21 5908L, 59816L, 56765L] 21 5908L, 59816L, 56765L]
22 22
  23 +package_dir = os.path.dirname(os.path.abspath(__file__))
  24 +
23 25
24 def test_setblocks(): 26 def test_setblocks():
25 """ 27 """
@@ -148,6 +150,13 @@ def test_iter(): @@ -148,6 +150,13 @@ def test_iter():
148 print cnt 150 print cnt
149 151
150 152
  153 +def test_jpeg():
  154 + ima = mjpeg.Jpeg(os.path.join(package_dir, "../res/test3.jpg"), key=sample_key)
  155 + print ima.getQuality()
  156 + print ima.getCapacity()
  157 + sys.exit(0)
  158 +
  159 +
151 if __name__ == '__main__': 160 if __name__ == '__main__':
152 # timer.mark() 161 # timer.mark()
153 # test_setblock() 162 # test_setblock()
@@ -167,7 +176,7 @@ if __name__ == &#39;__main__&#39;: @@ -167,7 +176,7 @@ if __name__ == &#39;__main__&#39;:
167 176
168 # test_bitbyte() 177 # test_bitbyte()
169 178
170 - ima = mjpeg.Jpeg("res/166500/cecdb4b3fef5433faa3d24259e3e4.jpg", key=sample_key) 179 + ima = mjpeg.Jpeg(os.path.join(package_dir, "../res/166500/cecdb4b3fef5433faa3d24259e3e4.jpg"), key=sample_key)
171 print ima.getQuality() 180 print ima.getQuality()
172 print ima.getCapacity() 181 print ima.getCapacity()
173 sys.exit(0) 182 sys.exit(0)
test/test_steg.py
@@ -4,10 +4,11 @@ import numpy as np @@ -4,10 +4,11 @@ import numpy as np
4 import pylab as P 4 import pylab as P
5 import pylab as plt 5 import pylab as plt
6 6
7 -import mjpeg  
8 -from msteg.steganography import LSB, F3, F4, F5  
9 -from common import * 7 +from .. import mjpeg
  8 +from ..msteg.steganography import LSB, F3, F4, F5
  9 +from ..common import *
10 10
  11 +package_dir = os.path.dirname(os.path.abspath(__file__))
11 12
12 timer = Timer() 13 timer = Timer()
13 14
@@ -25,16 +26,24 @@ sample_key = [46812L, 20559L, 31360L, 16681L, 27536L, 39553L, 5427L, 63029L, 565 @@ -25,16 +26,24 @@ sample_key = [46812L, 20559L, 31360L, 16681L, 27536L, 39553L, 5427L, 63029L, 565
25 26
26 txtsample = [116, 104, 105, 115, 32, 105, 115, 32, 116, 111, 32, 98, 101, 32, 101, 109, 98, 101, 100, 101, 100, 46, 10] 27 txtsample = [116, 104, 105, 115, 32, 105, 115, 32, 116, 111, 32, 98, 101, 32, 101, 109, 98, 101, 100, 101, 100, 46, 10]
27 28
  29 +
  30 +def test_F3():
  31 + f3test = F3.F3()
  32 + f3test.embed_raw_data(os.path.join(package_dir, "../res/test3.jpg"), os.path.join(package_dir, "../res/embeded"),
  33 + os.path.join(package_dir, "../res/steged.jpg"))
  34 + f3test.extract_raw_data(os.path.join(package_dir, "../res/steged.jpg"),
  35 + os.path.join(package_dir, "../res/extracted.jpg"))
  36 +
  37 +
28 if __name__ == '__main__': 38 if __name__ == '__main__':
29 - # f3test = F3.F3()  
30 - # f3test = F4.F4(sample_key)  
31 - f3test = F5.F5(sample_key, 1)  
32 - # f3test.embed_raw_data("res/test3.jpg", "res/embeded", "res/steged.jpg")  
33 - f3test.embed_raw_data("res/thulib2.jpg", "res/lena64gray.jpg", "res/steged.jpg")  
34 -  
35 - # f3test2 = F4.F4(sample_key)  
36 - f3test.extract_raw_data("res/steged.jpg", "res/extracted.jpg")  
37 - print f3test.get_key() 39 + # # f3test = F4.F4(sample_key)
  40 + # f3test = F5.F5(sample_key, 1)
  41 + # # f3test.embed_raw_data("res/test3.jpg", "res/embeded", "res/steged.jpg")
  42 + # f3test.embed_raw_data("res/thulib2.jpg", "res/lena64gray.jpg", "res/steged.jpg")
  43 + #
  44 + # # f3test2 = F4.F4(sample_key)
  45 + # f3test.extract_raw_data("res/steged.jpg", "res/extracted.jpg")
  46 + # print f3test.get_key()
38 47
39 # f5test = F5.F5(sample_key, 1) 48 # f5test = F5.F5(sample_key, 1)
40 49