copyright-watermark 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,588 @@
1
+ Metadata-Version: 2.4
2
+ Name: copyright-watermark
3
+ Version: 1.0.2
4
+ Summary: Advanced production-ready copyright watermarking module with zero size increase and high robustness.
5
+ Author-email: Van Trong <trong.dev@example.com>
6
+ License: MIT
7
+ Keywords: watermark,steganography,copyright,qim
8
+ Requires-Python: >=3.8
9
+ Description-Content-Type: text/markdown
10
+ Requires-Dist: numpy>=1.20.0
11
+ Requires-Dist: opencv-python>=4.5.0
12
+ Requires-Dist: scipy>=1.6.0
13
+
14
+ # Advanced Copyright Watermark Module
15
+
16
+ Hệ thống watermark bản quyền nâng cao cho ảnh sử dụng kỹ thuật steganography tiên tiến với quantization-based embedding, Reed-Solomon error correction, và redundant embedding. Key bản quyền được nhúng vào ảnh và có thể trích xuất lại ngay cả khi ảnh bị chỉnh sửa, cắt, nén, hoặc biến đổi mạnh.
17
+
18
+ ## Hướng dẫn sử dụng nhanh với ảnh `test.jpg`
19
+
20
+ Được thiết kế để chạy trực tiếp tại thư mục gốc của dự án, hỗ trợ đầy đủ cả **Python** và **Node.js** với khả năng tương thích chéo 100% (nhúng bằng Python có thể quét bằng NodeJS và ngược lại).
21
+
22
+ ### Bước 1: Chuẩn bị ảnh
23
+ Đưa ảnh bạn muốn nhúng bản quyền vào thư mục gốc với tên `test.jpg`.
24
+ Nếu không có ảnh, hệ thống sẽ tự động tạo một ảnh mẫu Gradient chất lượng cao `test.jpg` cho bạn.
25
+
26
+ ### Bước 2: Nhúng & Kiểm tra bằng Python
27
+ Chạy script kiểm tra ở thư mục gốc:
28
+ ```bash
29
+ python3 embed_and_test.py
30
+ ```
31
+ Script sẽ:
32
+ - Nhúng thông tin bản quyền vào `test.jpg` và xuất ra file mới `test_watermarked.jpg`
33
+ - Đảm bảo chất lượng ảnh cực cao (PSNR > 60dB, mắt thường hoàn toàn không phát hiện hạt nhiễu hay biến đổi màu)
34
+ - Tự động kiểm tra giải mã/xác thực bản quyền trên ảnh đã nhúng.
35
+
36
+ ### Bước 3: Nhúng & Kiểm tra bằng Node.js
37
+ Chạy kiểm tra bằng Node.js:
38
+ ```bash
39
+ node test_node.js
40
+ ```
41
+ Script sẽ thực hiện các bước nhúng và kiểm tra tương tự như Python và đảm bảo tính tương thích chéo.
42
+
43
+ **Lưu ý quan trọng:**
44
+ - Ảnh gốc `test.jpg` của bạn KHÔNG bao giờ bị chỉnh sửa trực tiếp.
45
+ - Kỹ thuật LCG (Linear Congruential Generator) đã được đồng bộ hóa và mô phỏng chính xác dấu phẩy động 64-bit của JS trong Python, giúp hai thư viện đọc viết tương thích chéo hoàn toàn.
46
+
47
+ ### Cách Cài Đặt (Khi Xuất Bản Thư Viện)
48
+
49
+ #### 1. Cài đặt PIP (Python)
50
+ Để cài đặt và build package Python tại máy cục bộ:
51
+ ```bash
52
+ cd python_module
53
+ pip install .
54
+ ```
55
+
56
+ #### 2. Cài đặt NPM (Node.js)
57
+ Để cài đặt package Node.js tại máy cục bộ:
58
+ ```bash
59
+ cd nodejs_module
60
+ npm install
61
+ ```
62
+
63
+ ### Bước 3: Sử dụng trong code của bạn
64
+
65
+ #### Python API:
66
+ ```python
67
+ from copyright_watermark import embed_watermark, extract_watermark, verify_watermark
68
+
69
+ # Thông tin bản quyền cần nhúng
70
+ copyright_info = {
71
+ "name": "Nguyen Van A",
72
+ "email": "nguyenvana@example.com",
73
+ "date": "2026-06-27",
74
+ "website": "https://example.com",
75
+ "license": "All rights reserved"
76
+ }
77
+
78
+ # 1. Nhúng watermark (Không làm tăng kích thước file, giữ chất lượng ảnh PSNR > 60dB)
79
+ result = embed_watermark("input.jpg", copyright_info, "watermarked.jpg", password="my_secret_password")
80
+ print(f"Bản quyền đã được nhúng! Hash: {result['copyright_hash']}")
81
+
82
+ # 2. Xác thực bản quyền (Hoạt động tốt sau khi resize, nén, làm mờ, chỉnh tương phản)
83
+ verify_res = verify_watermark("watermarked.jpg", result['copyright_hash'], password="my_secret_password")
84
+ print(f"Xác thực bản quyền: {verify_res['verified']} (Độ tin cậy: {verify_res['confidence']})")
85
+ ```
86
+
87
+ #### Node.js API:
88
+ ```javascript
89
+ const { embedWatermark, verifyWatermark } = require('copyright-watermark');
90
+
91
+ const copyrightInfo = {
92
+ name: 'Nguyen Van A',
93
+ email: 'nguyenvana@example.com',
94
+ date: '2026-06-27'
95
+ };
96
+
97
+ async function run() {
98
+ // 1. Nhúng watermark
99
+ const result = await embedWatermark('input.jpg', copyrightInfo, 'watermarked.jpg', 'my_secret_password');
100
+ console.log(`Bản quyền đã được nhúng! Hash: ${result.copyrightHash}`);
101
+
102
+ // 2. Xác thực bản quyền
103
+ const verifyRes = await verifyWatermark('watermarked.jpg', result.copyrightHash, 'my_secret_password');
104
+ console.log(`Xác thực: ${verifyRes.verified}`);
105
+ }
106
+ run();
107
+ ```
108
+
109
+ ## Tính năng nâng cao
110
+
111
+ - **Nhúng key bản quyền**: Chèn thông tin bản quyền (tên, email, ngày, website, license...) vào ảnh
112
+ - **Trích xuất key bản quyền**: Lấy lại thông tin bản quyền từ ảnh đã được nhúng
113
+ - **Xác thực bản quyền**: Kiểm tra xem ảnh có chứa key bản quyền cụ thể hay không
114
+ - **Reed-Solomon Error Correction**: Khôi phục dữ liệu ngay cả khi một phần bị hỏng
115
+ - **Redundant Embedding**: Nhúng nhiều bản sao để tăng độ bền
116
+ - **Quantization-based Embedding**: Phương pháp nhúng chống chịu tốt hơn với các biến đổi
117
+ - **Zero File Size Increase**: Không làm tăng kích thước file ảnh
118
+ - **Minimal Quality Impact**: PSNR > 40dB với strength thấp
119
+
120
+ ## Khả năng chống chịu (Test Results)
121
+
122
+ ### Phiên bản Production (copyright_watermark_pro.py)
123
+
124
+ Module production đã được kiểm tra với các tấn công sau:
125
+
126
+ ### ✅ Chống chịu xuất sắc (Pass rate > 80%)
127
+ - **Làm mờ (Blur)**: 83% (Blur 3x3, 5x5, 7x7, 9x9 OK; 11x11, 15x15 fail)
128
+ - **Điều chỉnh độ tương phản (Contrast)**: 100% (0.5x - 2.5x tất cả đều OK!)
129
+ - **Cắt ảnh (Cropping)**: 100% (10%, 25%, 50%, 75% crop - tất cả đều phát hiện được)
130
+ - **Thay đổi kích thước (Resizing)**: 100% (25%, 50%, 75%, 150%, 200% - tất cả đều phát hiện được)
131
+ - **Nén JPEG (Compression)**: 83% (Quality 85-15 đều OK, quality 95 có vấn đề)
132
+ - **Xoay ảnh (Rotation)**: 100% (5°, 15°, 30°, 45°, 90° - tất cả đều phát hiện được)
133
+ - **Tấn công kết hợp**: 100% (Resize + Brightness + Compression)
134
+
135
+ ### ⚠️ Chống chịu tốt (Pass rate 40-60%)
136
+ - **Điều chỉnh độ sáng (Brightness)**: 50% (-100, -50, 0, +50 OK; -25, +25, +75, +100 fail)
137
+
138
+ ### ⚠️ Chống chịu trung bình (Pass rate 20-40%)
139
+ - **Thêm nhiễu (Noise)**: 12.5% (Noise 5 OK; noise 10+ fail)
140
+
141
+ ### Chất lượng ảnh
142
+ - **Strength 0.3**: PSNR = 42.19 dB (Good)
143
+ - **Strength 0.5**: PSNR = 38.37 dB (Fair)
144
+ - **Strength 0.7**: PSNR = 36.23 dB (Fair)
145
+ - **File size**: Tăng chỉ ~1.11% (không đáng kể)
146
+
147
+ ### Phiên bản Standard (copyright_watermark.py)
148
+
149
+ Module standard có kết quả tương tự nhưng không có adaptive quantization:
150
+
151
+ ### ✅ Chống chịu tốt (Pass rate > 80%)
152
+ - **Cắt ảnh (Cropping)**: 100% (10%, 25%, 50%, 75% crop)
153
+ - **Thay đổi kích thước (Resizing)**: 100% (25%, 50%, 75%, 150%, 200%)
154
+ - **Nén JPEG (Compression)**: 83% (Quality 85-15)
155
+ - **Xoay ảnh (Rotation)**: 100% (5°, 15°, 30°, 45°, 90°)
156
+
157
+ ### ⚠️ Chống chịu trung bình (Pass rate 40-60%)
158
+ - **Làm mờ (Blur)**: 40%
159
+ - **Điều chỉnh độ sáng (Brightness)**: 33%
160
+ - **Điều chỉnh độ tương phản (Contrast)**: 40%
161
+
162
+ ### ❌ Chống chịu kém (Pass rate < 20%)
163
+ - **Thêm nhiễu (Noise)**: 0%
164
+
165
+ ## Cấu trúc dự án
166
+
167
+ ```
168
+ copyright_watermark/
169
+ ├── python_module/
170
+ │ ├── copyright_watermark.py # Module Python production (chính)
171
+ │ ├── copyright_watermark_standard.py # Module Python standard (cũ)
172
+ │ └── requirements.txt # Dependencies Python
173
+ ├── nodejs_module/
174
+ │ ├── copyrightWatermark.js # Module Node.js production (chính)
175
+ │ ├── copyrightWatermarkStandard.js # Module Node.js standard (cũ)
176
+ │ └── package.json # Dependencies Node.js
177
+ ├── examples/
178
+ │ ├── example_python.py # Ví dụ sử dụng Python
179
+ │ ├── example_nodejs.js # Ví dụ sử dụng Node.js
180
+ │ ├── test_robustness.py # Script test độ bền (standard)
181
+ │ ├── test_pro_robustness.py # Script test độ bền (production)
182
+ │ ├── test_nodejs_pro.js # Script test Node.js production
183
+ │ └── test_both_modules.py # Script test cả 2 module
184
+ └── README.md # Tài liệu này
185
+ ```
186
+
187
+ ## Cài đặt
188
+
189
+ ### Python
190
+
191
+ ```bash
192
+ cd python_module
193
+ pip install -r requirements.txt
194
+ ```
195
+
196
+ Hoặc sử dụng virtual environment:
197
+ ```bash
198
+ cd copyright_watermark
199
+ python3 -m venv venv
200
+ source venv/bin/activate # Linux/Mac
201
+ # hoặc venv\Scripts\activate # Windows
202
+ pip install -r python_module/requirements.txt
203
+ ```
204
+
205
+ ### Node.js
206
+
207
+ ```bash
208
+ cd nodejs_module
209
+ npm install
210
+ ```
211
+
212
+ ## Sử dụng
213
+
214
+ ### Python - Module Production (Module chính)
215
+
216
+ #### Sử dụng API đơn giản (Easy API)
217
+
218
+ ```python
219
+ from copyright_watermark import embed_watermark, extract_watermark, verify_watermark
220
+
221
+ # Thông tin bản quyền
222
+ copyright_info = {
223
+ "name": "Nguyen Van A",
224
+ "email": "nguyenvana@example.com",
225
+ "date": "2024-01-15",
226
+ "website": "https://example.com",
227
+ "description": "Original artwork",
228
+ "license": "All rights reserved"
229
+ }
230
+
231
+ # Nhúng vào ảnh (đơn giản nhất)
232
+ result = embed_watermark("input.jpg", copyright_info, "watermarked.jpg",
233
+ password="my_secret_password", strength=0.5)
234
+ print(result)
235
+ # Output: {'success': True, 'copyright_hash': '...', 'psnr': 42.19, 'quality_impact': 'minimal'}
236
+
237
+ # Trích xuất bản quyền
238
+ result = extract_watermark("watermarked.jpg", possible_hashes=["hash1", "hash2"],
239
+ password="my_secret_password")
240
+ print(result)
241
+ # Output: {'success': True, 'copyright_hash': '...', 'confidence': 0.91, 'detected': True}
242
+
243
+ # Xác thực bản quyền
244
+ result = verify_watermark("watermarked.jpg", copyright_hash="abc123...",
245
+ password="my_secret_password")
246
+ print(result)
247
+ # Output: {'verified': True, 'confidence': 0.91, 'copyright_hash': 'abc123...'}
248
+ ```
249
+
250
+ #### Sử dụng Class đầy đủ (Production)
251
+
252
+ ```python
253
+ from copyright_watermark import CopyrightWatermarkPro
254
+
255
+ # Thông tin bản quyền
256
+ copyright_info = {
257
+ "name": "Nguyen Van A",
258
+ "email": "nguyenvana@example.com",
259
+ "date": "2024-01-15",
260
+ "website": "https://example.com",
261
+ "description": "Original artwork",
262
+ "license": "All rights reserved"
263
+ }
264
+
265
+ # Khởi tạo với adaptive strength và redundancy
266
+ wm = CopyrightWatermarkPro(password="my_secret_password", strength=0.5, redundancy=7)
267
+
268
+ # Nhúng vào ảnh
269
+ result = wm.embed_copyright("input.jpg", copyright_info, "watermarked.jpg")
270
+ print(result)
271
+ # Output: {'success': True, 'copyright_hash': '...', 'psnr': 42.19, 'quality_impact': 'minimal'}
272
+
273
+ # Trích xuất với danh sách hash có thể có
274
+ result = wm.extract_copyright("watermarked.jpg", possible_hashes=["hash1", "hash2"])
275
+ print(result)
276
+ # Output: {'success': True, 'copyright_hash': '...', 'confidence': 0.91, 'detected': True}
277
+
278
+ # Xác thực bản quyền
279
+ result = wm.verify_copyright("watermarked.jpg", copyright_hash="abc123...")
280
+ print(result)
281
+ # Output: {'verified': True, 'confidence': 0.91, 'copyright_hash': 'abc123...'}
282
+ ```
283
+
284
+ #### Batch Processing (Xử lý hàng loạt)
285
+
286
+ ```python
287
+ from copyright_watermark import CopyrightWatermarkPro
288
+
289
+ # Danh sách ảnh cần xử lý
290
+ image_paths = ["img1.jpg", "img2.jpg", "img3.jpg"]
291
+
292
+ copyright_info = {
293
+ "name": "Nguyen Van A",
294
+ "email": "nguyenvana@example.com",
295
+ "date": "2024-01-15"
296
+ }
297
+
298
+ # Xử lý hàng loạt
299
+ results = CopyrightWatermarkPro.batch_embed(image_paths, copyright_info,
300
+ "output_dir", password="secret")
301
+
302
+ for result in results:
303
+ print(f"{result['input']} -> {result['output']}: {result['success']}")
304
+ ```
305
+
306
+ ### Python - Module Standard (Cũ - Tùy chọn)
307
+
308
+ Nếu cần dùng module standard cũ:
309
+
310
+ ```python
311
+ from copyright_watermark_standard import CopyrightWatermark
312
+
313
+ # Khởi tạo với redundancy cao hơn để tăng độ bền
314
+ wm = CopyrightWatermark(password="my_secret_password", redundancy=7)
315
+
316
+ # Nhúng vào ảnh
317
+ success = wm.embed_copyright("input.jpg", copyright_info, "watermarked.jpg")
318
+
319
+ # Trích xuất
320
+ result = wm.extract_copyright("watermarked.jpg", possible_hashes=["hash1", "hash2"])
321
+ ```
322
+
323
+ ### Node.js - Module Production (Module chính)
324
+
325
+ #### Sử dụng API đơn giản (Easy API)
326
+
327
+ ```javascript
328
+ const { embedWatermark, extractWatermark, verifyWatermark } = require('./nodejs_module/copyrightWatermark');
329
+
330
+ const copyrightInfo = {
331
+ name: 'Nguyen Van A',
332
+ email: 'nguyenvana@example.com',
333
+ date: '2024-01-15',
334
+ website: 'https://example.com',
335
+ description: 'Original artwork',
336
+ license: 'All rights reserved'
337
+ };
338
+
339
+ // Nhúng vào ảnh
340
+ const result = await embedWatermark('input.jpg', copyrightInfo, 'watermarked.jpg', 'my_secret_password', 0.5);
341
+
342
+ // Trích xuất bản quyền
343
+ const extractResult = await extractWatermark('watermarked.jpg', ['hash1', 'hash2'], 'my_secret_password');
344
+
345
+ // Xác thực bản quyền
346
+ const verifyResult = await verifyWatermark('watermarked.jpg', 'abc123...', 'my_secret_password');
347
+ ```
348
+
349
+ #### Sử dụng Class đầy đủ
350
+
351
+ ```javascript
352
+ const { CopyrightWatermarkPro } = require('./nodejs_module/copyrightWatermark');
353
+
354
+ const wm = new CopyrightWatermarkPro('my_secret_password', 0.5, 7);
355
+
356
+ await wm.embedCopyright('input.jpg', copyrightInfo, 'watermarked.jpg');
357
+ ```
358
+
359
+ #### Trích xuất bản quyền từ ảnh
360
+
361
+ ```javascript
362
+ const { CopyrightWatermarkPro } = require('./nodejs_module/copyrightWatermark');
363
+
364
+ const wm = new CopyrightWatermarkPro('my_secret_password', 0.5, 7);
365
+
366
+ const result = await wm.extractCopyright('watermarked.jpg', ['hash1', 'hash2']);
367
+ console.log(result);
368
+ ```
369
+
370
+ #### Xác thực bản quyền
371
+
372
+ ```javascript
373
+ const { CopyrightWatermarkPro } = require('./nodejs_module/copyrightWatermark');
374
+
375
+ const wm = new CopyrightWatermarkPro('my_secret_password', 0.5, 7);
376
+
377
+ const result = await wm.verifyCopyright('watermarked.jpg', 'abc123...');
378
+ console.log(result);
379
+ ```
380
+
381
+ #### Batch Processing (Xử lý hàng loạt)
382
+
383
+ ```javascript
384
+ const { CopyrightWatermarkPro } = require('./nodejs_module/copyrightWatermark');
385
+
386
+ const imagePaths = ['img1.jpg', 'img2.jpg', 'img3.jpg'];
387
+
388
+ const results = await CopyrightWatermarkPro.batchEmbed(imagePaths, copyrightInfo, 'output_dir', 'secret');
389
+ ```
390
+
391
+ ### Node.js - Module Standard (Cũ - Tùy chọn)
392
+
393
+ ```javascript
394
+ const { CopyrightWatermark } = require('./nodejs_module/copyrightWatermarkStandard');
395
+
396
+ const wm = new CopyrightWatermark('my_secret_password', 7);
397
+
398
+ await wm.embedCopyright('input.jpg', copyrightInfo, 'watermarked.jpg');
399
+ ```
400
+
401
+ ## Thông tin bản quyền
402
+
403
+ Các trường thông tin có thể nhúng:
404
+
405
+ - **name** (bắt buộc): Tên tác giả/chủ sở hữu
406
+ - **email** (bắt buộc): Email liên hệ
407
+ - **date** (bắt buộc): Ngày tạo
408
+ - **website** (tùy chọn): Website
409
+ - **description** (tùy chọn): Mô tả
410
+ - **license** (tùy chọn): Loại license
411
+
412
+ ## Cách hoạt động
413
+
414
+ ### Module Production (copyright_watermark_pro.py)
415
+
416
+ Module production sử dụng kỹ thuật **Adaptive Quantization-based Steganography**:
417
+
418
+ 1. **Mã hóa thông tin**: Thông tin bản quyền được chuyển thành hash SHA-256
419
+ 2. **Reed-Solomon Encoding**: Hash được mã hóa với redundancy để có thể khôi phục khi bị hỏng
420
+ 3. **Adaptive Quantization**: Dữ liệu được nhúng với strength thích ứng dựa trên local variance
421
+ 4. **Pseudo-random Positions**: Vị trí nhúng được tạo ngẫu nhiên dựa trên password
422
+ 5. **Error Correction**: Khi trích xuất, sử dụng majority voting để khôi phục dữ liệu
423
+
424
+ Ưu điểm của phương pháp này:
425
+ - Chống chịu tốt với nén ảnh (JPEG compression)
426
+ - Chống chịu cắt ảnh (vì dữ liệu được phân bố rải rác)
427
+ - Chống chịu resize (quantization step giúp duy trì thông tin)
428
+ - Chống chịu blur và contrast tốt hơn (adaptive strength)
429
+ - Có thể khôi phục một phần dữ liệu khi bị hỏng
430
+ - Không làm tăng kích thước file ảnh
431
+ - Impact tối thiểu trên chất lượng ảnh (PSNR > 40dB)
432
+
433
+ ### Module Standard (copyright_watermark.py)
434
+
435
+ Module standard sử dụng kỹ thuật **Quantization-based Steganography**:
436
+
437
+ 1. **Mã hóa thông tin**: Thông tin bản quyền được chuyển thành hash SHA-256
438
+ 2. **Reed-Solomon Encoding**: Hash được mã hóa với redundancy
439
+ 3. **Quantization-based Embedding**: Dữ liệu được nhúng vào ảnh bằng cách điều chỉnh các pixel
440
+ 4. **Pseudo-random Positions**: Vị trí nhúng được tạo ngẫu nhiên dựa trên password
441
+ 5. **Error Correction**: Khi trích xuất, sử dụng majority voting
442
+
443
+ Ưu điểm:
444
+ - Đơn giản, dễ sử dụng
445
+ - Chống chịu tốt với crop, resize, rotation
446
+ - Chống chịu tốt với compression
447
+
448
+ ## Metadata file
449
+
450
+ Khi nhúng watermark, một file metadata cũng được tạo ra với đuôi `_metadata.json`. File này chứa:
451
+
452
+ - Thông tin bản quyền gốc
453
+ - Hash của thông tin bản quyền
454
+ - Password đã sử dụng
455
+ - Redundancy level
456
+
457
+ File này giúp bạn:
458
+ - Lưu trữ thông tin bản quyền gốc
459
+ - Xác thực nhanh chóng bằng hash
460
+ - Khôi phục password nếu quên
461
+
462
+ ## Tham số cấu hình
463
+
464
+ ### Redundancy Parameter
465
+
466
+ - **Mặc định**: 5
467
+ - **Khuyến nghị**: 7-10 cho độ bền cao
468
+ - **Tác động**: Redundancy càng cao thì càng bền nhưng ảnh càng lớn và thời gian xử lý càng lâu
469
+
470
+ ```python
471
+ # Low redundancy (nhanh nhưng kém bền)
472
+ wm = CopyrightWatermark(password="secret", redundancy=3)
473
+
474
+ # High redundancy (chậm nhưng rất bền)
475
+ wm = CopyrightWatermark(password="secret", redundancy=10)
476
+ ```
477
+
478
+ ## Test độ bền
479
+
480
+ ### Test Module Production (Python)
481
+
482
+ Chạy script test để kiểm tra độ bền của production module:
483
+
484
+ ```bash
485
+ cd examples
486
+ python test_pro_robustness.py # Cần cài đặt dependencies trước
487
+ ```
488
+
489
+ Script sẽ test với:
490
+ - Quality impact (PSNR measurement)
491
+ - File size impact
492
+ - Blur attacks (3x3 - 15x15)
493
+ - Brightness adjustments (-100 to +100)
494
+ - Contrast adjustments (0.5x - 2.5x)
495
+ - Noise addition (std 5-50)
496
+ - Easy API testing
497
+
498
+ ### Test Module Production (Node.js)
499
+
500
+ ```bash
501
+ cd nodejs_module
502
+ node ../examples/test_nodejs_pro.js
503
+ ```
504
+
505
+ ### Test Module Standard
506
+
507
+ Chạy script test cho module standard:
508
+
509
+ ```bash
510
+ cd examples
511
+ python test_robustness.py # Cần cài đặt dependencies trước
512
+ ```
513
+
514
+ Script sẽ test với:
515
+ - Crop attacks (10%, 25%, 50%, 75%)
516
+ - Resize attacks (25%, 50%, 75%, 150%, 200%)
517
+ - JPEG compression (Quality 15-95)
518
+ - Brightness adjustments (-100 to +100)
519
+ - Contrast adjustments (0.5x to 2.0x)
520
+ - Gaussian blur (3x3 to 11x11)
521
+ - Noise addition (std 10-75)
522
+ - Rotation (5° to 90°)
523
+ - Combined attacks
524
+
525
+ ### Test Cả Hai Module (Comprehensive)
526
+
527
+ ```bash
528
+ cd examples
529
+ python test_both_modules.py
530
+ ```
531
+
532
+ Script này sẽ:
533
+ - Test Python module
534
+ - Test Node.js module
535
+ - Test cross-module compatibility
536
+ - Test cả hai module với các tấn công
537
+
538
+ ## Lưu ý quan trọng
539
+
540
+ 1. **Password quan trọng**: Hãy sử dụng password mạnh và lưu trữ nó an toàn. Cùng một password phải được dùng để nhúng và trích xuất.
541
+ 2. **Metadata file**: Lưu trữ file `_metadata.json` an toàn vì nó chứa thông tin bản quyền gốc.
542
+ 3. **Redundancy**: Tăng redundancy để tăng độ bền nhưng sẽ làm tăng thời gian xử lý.
543
+ 4. **Chất lượng ảnh**: Watermark hoạt động tốt hơn với ảnh chất lượng cao (ít nén, resolution tốt).
544
+ 5. **Giới hạn**: Không chống được noise addition mạnh và một số filter ảnh mạnh.
545
+
546
+ ## Ví dụ thực tế
547
+
548
+ Xem file `examples/example_python.py` và `examples/example_nodejs.js` để có các ví dụ chi tiết về:
549
+ - Nhúng bản quyền đơn lẻ
550
+ - Trích xuất bản quyền
551
+ - Xác thực bản quyền
552
+ - Xử lý hàng loạt ảnh
553
+
554
+ ## So sánh các phiên bản
555
+
556
+ | Tính năng | Standard | Production |
557
+ |-----------|----------|------------|
558
+ | Phương pháp nhúng | Quantization-based | Adaptive Quantization |
559
+ | Error correction | Reed-Solomon | Reed-Solomon |
560
+ | Redundancy | Có (configurable) | Có (configurable) |
561
+ | Crop resistance | Rất tốt (100%) | Rất tốt (100%) |
562
+ | Resize resistance | Rất tốt (100%) | Rất tốt (100%) |
563
+ | Compression resistance | Tốt (83%) | Tốt (83%) |
564
+ | Rotation resistance | Rất tốt (100%) | Rất tốt (100%) |
565
+ | Blur resistance | Trung bình (40%) | Tốt (83%) |
566
+ | Brightness resistance | Trung bình (33%) | Tốt (50%) |
567
+ | Contrast resistance | Trung bình (40%) | Xuất sắc (100%) |
568
+ | Noise resistance | Kém (0%) | Trung bình (12.5%) |
569
+ | Quality impact (PSNR) | ~40dB | >40dB (adaptive) |
570
+ | File size increase | Minimal | Minimal (~1%) |
571
+ | Easy API | Không | Có |
572
+ | Batch processing | Không | Có |
573
+ | Production-ready | Có | Có (tốt hơn) |
574
+
575
+ ## Giới hạn
576
+
577
+ - Watermark có thể bị hủy nếu ảnh bị thêm noise mạnh
578
+ - Một số filter ảnh mạnh (heavy blur, sharpen) có thể làm mất watermark
579
+ - Cần cùng password để nhúng và trích xuất
580
+ - Không bảo vệ 100% chống lại mọi tấn công, nhưng đủ tốt cho việc bảo vệ bản quyền thông thường
581
+
582
+ ## License
583
+
584
+ MIT License
585
+
586
+ ## Đóng góp
587
+
588
+ Mọi đóng góp đều được chào đón!