{"id":25432893,"url":"https://github.com/risicle/docoskin","last_synced_at":"2026-05-16T18:04:53.213Z","repository":{"id":57423382,"uuid":"80069655","full_name":"risicle/docoskin","owner":"risicle","description":"\"Onion-skin\" visual differences between a reference document image and a scanned copy","archived":false,"fork":false,"pushed_at":"2020-02-03T20:53:16.000Z","size":55,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-18T04:22:37.078Z","etag":null,"topics":["alignment","documents","onion-skin","opencv","visual-diff"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/risicle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-01-25T23:48:25.000Z","updated_at":"2020-05-29T16:39:01.000Z","dependencies_parsed_at":"2022-09-07T01:11:47.371Z","dependency_job_id":null,"html_url":"https://github.com/risicle/docoskin","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risicle%2Fdocoskin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risicle%2Fdocoskin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risicle%2Fdocoskin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risicle%2Fdocoskin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/risicle","download_url":"https://codeload.github.com/risicle/docoskin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254195238,"owners_count":22030479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alignment","documents","onion-skin","opencv","visual-diff"],"created_at":"2025-02-17T05:17:09.233Z","updated_at":"2026-05-16T18:04:53.173Z","avatar_url":"https://github.com/risicle.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docoskin\n\n\"Onion-skin\" visual differences between a reference document image and a scanned copy.\n\nGiven an image of a reference document, docoskin will attempt to find key points of the document in a scanned copy,\nalign the two, auto-correct the image contrasts and display a combined image, featuring sections in red which were\n\"removed from\" the reference document and sections in green which were added to the document.\n\nThe intended use for this is comparing a signed, returned scan of a contract with the original version as provided to\nthe signer to check for unagreed amendments.\n\nImplemented as a python library with a command-line interface. Significantly more power and flexibility is\nachievable through accessing the python components.\n\nDepends on opencv and six (and, on python2.7, the `futures` backport).\n\nopencv is always going to be a slightly painful dependency from a python point of view because a) it's a native library\nand b) it doesn't really play by python packaging rules supplying an egg. I advocate use of [Nix](http://nixos.org/) to\nsolve both these problems and provide a `default.nix` so that `nix` users can simply perform a\n\n```\n$ nix-shell .\n```\n\nin the source directory for a development-ready shell (somthing like a non-python-specific `virtualenv`).\n\nThose wishing to attempt using the pypi `opencv-python` package can try installing the package with the 'extra'\n`pypi_opencv`, which _hypothetically_ should download \u0026 install opencv from pypi\n\n```\n$ pip install -e .[pypi_opencv]\n```\n\n**but** the author has never had any luck with that and has unfavourable opinions of `pip` in general, not to mention the\nconcept of downloading \u0026 installing binaries from pypi.\n\nPreliminary license is GPLv3.\n\n## Tests\n\nThe test suite makes use of images which are kept in a git submodule due to their size. Performing a\n\n```\n$ git submodule init\n$ git submodule update\n```\n\nshould fetch the required data. If this data is not present, the tests will quietly skip tests requiring images (which\nis most of them, though).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frisicle%2Fdocoskin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frisicle%2Fdocoskin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frisicle%2Fdocoskin/lists"}