{"id":20526540,"url":"https://github.com/nikvoronin/we-aint-same","last_synced_at":"2026-02-23T09:04:03.802Z","repository":{"id":144197558,"uuid":"573853877","full_name":"nikvoronin/we-aint-same","owner":"nikvoronin","description":"Let's find out duplicate images with Perceptual Hashing algorithms","archived":false,"fork":false,"pushed_at":"2025-02-07T21:15:18.000Z","size":22,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T01:48:37.955Z","etag":null,"topics":["csharp","dotnet","image-duplicate-detection","image-processing","imagesharp","perceptual-hash","perceptual-hashes","perceptual-hashing"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikvoronin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-03T16:37:01.000Z","updated_at":"2025-02-07T21:15:22.000Z","dependencies_parsed_at":"2023-06-16T07:30:58.213Z","dependency_job_id":null,"html_url":"https://github.com/nikvoronin/we-aint-same","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nikvoronin/we-aint-same","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikvoronin%2Fwe-aint-same","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikvoronin%2Fwe-aint-same/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikvoronin%2Fwe-aint-same/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikvoronin%2Fwe-aint-same/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikvoronin","download_url":"https://codeload.github.com/nikvoronin/we-aint-same/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikvoronin%2Fwe-aint-same/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29740753,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T07:44:07.782Z","status":"ssl_error","status_checked_at":"2026-02-23T07:44:07.432Z","response_time":90,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["csharp","dotnet","image-duplicate-detection","image-processing","imagesharp","perceptual-hash","perceptual-hashes","perceptual-hashing"],"created_at":"2024-11-15T23:14:38.213Z","updated_at":"2026-02-23T09:04:03.750Z","avatar_url":"https://github.com/nikvoronin.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# We Ain't Same\n\nLet's find out duplicate images with **Perceptual Hashing** algorithms.\n\n- Calculate perceptual hashes using `ImageHash` library.\n- Store and restore precalculated hashes.\n- Recursive seeking of image files.\n- Detect duplicates.\n- Organize images into the groups of duplicates.\n\n## Performance\n\n1186 jpeg files in total. Release configuration.\n\n- 17.2 sec to pre-compute hashes.\n- 0.11 sec to search among pre-hashed images.\n\n## Example\n\n![samples002](https://user-images.githubusercontent.com/11328666/205454362-1e3044b4-92fb-4805-9e9b-bac5bcfb31f3.png)\n\nOutput log:\n\n```plain\n+++ Computing hashes...\n+ C:\\Users\\Pictures\\Samples2\\bing20221129.jpg\n+ C:\\Users\\Pictures\\Samples2\\fireworks.jpg\n+ C:\\Users\\Pictures\\Samples2\\mars.jpg\n+ C:\\Users\\Pictures\\Samples2\\mount-copy.jpg\n+ C:\\Users\\Pictures\\Samples2\\mount-rotated-2degree.jpg\n+ C:\\Users\\Pictures\\Samples2\\mount-small.jpg\n+ C:\\Users\\Pictures\\Samples2\\mountains.jpg\n\n+++ Chasing duplicates...\n\n+++ Similarity: max= 100% / min= 43,75%\n\n+++ Duplicate Groups (1):\nGroup #0\n        mount-copy.jpg\n        mount-rotated-2degree.jpg\n        mount-small.jpg\n        mountains.jpg\n\n+++ TOTAL: 00:00:00.8170144\n```\n\nPrecalculated hashes as JSON file:\n\n```json\n[\n    {\n        \"Path\": \"C:\\\\Users\\\\Pictures\\\\Samples2\\\\bing20221129.jpg\",\n        \"Hash\": 11695141823225099355\n    },\n    {\n        \"Path\": \"C:\\\\Users\\\\Pictures\\\\Samples2\\\\fireworks.jpg\",\n        \"Hash\": 10721035060630703339\n    },\n    // ...\n]\n```\n\n## Links\n\n- [ImageHash](https://github.com/coenm/ImageHash) is a .NET Standard library containing multiple algorithms to calculate perceptual hashes of images and to calculate similarity using those hashes.\n- [ImageSharp](https://github.com/SixLabors/ImageSharp) is used inside of `ImageHash`.\n- [Detection of Duplicate Images Using Image Hash Functions.](https://towardsdatascience.com/detection-of-duplicate-images-using-image-hash-functions-4d9c53f04a75) Automate the search for (near-)identical photos with the Python library undouble.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikvoronin%2Fwe-aint-same","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikvoronin%2Fwe-aint-same","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikvoronin%2Fwe-aint-same/lists"}