Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kseo/blockhash
Haskell implementation of Blockhash perceptual image hash algorithm
https://github.com/kseo/blockhash
Last synced: 27 days ago
JSON representation
Haskell implementation of Blockhash perceptual image hash algorithm
- Host: GitHub
- URL: https://github.com/kseo/blockhash
- Owner: kseo
- License: bsd-3-clause
- Created: 2016-07-16T16:20:03.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2016-08-30T12:31:16.000Z (about 8 years ago)
- Last Synced: 2024-09-25T06:53:01.667Z (about 1 month ago)
- Language: Haskell
- Homepage: https://hackage.haskell.org/package/blockhash
- Size: 5.33 MB
- Stars: 7
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
blockhash [![Hackage](https://img.shields.io/hackage/v/blockhash.svg?style=flat)](https://hackage.haskell.org/package/blockhash) [![Build Status](https://travis-ci.org/kseo/blockhash.svg?branch=master)](https://travis-ci.org/kseo/blockhash)
=========This is a perceptual image hash calculation tool based on algorithm described in
Block Mean Value Based Image Perceptual Hashing by Bian Yang, Fan Gu and Xiamu Niu.
Visit [the website][blockhash] for further information.[blockhash]: http://blockhash.io/
## Program
```
Usage: blockhash [-q|--quick] [-b|--bits ARG] filenames
blockhashAvailable options:
-h,--help Show this help text
-q,--quick Use quick hashing method
-b,--bits ARG Create hash of size N^2 bits.
```## Library
The example code below uses [JuicyPixels][JuicyPixels] to load images and prints
the hash to stdout.```haskell
import qualified Codec.Picture as P
import Data.Blockhash
import qualified Data.Vector.Generic as VG
import qualified Data.Vector.Unboxed as VprintHash :: FilePath -> IO ()
printHash filename = do
res <- P.readImage filename
case res of
Left err -> putStrLn ("Fail to read: " ++ filename)
Right dynamicImage -> do
let rgbaImage = P.convertRGBA8 dynamicImage
pixels = VG.convert (P.imageData rgbaImage)
image = Image { imagePixels = pixels
, imageWidth = P.imageWidth rgbaImage
, imageHeight = P.imageHeight rgbaImage }
hash = blockhash image 16 Precise
putStrLn (show hash)
```[JuicyPixels]: https://hackage.haskell.org/package/JuicyPixels-3.2.7.2