A demo backend focused app for eliminating duplicate images with Dagger2, Architecture including MVVM, Paging, LiveData, Room, Paging, and a custom dupe detector integrated with the Glide recyclerview preloader written in Kotlin. It uses a modified dhash fingerprint algorithm to get matches within epsilon in C++ and coarse grained synchronization with coroutines in Kotlin.
- [coroutines] I am able to match colorized images and some variations in resolution within a hamming distance of 3. I also reduced the search for similar images to within +/- 1 of the population count of the hash. I was able to refactor from a critical section and an ExecutorService to Kotlin coroutines and coarse grained synchronization, reducing dhash times 99%! (3s to .006s)
(in seconds)
- hash147580 20 :: 1529688601:::time::0.009626643--15
- hash147462 18 :: 757939307:::time::0.005973385--17
- hash147344 17 :: 2914562479:::time::0.015411176--19
- hash147344 16 :: 2914562479:::time::0.007672204--19
- hash147066 15 :: 3329153925:::time::0.008064992--18
- hash147044 14 :: 1281709129:::time::0.008693842--13
- hash147798 25 :: 1697199892:::time::0.007136103--14
- hash147867 27 :: 1806095048:::time::0.044139966--16
Building a dhasher library within an image download API
Target 28 SDK 14+, Oreo compatible, for phone and tablet
- Dagger2 for DI abstraction
- Roboelectric, Espresso, and Mockito tests
- Paging boundary callback for Room/Retrofit decision making
- MVVM, Repository, DAO patterns with LiveData for lifecycle managment
- Glide RecyclerView integration library for image preload
- Kotlin extensions and coroutines
- Image duplicates removal built in at preload
--> download from the Google Play Store
This app was built with Android Studio which uses the gradle build system.
This project uses the [Github API] ( https://www.github.com)