From 75d2bf09ea4677cc9c60ca2ae0488317c2e629c6 Mon Sep 17 00:00:00 2001 From: dannguyen Date: Mon, 30 Dec 2013 11:46:51 -0500 Subject: [PATCH 1/3] distance_from helper method, with comparison tests --- README.md | 57 ++++++++++++-- lib/phashion.rb | 17 ++-- test/jpg/Broccoli_Super_Food.100px.jpg | Bin 0 -> 2127 bytes test/jpg/Broccoli_Super_Food.bounding-box.jpg | Bin 0 -> 22942 bytes test/jpg/Broccoli_Super_Food.bw.jpg | Bin 0 -> 22616 bytes .../Broccoli_Super_Food.color-corrected.jpg | Bin 0 -> 26431 bytes .../Broccoli_Super_Food.horizontal-flip.jpg | Bin 0 -> 23944 bytes test/jpg/Broccoli_Super_Food.lossy.jpg | Bin 0 -> 13053 bytes test/jpg/Broccoli_Super_Food.rotate5cw.jpg | Bin 0 -> 23819 bytes test/test_phashion.rb | 74 ++++++++++++++++++ 10 files changed, 137 insertions(+), 11 deletions(-) create mode 100644 test/jpg/Broccoli_Super_Food.100px.jpg create mode 100644 test/jpg/Broccoli_Super_Food.bounding-box.jpg create mode 100644 test/jpg/Broccoli_Super_Food.bw.jpg create mode 100644 test/jpg/Broccoli_Super_Food.color-corrected.jpg create mode 100644 test/jpg/Broccoli_Super_Food.horizontal-flip.jpg create mode 100644 test/jpg/Broccoli_Super_Food.lossy.jpg create mode 100644 test/jpg/Broccoli_Super_Food.rotate5cw.jpg diff --git a/README.md b/README.md index 85a7ccf..6116fba 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ wrapps these dependencies into a custom tarball that is built locally just for this gem so you don't have to do anything special. Look in the `ext/phashion_ext` folder for more details. + +### Compatibility Because of this complexity, it is possible the gem install will fail on your platform. Phashion has been tested on: @@ -28,12 +30,15 @@ platform. Phashion has been tested on: * Ubuntu 8.04 * Ubuntu 12.04 -Please open a [GitHub issue](https://github.com/westonplatter/phashion/issues/) -if you have installation problems. +Please open a [GitHub issue](https://github.com/westonplatter/phashion/issues/) if you have installation problems. + +### Prerequisites +- `libpng` +- `libjpeg` -Common Error: library not found for -ljpeg ------------------------------------------- +Common Error: `library not found for -ljpeg` +----------------------------- If you have an error upon install, like: @@ -54,6 +59,30 @@ Usage --> true +### Threshold for dupe-detection + +Currently, the maximum Hamming distance between two duplicate images is set at 15. As per [mperham's explanation](http://www.mikeperham.com/2010/05/21/detecting-duplicate-images-with-phashion/): + +> A “perceptual hash” is a 64-bit value based on the discrete cosine transform of the image’s frequency spectrum data. Similar images will have hashes that are close in terms of Hamming distance. That is, a binary hash value of 1000 is closer to 0000 than 0011 because it only has one bit different whereas the latter value has two bits different. The duplicate threshold defines how many bits must be different between two hashes for the two associated images to be considered different images. Our testing showed that 15 bits is a good value to start with, it detected all duplicates with a minimum of false positives. + +As a reference point, here are the Hamming distances in these test comparisons using (/test/jpg/Broccoli_Super_Food.jpg)[https://github.com/westonplatter/phashion/blob/master/test/jpg/Broccoli_Super_Food.jpg] as the source image: + + +| Variation | Hamming distance +| ---------------------------------------------------- | ----------------: +| JPG to PNG | 0 +| Lossy JPG (Photoshop Save for Web quality = 20) | 0 +| Thumbnail (from 500px to 100px) | 2 +| Color correction (saturation +20 w auto-correct) | 2 +| Black and white | 2 +| Extraneous whitespace cropped (500x349 to 466x312) | 12 +| A sloppy rotation of 5 degrees clockwise | 14 +| Horizontally-flipped | 32 + + + + + Gem uses customized pHash 0.9.6 ------------------------------- @@ -63,10 +92,28 @@ In order to detech duplicate alpha PNGs, the gem uses a custom version of pHash (https://github.com/westonplatter/phash/commit/ff255d2d3f93c841b98923ecbde997027f21ae36). The gem will be moving back to the pHash master branch once it supports detection of alpha PNG file types. + + Testing ------- -To run the test suite: +### Pre-requisites + +If you get an error like this: + + # Running tests: + + .....sh: convert: command not found + sh: gm: command not found + +– then you need to install [graphicsmagick](http://www.graphicsmagick.org/) and, optionally, [imagemagick](http://www.imagemagick.org/), if you want to get rid of the message related to `convert`. + +Using Homebrew: + + brew install graphicsmagick imagemagick + + +#### To run the test suite: bundle rake compile diff --git a/lib/phashion.rb b/lib/phashion.rb index 6efafae..d26def9 100644 --- a/lib/phashion.rb +++ b/lib/phashion.rb @@ -12,17 +12,22 @@ module Phashion VERSION = '1.0.8' class Image - SETTINGS = { - :dupe_threshold => 15 - } - + DEFAULT_DUPE_THRESHOLD = 15 + attr_reader :filename def initialize(filename) @filename = filename end - def duplicate?(other) - Phashion.hamming_distance(fingerprint, other.fingerprint) < SETTINGS[:dupe_threshold] + # returns: an Integer representing the hamming distance from :other + def distance_from(other) + Phashion.hamming_distance(fingerprint, other.fingerprint) + end + + def duplicate?(other, opts={}) + threshold = opts[:threshold] || DEFAULT_DUPE_THRESHOLD + + distance_from(other) < threshold end def fingerprint diff --git a/test/jpg/Broccoli_Super_Food.100px.jpg b/test/jpg/Broccoli_Super_Food.100px.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ee7c62df22e5dd32bceb78bef2631632ede284e GIT binary patch literal 2127 zcmaJ=3se(V8lJo;+8PN4DDTMx3nF<;0(n8ekN_g4$eUVx#AMJEk{OZ!0j=7CSX3$? zb@537s|AE@rAS3v1vN($JPT4S0*Xl8Z3U^dtE;<`ouEj2j`W{1=iK|>@B9Am-uqwc zkJdZD+Yx4MIsimR`vdmCOjySNnj%}Bkp~a}GM=Ubfb|Y(@dlF#lW;hCBU`0G*CA{* zs^ged7zbu^IY3C58B?h<5EHl#S+CVgp^4LHAyBK4LMcH?t`d_Y8?;OF4M;-%yNT-j z47FGTg@uA4W{Fvc=@63&H0v_;Mu}MpO^HkJu`SJkz$u6+Lkh`kRl!u{3Q&$35HN_% zWvRIWE+~N6Fh5Wz6b67iF3ja{c^sI>f`t-3Pr~JbF9X7>88qpVctzyPTKG%~z1&o8 zZZ12Q&qfXFIj~qPwrTKqEF8fy=IKo;GfQt|PAe!7quQXwOj=YA+7wmm&}@?w!kxa@ zf)0Bn``WYm15l~_Yp70VJAf%!qbVMl@%vg~V`3hLaN-donr%=cIGkxCV-mRmQJGLf zB8p~CpW=!Qs0lT0Krv9B5Cke!YOUTjpTaAZl4!lrq|&RAXoVEQ71&y>MxqeIa)nSJ z7Kp`M7>?kJxZ!d!KO7F^3uJJRLNv`)pz3TLqBl)*H8WhAA)rNC1;Ow?y3H9v!{!lOUj z&#H0ueX3O-ln5&i&ZFr4(5%kYQG>j(@ow|z%CMTYoMn4kJku}s(%(K^!45_|eT_o2 zTS*oXd+jAOtTE7XEow#KJ7BoOR!YHxo|tV1e3GR6oRpoO$9hobHIqetzwzWe(!Q3n zBV}hX$&EvOH<=52PPOmJ)9yS<5gh8uts|C z(!8+x-Z{~HS(wf_`I~@6RLd{lW7(EW0jaG7>TdK)a6e&4^XOfDHPq_^S?O}}`%U*# zlNvoPpBVo!^J4Ik&l~R0;SB8FL1r|Fevo<#4`+HTC(khp1xn(%OzODQE zJdaiK^9{;Y>Q91xp`?!qGLYKVVlO|gw!t__~#ec*hnF0 xHwcb|YtOqB+lK=Ya2Qx&Cwzm<07PVuj+i2jqeCHJxpn*W;LU3LCEnKl{{wro1nvL; literal 0 HcmV?d00001 diff --git a/test/jpg/Broccoli_Super_Food.bounding-box.jpg b/test/jpg/Broccoli_Super_Food.bounding-box.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9580fd92dbbade57adc546794ec261ed61988ce4 GIT binary patch literal 22942 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.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 literal 0 HcmV?d00001 diff --git a/test/jpg/Broccoli_Super_Food.bw.jpg b/test/jpg/Broccoli_Super_Food.bw.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d1d0112224e7bbb6b78ef48bd5f1312ab4b2944 GIT binary patch literal 22616 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 literal 0 HcmV?d00001 diff --git a/test/jpg/Broccoli_Super_Food.color-corrected.jpg b/test/jpg/Broccoli_Super_Food.color-corrected.jpg new file mode 100644 index 0000000000000000000000000000000000000000..777ba5d552a9e8230c5bf9ef6a0b49a6bda0ace6 GIT binary patch literal 26431 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
5^D5*qPCz9|d3 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 literal 0 HcmV?d00001 diff --git a/test/jpg/Broccoli_Super_Food.horizontal-flip.jpg b/test/jpg/Broccoli_Super_Food.horizontal-flip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd61f73ad9d90e482d6f4ecb0a64d3e425cf1f2d GIT binary patch literal 23944 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 ULJ)uul?Xu+p&|iLgeVXH+0$Qz2><{9 literal 0 HcmV?d00001 diff --git a/test/jpg/Broccoli_Super_Food.lossy.jpg b/test/jpg/Broccoli_Super_Food.lossy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0a6d58128e26d9ff530dbed315799845ab1213c GIT binary patch literal 13053 zcmch7cUY6pv+oNCiUp-h73sbArbv_CdjRPKNPrM}R}kq^LT}OuO@t6SNbg8j0!Z&5 zRS+o$zrT8(dw%Did!M^W_Sv1x%#tsaXqW{s@N>2y2mZCQhQsY%~k+rc0zx09G==iAXTKPCyiCNP>lctmO68D0* zKy2U^bY2iAsGGQ#6#ZYy#c#@g$UO9Pf3d(FrRZh;v`S~Frb#F346~sV;^yVD;uYql z6XxUQ6A%;;5#glc=jG$&;pOMyVCbLvU;Jun;!03A zxCPY8MoCVJ{zd~g7;G&rC&ni$Cn78)EGEXw$0si!%KJiAOyC8dpn$LppOBpBKV;>c zt=u6tQ20M&t^Xw}{2yiiKmp=%)3Tfm4D4ZJtpIa|(Eatu;^6<>7lHq%@9(nK|G6)M z|529brZYT$2KL_u`X8hl^!zFQ6Sg;%e*)hIdV_Y@4Xm&C0D`~33Rt(@xDVDf1_%L& z2nYxs5s*H5L`q9SNJ7g%NlHq|Ku6x2nYyBi2e`aGBVd~0O1`h zQ>$($20RU_qEG(>lc|U-Sg>wrR@AeJxztaIMY@Az5k2*^S0RW^ZQ&J1*CZ+E-)z+Bg>D?MF#-MuQW z)&j$eqZ;!q%&85Ku%)R6fZY_2K>+6u9U%DsOMdm2q5sWNZkOX;JI2S0*8o%JSn@7t zIJo0n}4Umus%27;Tz!&H^r3c4|c8(hziA?&3qoT4n6I_u^spIbo2++{vPkEP+jRK zM!93MCut?81yxD1Ddn-B{k*4TqXK~8qKc;GV;ntRMdnFrxKHW#mo

}j>-o4s%Sic60kB)!H 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 TH-eIiZ5cr2O9CM9`rCg2TLn$f literal 0 HcmV?d00001 diff --git a/test/jpg/Broccoli_Super_Food.rotate5cw.jpg b/test/jpg/Broccoli_Super_Food.rotate5cw.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ed5ddbde641a47eb804240c5939f46b77f36f87 GIT binary patch literal 23819 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 literal 0 HcmV?d00001 diff --git a/test/test_phashion.rb b/test/test_phashion.rb index 3481a30..fa6079a 100644 --- a/test/test_phashion.rb +++ b/test/test_phashion.rb @@ -58,6 +58,8 @@ def test_duplicate_detection assert_duplicate images[0], images[2] end + + def test_duplicate_detection_2 files = %w(b32aade8c590e2d776c24f35868f0c7a588f51e1.jpeg df9cc82f5b32d7463f36620c61854fde9d939f7f.jpeg e7397898a7e395c2524978a5e64de0efabf08290.jpeg) images = files.map {|f| Phashion::Image.new("#{File.dirname(__FILE__) + '/../test/jpg/'}#{f}")} @@ -98,8 +100,80 @@ def test_fingerprint_png_is_different assert fingerprints.uniq.size == 3, "array should contain 3 unique fingerprints" end + + def test_duplicate_with_custom_distance_threshold + # note: this test depends on the smaller_jpg test still asserting a distance of 2 + # note-2: threshold is a :less-than, not a :less-than-or-equal-to comparison + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.100px.jpg') + + refute(jpg.duplicate?(jpg_x, threshold: 2)) + end + + + ### distance methods + def test_distance_from_jpg_to_png_dupe + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + png = Phashion::Image.new(File.dirname(__FILE__) + '/png/Broccoli_Super_Food.png') + + assert_equal(jpg.distance_from(png), 0) + end + + def test_distance_from_lossy_jpg + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.lossy.jpg') + + assert_equal(jpg.distance_from(jpg_x), 0) + end + + def test_distance_from_smaller_jpg + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.100px.jpg') + + assert_equal(jpg.distance_from(jpg_x), 2) + end + + def test_distance_from_color_correction + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.color-corrected.jpg') + + assert_equal(jpg.distance_from(jpg_x), 2) + end + + def test_distance_from_black_and_white + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.bw.jpg') + + assert_equal(jpg.distance_from(jpg_x), 2) + end + + def test_distance_from_bounding_box + # Control-image is cropped to remove empty whitespace around image details + # from 500x349 to 466x312 + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.bounding-box.jpg') + + assert_equal(jpg.distance_from(jpg_x), 12) + end + + def test_distance_from_rotation_of_5degrees_c2 + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.rotate5cw.jpg') + + assert_equal(jpg.distance_from(jpg_x), 14) + end + + + def test_distance_from_horizontal_flip + jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') + jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.horizontal-flip.jpg') + + assert_operator(jpg.distance_from(jpg_x), :>, Phashion::Image::DEFAULT_DUPE_THRESHOLD) + end + private + def assert_duplicate(a, b) assert a.duplicate?(b), "#{a.filename} not dupe of #{b.filename}" end From 1ae374a91faa47e8cf966123083c41d0da31a711 Mon Sep 17 00:00:00 2001 From: dannguyen Date: Mon, 30 Dec 2013 11:55:02 -0500 Subject: [PATCH 2/3] changed threshold operator from :< to :<= --- README.md | 32 +++++++++++++++++++++++++------- lib/phashion.rb | 2 +- test/test_phashion.rb | 5 +++-- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 6116fba..4e00409 100644 --- a/README.md +++ b/README.md @@ -37,27 +37,45 @@ Please open a [GitHub issue](https://github.com/westonplatter/phashion/issues/) - `libpng` - `libjpeg` -Common Error: `library not found for -ljpeg` ------------------------------ +#### Common Errors -If you have an error upon install, like: +You need to install `libjpeg` if you run into this error upon `gem install`: ld: library not found for -ljpeg -you need to install libjpeg. If you're on a Mac, you can use -[homebrew](http://brew.sh/) `brew install libjpeg` or -[ports](http://www.macports.org/) `port install jpeg` . +If you're on a Mac, you can use: + +- [Homebrew](http://brew.sh/) `brew install libjpeg` +- or [Macports](http://www.macports.org/) `port install jpeg` . Usage ----- +### Testing if one image is a duplicate of another + require 'phashion' img1 = Phashion::Image.new(filename1) img2 = Phashion::Image.new(filename2) img1.duplicate?(img2) --> true +Optionally, you can set the minimum Hamming distance in the second argument, an options Hash: + + img1.duplicate?(img2, :threshold => 5) + --> true + + img1.duplicate?(img2, :threshold => 0) + --> false + + +### Finding the Hamming distance between two images + + require 'phashion' + img1 = Phashion::Image.new(filename1) + img2 = Phashion::Image.new(filename2) + img1.distance_from(img2) + --> 6 ### Threshold for dupe-detection @@ -65,7 +83,7 @@ Currently, the maximum Hamming distance between two duplicate images is set at 1 > A “perceptual hash” is a 64-bit value based on the discrete cosine transform of the image’s frequency spectrum data. Similar images will have hashes that are close in terms of Hamming distance. That is, a binary hash value of 1000 is closer to 0000 than 0011 because it only has one bit different whereas the latter value has two bits different. The duplicate threshold defines how many bits must be different between two hashes for the two associated images to be considered different images. Our testing showed that 15 bits is a good value to start with, it detected all duplicates with a minimum of false positives. -As a reference point, here are the Hamming distances in these test comparisons using (/test/jpg/Broccoli_Super_Food.jpg)[https://github.com/westonplatter/phashion/blob/master/test/jpg/Broccoli_Super_Food.jpg] as the source image: +As a reference point, here are the Hamming distances in these test comparisons using [/test/jpg/Broccoli_Super_Food.jpg](https://github.com/westonplatter/phashion/blob/master/test/jpg/Broccoli_Super_Food.jpg) as the source image: | Variation | Hamming distance diff --git a/lib/phashion.rb b/lib/phashion.rb index d26def9..b8166c3 100644 --- a/lib/phashion.rb +++ b/lib/phashion.rb @@ -27,7 +27,7 @@ def distance_from(other) def duplicate?(other, opts={}) threshold = opts[:threshold] || DEFAULT_DUPE_THRESHOLD - distance_from(other) < threshold + distance_from(other) <= threshold end def fingerprint diff --git a/test/test_phashion.rb b/test/test_phashion.rb index fa6079a..25edc59 100644 --- a/test/test_phashion.rb +++ b/test/test_phashion.rb @@ -103,11 +103,12 @@ def test_fingerprint_png_is_different def test_duplicate_with_custom_distance_threshold # note: this test depends on the smaller_jpg test still asserting a distance of 2 - # note-2: threshold is a :less-than, not a :less-than-or-equal-to comparison + # note-2: threshold is a :less-than-or-equal-to comparison, which is a change from version 1.0.8 jpg = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.jpg') jpg_x = Phashion::Image.new(File.dirname(__FILE__) + '/jpg/Broccoli_Super_Food.100px.jpg') - refute(jpg.duplicate?(jpg_x, threshold: 2)) + refute(jpg.duplicate?(jpg_x, threshold: 1)) + assert(jpg.duplicate?(jpg_x, threshold: 2)) end From a721dda35ce519fffdde7be230428d894da38ede Mon Sep 17 00:00:00 2001 From: dannguyen Date: Tue, 31 Dec 2013 09:27:04 -0500 Subject: [PATCH 3/3] readme changed to remove graphicsmagic reference and to reorder sections --- README.md | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 4e00409..922308f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ Phashion ======== -Phashion is a Ruby wrapper around the pHash library, "perceptual hash", which -detects duplicate and near duplicate multimedia files (images, audio, video). -The wrapper currently only supports images. +Phashion is a Ruby wrapper around the [pHash library](http://phash.org/), "perceptual hash", which detects duplicate and near-duplicate multimedia files (e.g. images, audio, video, though Phashion currently only supports images.). "Near-duplicates" are images that come from the same source and show essentially the same thing, but may have differences in such features as dimensions, bytesizes, lossy-compression artifacts, and color levels. [See an overview of Phashion on Mike's blog] (http://www.mikeperham.com/2010/05/21/detecting-duplicate-images-with-phashion/). @@ -36,17 +34,22 @@ Please open a [GitHub issue](https://github.com/westonplatter/phashion/issues/) - `libpng` - `libjpeg` +- [imagemagick](http://www.imagemagick.org/) + +If you're on a Mac, you can use: + +- [Homebrew](http://brew.sh/), e.g. `brew install libjpeg` +- or [Macports](http://www.macports.org/), e.g. `port install jpeg` . + #### Common Errors -You need to install `libjpeg` if you run into this error upon `gem install`: - ld: library not found for -ljpeg -If you're on a Mac, you can use: +- `ld: library not found for -ljpeg` – You need to install `libjpeg` if you run into this error upon `gem install`: + -- [Homebrew](http://brew.sh/) `brew install libjpeg` -- or [Macports](http://www.macports.org/) `port install jpeg` . +- `.....sh: convert: command not found; sh: gm: command not found` – You need to install [imagemagick](http://www.imagemagick.org/). Usage @@ -115,21 +118,6 @@ detection of alpha PNG file types. Testing ------- -### Pre-requisites - -If you get an error like this: - - # Running tests: - - .....sh: convert: command not found - sh: gm: command not found - -– then you need to install [graphicsmagick](http://www.graphicsmagick.org/) and, optionally, [imagemagick](http://www.imagemagick.org/), if you want to get rid of the message related to `convert`. - -Using Homebrew: - - brew install graphicsmagick imagemagick - #### To run the test suite: