fantos commited on
Commit
794bf31
ยท
verified ยท
1 Parent(s): 1c8c36e

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +24 -9
utils.py CHANGED
@@ -63,9 +63,9 @@ class WatermarkProcessor:
63
  return im_name, f"Error adding watermark: {str(e)}"
64
 
65
  def encode(self, image_path, watermark_text, metadata=None):
66
- """Encode watermark using simple LSB steganography with header
67
 
68
- ํ—ค๋”(32๋น„ํŠธ)๋Š” watermark ๋ฐ์ดํ„ฐ(UTF-8 ๋ฌธ์ž์—ด)์˜ ๊ธธ์ด(๋ฌธ์ž์ˆ˜)๋ฅผ ์ด์ง„ ๋ฌธ์ž์—ด๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
69
  """
70
  try:
71
  image = cv2.imread(image_path)
@@ -121,9 +121,9 @@ class WatermarkProcessor:
121
  return image_path, f"Error in encoding: {str(e)}"
122
 
123
  def decode(self, image_path):
124
- """Decode watermark using simple LSB steganography with header
125
 
126
- ๋จผ์ € 32๋น„ํŠธ๋ฅผ ์ฝ์–ด watermark ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด(๋ฌธ์ž์ˆ˜)๋ฅผ ๊ตฌํ•œ ํ›„, ํ•ด๋‹น ๊ธธ์ด๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
127
  """
128
  try:
129
  # PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋จผ์ € ํ™•์ธ
@@ -138,18 +138,33 @@ class WatermarkProcessor:
138
  if image is None:
139
  raise ValueError("Could not read image file")
140
 
141
- # ๋ชจ๋“  ํ”ฝ์…€์˜ LSB๋ฅผ ์ฝ์–ด ์ด์ง„ ๋ฌธ์ž์—ด ์ƒ์„ฑ
142
- binary_data = ''
 
 
143
  for i in range(image.shape[0]):
144
  for j in range(image.shape[1]):
145
  for k in range(3):
146
- binary_data += str(image[i, j, k] & 1)
 
 
 
 
 
 
 
 
 
 
 
 
147
 
148
- # ๋จผ์ € ํ—ค๋”(32๋น„ํŠธ)๋ฅผ ์ฝ์–ด ๋ฐ์ดํ„ฐ ๊ธธ์ด(๋ฌธ์ž์ˆ˜)๋ฅผ ๊ฒฐ์ •
 
 
149
  header = binary_data[:32]
150
  data_length = int(header, 2)
151
  total_bits = data_length * 8
152
- # ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ
153
  message_bits = binary_data[32:32 + total_bits]
154
  text = ''
155
  for i in range(0, len(message_bits), 8):
 
63
  return im_name, f"Error adding watermark: {str(e)}"
64
 
65
  def encode(self, image_path, watermark_text, metadata=None):
66
+ """Encode watermark using simple LSB steganography with header.
67
 
68
+ ํ—ค๋”(32๋น„ํŠธ)๋Š” watermark ๋ฐ์ดํ„ฐ(JSON ๋ฌธ์ž์—ด)์˜ ๊ธธ์ด(๋ฌธ์ž์ˆ˜)๋ฅผ ์ด์ง„ ๋ฌธ์ž์—ด๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
69
  """
70
  try:
71
  image = cv2.imread(image_path)
 
121
  return image_path, f"Error in encoding: {str(e)}"
122
 
123
  def decode(self, image_path):
124
+ """Decode watermark using simple LSB steganography with header.
125
 
126
+ ๋จผ์ € 32๋น„ํŠธ(ํ—ค๋”)๋งŒํผ ์ฝ์–ด ๋ฐ์ดํ„ฐ ๊ธธ์ด(๋ฌธ์ž์ˆ˜)๋ฅผ ๊ตฌํ•œ ํ›„, ๊ทธ ๊ธธ์ด์— ํ•ด๋‹นํ•˜๋Š” ๋ณธ๋ฌธ ๋น„ํŠธ๋งŒ ์ฝ์–ด ๋ฌธ์ž์—ด๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.
127
  """
128
  try:
129
  # PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋จผ์ € ํ™•์ธ
 
138
  if image is None:
139
  raise ValueError("Could not read image file")
140
 
141
+ bits = []
142
+ total_needed = None
143
+ count = 0
144
+ # ํ”ฝ์…€ ์ˆœํšŒ: ํ•„์š”ํ•œ ๋น„ํŠธ ์ˆ˜๋งŒํผ ์ฝ์–ด์˜ค๊ธฐ
145
  for i in range(image.shape[0]):
146
  for j in range(image.shape[1]):
147
  for k in range(3):
148
+ bits.append(str(image[i, j, k] & 1))
149
+ count += 1
150
+ # ํ—ค๋” 32๋น„ํŠธ๋ฅผ ๋ชจ๋‘ ์ฝ์€ ๊ฒฝ์šฐ
151
+ if count == 32 and total_needed is None:
152
+ header = ''.join(bits[:32])
153
+ data_length = int(header, 2)
154
+ total_needed = 32 + data_length * 8
155
+ if total_needed is not None and count >= total_needed:
156
+ break
157
+ if total_needed is not None and count >= total_needed:
158
+ break
159
+ if total_needed is not None and count >= total_needed:
160
+ break
161
 
162
+ if total_needed is None:
163
+ return "Error: Not enough data to read header"
164
+ binary_data = ''.join(bits[:total_needed])
165
  header = binary_data[:32]
166
  data_length = int(header, 2)
167
  total_bits = data_length * 8
 
168
  message_bits = binary_data[32:32 + total_bits]
169
  text = ''
170
  for i in range(0, len(message_bits), 8):