pimage
pimage copied to clipboard
Python package for detecting copy-move attack on a digital image
Copy-Move Detection on Digital Image using Python
UPDATE 16 April 2021: This project has been properly re-written as paper and published at Springer. Some more detailed theory and step by step are explained there so probably want to check it out too. You can find it here.
Old Python 2 version:This repository now host the python 3 version. You can find the old module written with python 2 on this repository.
Description
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 (old link is dead, go to alternative link); Fast and smooth attack detection algorithm on digital image using principal component analysis, 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
This project was used for my Undergraduate Thesis that you can find it in here, but please note that it was written in Indonesian. Now it has been re-written as paper and published at Springer that you can find it here, feel free to cite!
How do we modify them?
We know that Duplication detection algorithm (Paper 1) has coordinate
and principal_component
features, and then on Robust detection algorithm (Paper 2) it has coordinate
and seven_features
mentioned inside the paper.
Knowing that, we then attempt to give a tolerance by adding all of the features like so:
and then sort it lexicoghrapically.
The principal component will bring similar block closer, while the seven features will also bring closer similar block that can't be detected by principal component (that are for example blurred).
By modifying the algorithms like mentioned above, 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)
Example image
Original image
Forgered image
Example result after detection
GUI
Note: This version does not support GUI. If you want to implement it, you can visit the old repo mentioned above for the snippets.
Getting Started
Assuming you already have Python 3.x on your machine:
- clone this repo
- create a virtual environment and enter into it
- run
pip3 install -r requirements.txt
Example
from copy_move_detection import detect
detect.detect('assets/', 'dataset_example_blur.png', 'output/', block_size=32)
If blockSize parameter was not given, the default value would be 32 (integer).
You can also see directly at the code.
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 deleted. Shortly after knowing the page was gone, I found that the author are now founder & CEO at Mapillary (Hail, and hat tip).
Support
Hi! I got piles email of thanks regarding how this code help them on their affairs or getting their Degree :)
Maintain the repository took time and effort, if you want to support me, please consider