<div dir="ltr">Hi all!<div><br></div><div>I'm pleased to announce the first release of blockhash, 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.</div><div><br></div><div><a href="https://hackage.haskell.org/package/blockhash">https://hackage.haskell.org/package/blockhash</a><br></div><div><br></div><div><a href="https://github.com/kseo/blockhash">https://github.com/kseo/blockhash</a><br></div><div><br></div><div>Program:</div><div><div><br></div><div>Usage: blockhash [-q|--quick] [-b|--bits ARG] filenames</div><div>  blockhash</div><div><br></div><div>Available options:</div><div>  -h,--help                Show this help text</div><div>  -q,--quick               Use quick hashing method</div><div>  -b,--bits ARG            Create hash of size N^2 bits.</div></div><div><br></div><div><br></div><div>Library:</div><div><br></div><div><div>import qualified Codec.Picture as P</div><div>import Data.Blockhash</div><div>import qualified Data.Vector.Generic as VG</div><div>import qualified Data.Vector.Unboxed as V</div><div><br></div><div>printHash :: FilePath -> IO ()</div><div>printHash :: filename = do</div><div>  res <- P.readImage filename</div><div>  case res of</div><div>    Left err -> putStrLn ("Fail to read: " ++ filename)</div><div>    Right dynamicImage -> do</div><div>      let rgbaImage = P.convertRGBA8 dynamicImage</div><div>          pixels = VG.convert (P.imageData rgbaImage)</div><div>          image = Image { imagePixels = pixels</div><div>                        , imageWidth = P.imageWidth rgbaImage</div><div>                        , imageHeight = P.imageHeight rgbaImage }</div><div>          hash = blockhash image 16 Precise</div><div>      putStrLn (show hash)</div></div><div><br></div><div><br></div><div>For further information on the blockhash algorithm, please visit the web site:</div><div><br></div><div><a href="http://blockhash.io/">http://blockhash.io/</a><br></div><div><br></div><div>Thanks,<br></div><div>Kwang Yul Seo</div><div><br></div></div>