phash 0.0.2 → 0.0.3
raw patch · 6 files changed
+50/−10 lines, 6 filesdep +doctestdep +phashdep ~base
Dependencies added: doctest, phash
Dependency ranges changed: base
Files
- README.md +2/−0
- phash.cabal +14/−3
- src/Data/PHash.hs +12/−2
- src/Data/PHash/Image.hs +15/−3
- test/DocTest.hs +5/−0
- test/Test.hs +2/−2
README.md view
@@ -1,5 +1,7 @@ # phash: Haskell bindings to pHash, the open source perceptual hash library +[](https://travis-ci.org/MichaelXavier/phash)+ PHash is a library for generating perceptual hashes of media files. These bindings currently only support images. You can compare these hashes to detect visually similar images.
phash.cabal view
@@ -1,5 +1,5 @@ name: phash-version: 0.0.2+version: 0.0.3 synopsis: Haskell bindings to pHash, the open source perceptual hash library description: See http://www.phash.org/ for more info. Note that you must have libphash installed on your system to use this@@ -20,7 +20,7 @@ exposed-modules: Data.PHash exposed-modules: Data.PHash.Image exposed-modules: Data.PHash.Types- build-depends: base >= 4.6 && < 4.7+ build-depends: base >= 4.6 && < 4.8 hs-source-dirs: src default-language: Haskell2010 extra-libraries: pHash@@ -31,12 +31,23 @@ default-language: Haskell2010 hs-source-dirs: src, test extra-libraries: pHash- build-depends: base >= 4.6 && < 4.7+ build-depends: base >= 4.6 && < 4.8 build-depends: tasty >= 0.7 && < 1.0 build-depends: tasty-smallcheck >= 0.2 && < 1.0 build-depends: tasty-hunit >= 0.4.1 && < 1.0 build-depends: HUnit >= 1.2.5.2 && < 2.0 build-depends: smallcheck++test-suite docs+ type: exitcode-stdio-1.0+ main-is: DocTest.hs+ default-language: Haskell2010+ hs-source-dirs: src, test+ extra-libraries: pHash+ ghc-options: -threaded+ build-depends: base >= 4.6 && < 4.8+ build-depends: doctest >= 0.9.10 && < 1.0+ build-depends: phash source-repository head Type: git
src/Data/PHash.hs view
@@ -11,8 +11,17 @@ import Data.PHash.Image import Data.PHash.Types --- |Calculate the distance between two hashes. This can be used to detect how--- similar two images are.+{-|+Calculate the distance between two hashes. This can be used to detect how+similar two images are.++>>> import Data.PHash+>>> hammingDistance (PHash 15243782418149777067) (PHash 17549625427362946731)+2++>>> hammingDistance (PHash 15243782418149777067) (PHash 15243782418149777067)+0+-} hammingDistance :: PHash -> PHash -> Int hammingDistance x y = unwrap $ c_ph_hamming_distance (toCPHash x) (toCPHash y) where unwrap (CInt i) = fromIntegral i@@ -29,3 +38,4 @@ where checkDistance h1 h2 = (<=threshold) $ hammingDistance h1 h2 foreign import ccall "pHash.h ph_hamming_distance" c_ph_hamming_distance :: CULong -> CULong -> CInt+
src/Data/PHash/Image.hs view
@@ -8,9 +8,21 @@ import Data.PHash.Types --- |Obtain the hash of an image. Returns Nothing on failure. pHash's API does--- not provide any error information when this fails, but CImg may dump--- something to stderr.+-- $setup+-- >>> let imgPath = "test/fixtures/grump.jpg"+-- >>> let bogusPath = "bogus"++{-|+Obtain the hash of an image. Returns Nothing on failure. pHash's API does+not provide any error information when this fails, but CImg may dump+something to stderr.++Examples:++>>> import Data.PHash+>>> imageHash imgPath+Just (PHash 17549625427362946731)+-} imageHash :: FilePath -> IO (Maybe PHash) imageHash path = withCString path $ \cs -> with startingPhash $ \pHPtr -> do
+ test/DocTest.hs view
@@ -0,0 +1,5 @@+import Test.DocTest++main = doctest [ "-isrc"+ , "-lpHash"+ , "src/Data/PHash.hs" ]
test/Test.hs view
@@ -48,8 +48,8 @@ hammingTests = testGroup "hammingTests" [ testProperty "hammingDistance a a = 0" $ \ph -> hammingDistance ph ph == 0,- testProperty "hammingDistance a a+1 /= 0" $- \ph -> hammingDistance ph (ph + 1) /= 0+ testProperty "hammingDistance a b where a /= b /= 0" $+ \ph ph' -> ph /= ph' ==> hammingDistance ph ph' /= 0 ] instance Monad m => Serial m PHash where