CocoaImageHashing

repository·master·Indexed 42 days ago

https://github.com/ameingast/cocoaimagehashing

A Swift/Objective-C framework for perceptual image hashing on macOS, iOS, tvOS, and watchOS. It enables the creation of image fingerprints to find duplicates, match similar images, or sort image sets using algorithms such as aHash, dHash, and pHash via the OSImageHashing class.

Tokens
1.3K
Snippets
6
Records
8
Agent score
4%

What's inside CocoaImageHashing

  1. Install CocoaImageHashing via Carthage

    master

    To use Carthage, create a Cartfile with the following entry:

    github "ameingast/cocoaimagehashing" ~> 1.9.0

    Then follow the standard Carthage workflow:

    1. Run carthage update.
    2. Drag the framework from Carthage/Build into Linked Frameworks on the General tab of your target.
    3. Add carthage copy-frameworks to a Run Scripts phase.
  2. Sort an array of images by similarity to a base image

    master

    You can sort an NSArray of image data based on how similar each image is to a provided base image using sortedArray(usingImageSimilartyComparator:for:for:).

    import CocoaImageHashing
    
    let baseImage = Data()
    let images = [Data(), Data(), Data()]
    let sortedImages = imageHashing.sortedArray(usingImageSimilartyComparator: baseImage, 
                                                for: images, 
                                                for: .pHash)
    print("Sorted images", sortedImages)
  3. Use OSImageHashing to compare image similarity

    master

    The OSImageHashing class is the primary entrypoint. You can compare two images (provided as NSData, NSImage, or UIImage) to see if they are perceptually similar using a specific hashing algorithm (e.g., .pHash).

    import CocoaImageHashing
    
    let firstImageData = Data()
    let secondImageData = Data()
    let result = OSImageHashing.sharedInstance().compareImageData(firstImageData,
                                                                  to: secondImageData,
                                                                  with: .pHash)
    print("Match", result)
  4. Find similar images in a collection

    master

    The framework provides methods to concurrently find similar elements within an array or a data stream. This is useful for de-duplication or finding matches in large datasets.

    import CocoaImageHashing
    
    var imageData = [Data(), Data(), Data()]
    let similarImages = imageHashing.similarImages(withProvider: .pHash) { 
        if imageData.count > 0 {
            let data = imageData.removeFirst()
            return OSTuple<NSString, NSData>(first: name as NSString, 
                                             andSecond: data as NSData)
        } else {
            return nil
        }
    }
    print("Similar Images", similarImages)
  5. Measure distance between two fingerprints

    master

    You can calculate the perceptual distance between two existing fingerprints (OSHashType) using hashDistance. This is useful for quantifying how similar two images are.

    import CocoaImageHashing
    
    let lhsData = OSImageHashing.sharedInstance().hashImageData(Data(), with: .pHash)
    let rhsData = OSImageHashing.sharedInstance().hashImageData(Data(), with: .pHash)
    let result = OSImageHashing.sharedInstance().hashDistance(lhsData, to: rhsData, with: .pHash)
    print("Distance", result)
  6. Reference: CocoaImageHashing Core Types

    master

    The framework uses the following fundamental types for its API:

    NameBitsizeDescription
    OSHashType64The result or fingerprint of a perceptual hashing function
    OSHashDistanceType64The distance between two fingerprints
    OSImageHashingProviderId16The API representation of a hashing algorithm
    OSImageHashingQuality16The API representation of a hashing algorithm described by its hashing quality