Copy-move forgery detection on digital image using Python

rahmatnazali rahmatnazali Last update: Nov 30, 2022

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:

  1. 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)
  2. 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:

Modification diagram

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

Original image

Forgered image

Forgered image

Example result after detection

Result image

GUI

GUI screenshoot

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 Buy Me A Coffee

Subscribe to our newsletter