blob: 2910086078165e8238296c62ff6d22abac5cb2f8 [file] [log] [blame]
/*
* Copyright (C) 2021 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#if HAVE(VK_IMAGE_ANALYSIS)
#if USE(APPLE_INTERNAL_SDK)
#import <VisionKitCore/VKImageAnalysis_WebKit.h>
#import <VisionKitCore/VisionKitCore.h>
#else
#import <CoreGraphics/CoreGraphics.h>
#import <Foundation/Foundation.h>
#if PLATFORM(IOS_FAMILY)
#import <UIKit/UIKit.h>
#endif
NS_ASSUME_NONNULL_BEGIN
typedef int32_t VKImageAnalysisRequestID;
typedef NS_OPTIONS(NSUInteger, VKAnalysisTypes) {
VKAnalysisTypeText = 1 << 0,
VKAnalysisTypeTextDataDetector = 1 << 1,
VKAnalysisTypeMachineReadableCode = 1 << 2,
VKAnalysisTypeAppClip = 1 << 3,
VKAnalysisTypeVisualSearch = 1 << 4,
VKAnalysisTypeNone = 0,
VKAnalysisTypeAll = NSUIntegerMax,
};
#if PLATFORM(IOS_FAMILY)
typedef UIImage VKImageClass;
typedef UIImageOrientation VKImageOrientation;
#define VKImageOrientationUp UIImageOrientationUp
#define VKImageOrientationDown UIImageOrientationDown
#define VKImageOrientationLeft UIImageOrientationLeft
#define VKImageOrientationRight UIImageOrientationRight
#define VKImageOrientationUpMirrored UIImageOrientationUpMirrored
#define VKImageOrientationDownMirrored UIImageOrientationDownMirrored
#define VKImageOrientationLeftMirrored UIImageOrientationLeftMirrored
#define VKImageOrientationRightMirrored UIImageOrientationRightMirrored
#else
typedef NSImage VKImageClass;
typedef NS_ENUM(NSInteger, VKImageOrientation) {
VKImageOrientationUp,
VKImageOrientationDown,
VKImageOrientationLeft,
VKImageOrientationRight,
VKImageOrientationUpMirrored,
VKImageOrientationDownMirrored,
VKImageOrientationLeftMirrored,
VKImageOrientationRightMirrored,
};
#endif
@interface VKImageAnalysis : NSObject <NSSecureCoding>
- (BOOL)hasResultsForAnalysisTypes:(VKAnalysisTypes)analysisTypes;
@end
@protocol VKFeedbackAssetsProvider <NSObject>
- (BOOL)saveAssetsToFeedbackAttachmentsFolder:(NSURL *)attachmentsFolderURL error:(NSError *)error;
@end
@interface VKImageAnalyzerRequest : NSObject <NSCopying, VKFeedbackAssetsProvider>
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithImage:(VKImageClass *)image orientation:(VKImageOrientation)orientation requestType:(VKAnalysisTypes)analysisType;
- (instancetype)initWithCGImage:(CGImageRef)image orientation:(VKImageOrientation)orientation requestType:(VKAnalysisTypes)analysisType;
@end
@interface VKImageAnalyzerRequest (VI)
@property (nonatomic) NSURL *imageURL;
@property (nonatomic) NSURL *pageURL;
@end
@interface VKImageAnalyzer : NSObject
@property (nonatomic, strong, nullable) dispatch_queue_t callbackQueue;
- (VKImageAnalysisRequestID)processRequest:(VKImageAnalyzerRequest *)request progressHandler:(void (^_Nullable)(double progress))progressHandler completionHandler:(void (^)(VKImageAnalysis *_Nullable analysis, NSError *_Nullable error))completionHandler;
- (void)cancelAllRequests;
@end
@interface VKQuad : NSObject <NSCopying, NSSecureCoding>
@property (nonatomic, readonly) CGPoint topLeft;
@property (nonatomic, readonly) CGPoint topRight;
@property (nonatomic, readonly) CGPoint bottomLeft;
@property (nonatomic, readonly) CGPoint bottomRight;
@property (nonatomic, readonly) CGRect boundingBox;
@end
@interface VKWKTextInfo : NSObject
@property (nonatomic, readonly) NSString *string;
@property (nonatomic, readonly) VKQuad *quad;
@end
@interface VKWKLineInfo : VKWKTextInfo
@property (nonatomic, readonly) NSArray<VKWKTextInfo *> *children;
@end
@class DDScannerResult;
@interface VKWKDataDetectorInfo : NSObject
@property (nonatomic, readonly) DDScannerResult *result;
@property (nonatomic, readonly) NSArray<VKQuad *> *boundingQuads;
@end
@interface VKImageAnalysis (WebKitSPI)
@property (nonatomic, readonly) NSArray<VKWKLineInfo *> *allLines;
@property (nonatomic, readonly) NSArray<VKWKDataDetectorInfo *> *textDataDetectors;
#if HAVE(VK_IMAGE_ANALYSIS_FOR_MACHINE_READABLE_CODES)
@property (nonatomic) UIMenu *mrcMenu;
@property (nonatomic, nullable, weak) UIViewController *presentingViewControllerForMrcAction;
#endif
@end
NS_ASSUME_NONNULL_END
#endif
@interface VKWKLineInfo (Staging_85139101)
@property (nonatomic, readonly) BOOL shouldWrap;
@end
#if HAVE(VK_IMAGE_TRANSLATION_SUPPORT)
#if __has_include(<VisionKitCore/VKCImageAnalysisTranslation.h>)
#import <VisionKitCore/VKCImageAnalysisTranslation.h>
#else
@interface VKCTranslatedParagraph : NSObject
@property (nonatomic, readonly) VKQuad *quad;
@property (nonatomic, readonly) NSString *text;
@end
@interface VKCImageAnalysisTranslation : NSObject
@property (nonatomic, readonly) NSArray<VKCTranslatedParagraph *> *paragraphs;
@end
#endif
@interface VKCImageAnalysis (Staging_93280734)
- (void)translateFrom:(NSString *)sourceLanguage to:(NSString *)targetLanguage withCompletion:(void (^)(VKCImageAnalysisTranslation *translation, NSError *))completion;
@end
@interface VKCTranslatedParagraph (Staging_93280734)
@property (nonatomic, readonly) BOOL isPassthrough;
@end
#endif // HAVE(VK_IMAGE_TRANSLATION_SUPPORT)
#if ENABLE(IMAGE_ANALYSIS_ENHANCEMENTS)
#if __has_include(<VisionKitCore/VKImageClass_Private.h>)
#import <VisionKitCore/VKImageClass_Private.h>
#else
typedef void (^VKCGImageRemoveBackgroundCompletion)(CGImageRef, CGRect cropRect, NSError *);
extern void vk_cgImageRemoveBackground(CGImageRef, BOOL cropToFit, VKCGImageRemoveBackgroundCompletion);
#endif
#if __has_include(<VisionKitCore/VKCRemoveBackgroundRequestHandler.h>)
#import <VisionKitCore/VKCRemoveBackgroundRequest.h>
#import <VisionKitCore/VKCRemoveBackgroundRequestHandler.h>
#import <VisionKitCore/VKCRemoveBackgroundResult.h>
#else
@interface VKCRemoveBackgroundResult : NSObject
@property (nonatomic, readonly) CGRect cropRect;
- (CGImageRef)createCGImage;
@end
@interface VKCRemoveBackgroundRequest : NSObject
- (instancetype)initWithCGImage:(CGImageRef)image;
@property (nonatomic, readonly) CGImageRef CGImage;
@end
@interface VKCRemoveBackgroundRequestHandler : NSObject
- (void)performRequest:(VKCRemoveBackgroundRequest *)request completion:(void (^)(VKCRemoveBackgroundResult *result, NSError *error))completion;
@end
#endif
#endif // ENABLE(IMAGE_ANALYSIS_ENHANCEMENTS)
#endif // HAVE(VK_IMAGE_ANALYSIS)