Copy-Move Detection on Digital Image using Python
Update: I just released english version for english reader! You can have it via Release tag or by pulling the newest code.
This is an implementation of python script to detect a copy-move manipulation attack on digital image based on Overlapping Blocks.
This script is implemented with a modification of two algoritms publicated in a scientific journals:
- Duplication detection algorithm, taken from Exposing Digital Forgeries by Detecting Duplicated Image Region; Fast and smooth attack detection algorithm on digital image using principal component analysys, but sensitive to noise and post region duplication process (explained in the paper above)
- Robust detection algorithm, taken from Robust Detection of Region-Duplication Forgery in Digital Image; Slower and having rough result attack detection algorithm but are considered robust towards noise and post region duplication process
By modify those algorithm, this script will have a tolerance regarding variety of the input image (i.e. the result will be both smooth and robust, with a trade-off in run time)
This project was used for my Undergraduate Thesis that you can find it in here, but please note that it was written in Indonesian.
Example of original and forgered image
Original image
Forgered image
GUI
By default, the script will log entire detection process like so:
Getting Started
Make sure you already have:
Also the required python libraries:
Starting
Running GUI version
- Run main_GUI.py
- A new window will apear, click open file and choose your image
- Click detect and the detection process will start
- After done, the detection result will be written in your CLI, while the result image will be shown in GUI
Running CLI version
By default, you can run it using main_CLI.py. But you can also modify it, or even make your own python script with the format below:
- Make sure to import
CopyMoveDetection
package - Directly call function
detect
ordetect_dir
and give the proper parameter
Your scirpt will likely looks like so:
import CopyMoveDetection
# To detect all images on a single folder, use detect_dir function
CopyMoveDetection.detect_dir('your/directory/path/', 'your/result/directory/' [, blockSize])
# To detect single image on a certain path, use detect function
CopyMoveDetection.detect('your/directory/path/', 'your_image.png', 'your/result/directory/' [, blockSize])
If blockSize parameter was not given, the default value would be 32 (integer).
Built With
- Python 2.7 - Base language
- Anaconda 4.3.1 - Python data science package
- Pycharm 4.5.5 - IDE
Authors
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Acknowledgments
I mainly learnt how to do PCA on image using Python from here written by Jan Erik Solem, but the page has been erased. Shortly after knowing the page was gone, I found that the author are now founder & CEO at Mapillary (Hail, and hat tip).