2012-08-07 14 views
7

संभव डुप्लिकेट:
An iPhone library for shape recognition via the cameraकैसे iphone क्षुधा में छवि मान्यता करने के लिए

मैं iPhone मोबाइल डेवलपर एप्लिकेशन हूँ और मेरा अनुप्रयोग में से एक में एकीकृत करने के लिए छवि मान्यता पुस्तकालयों रहा हूँ जो Google की गॉगल कार्यक्षमता की तरह काम करना चाहिए।

मैं https://www.iqengines.com/ को देखा और अपने iOS SDK downlaoded और यह अच्छी तरह से काम किया। लेकिन यह मुफ्त संस्करण नहीं है। मैं ओपन सोर्स एसडीके की तलाश में हूं।

यह भी पूरा करने में opencv उपयोगी कैसे है? OpenCV पर रीडायरेक्ट करने वाले कुछ स्रोतों का उपयोग करें।

कृपया मुझे बताएं कि कोई भी इस पर आ गया है या नहीं। धन्यवाद

+0

आपका अंतिम लक्ष्य क्या है? आप छवियों पर क्या पहचानना चाहते हैं? – holex

+0

हाय होलेक्स, मैं इस तरह की छवि का पता लगाना चाहता हूं जैसे कि मैंने नाइके छवि पर कब्जा कर लिया है, तो छवि पहचान का परिणाम नाइकी होना चाहिए जो परिणाम के साथ Google खोज पर जा सकता है। Google ios ऐप में गोगल्स कार्यक्षमता की तरह ही। धन्यवाद – ratnasomu

+0

छवि पहचान करना एक बहुत ही जटिल कार्य है, लेकिन लिंक किए गए प्रश्न में प्रदान किया गया सुझाव शुरू करने के लिए एक अच्छी जगह है। छवि पहचान के लिए ओपनसीवी का उपयोग करने के अन्य संसाधनों के लिए, प्रश्न के जवाब कार्लफिलिप का जवाब देखें [आकार पहचानने पर आईफोन ओपनसीवी के लिए ट्यूटोरियल] (http://stackoverflow.com/questions/5738792/tutorial-for-iphone-opencv-on-shape- मान्यता देना) –

उत्तर

8

हाँ, OpenCV iOS पर काम करता है और उपकरणों का उपयोग करने का एक अच्छा पुस्तकालय के साथ प्रदान करेगा। आप या तो अपना खुद का .framework (थोड़ा थकाऊ) बना सकते हैं या इंटरनेट में से किसी एक को डाउनलोड कर सकते हैं।

  • , एक निर्माण करने के लिए this OpenCV guide
  • का उल्लेख आप पहले से बने ढांचे डाउनलोड करने के लिए चाहते हैं, head over there

उसके बाद, आप iOS पर कंप्यूटर दृष्टि सॉफ्टवेयर का निर्माण करने में सक्षम होना चाहिए, हो सकता है सावधान हालांकि, छवि प्रसंस्करण बहुत सारी शक्ति और स्मृति ले सकता है।

OpenCV, छवियों के लिए अपने स्वयं के सी ++ वर्ग हैं तो आप शायद, आप के लिए पर्याप्त खोजना चाहिए इनपुट और प्रदर्शित करने के लिए UIImage को आगे और पीछे उन्हें बदलने के लिए

मैं यहाँ कोड मैं NSImage के लिए उपयोग के इस टुकड़े छोड़ आवश्यकता होगी आप UIImage

// 
// NSImage+OpenCV.h 
// 

#import <AppKit/AppKit.h> 

@interface NSImage (NSImage_OpenCV) { 

} 

+(NSImage*)imageWithCVMat:(const cv::Mat&)cvMat; 
-(id)initWithCVMat:(const cv::Mat&)cvMat; 

@property(nonatomic, readonly) cv::Mat CVMat; 
@property(nonatomic, readonly) cv::Mat CVGrayscaleMat; 

@end 

और

// 
// NSImage+OpenCV.mm 
// 

#import "NSImage+OpenCV.h" 

static void ProviderReleaseDataNOP(void *info, const void *data, size_t size) 
{ 
    return; 
} 


@implementation NSImage (NSImage_OpenCV) 

-(CGImageRef)CGImage 
{ 
    CGContextRef bitmapCtx = CGBitmapContextCreate(NULL/*data - pass NULL to let CG allocate the memory*/, 
                [self size].width, 
                [self size].height, 
                8 /*bitsPerComponent*/, 
                0 /*bytesPerRow - CG will calculate it for you if it's allocating the data. This might get padded out a bit for better alignment*/, 
                [[NSColorSpace genericRGBColorSpace] CGColorSpace], 
                kCGBitmapByteOrder32Host|kCGImageAlphaPremultipliedFirst); 

    [NSGraphicsContext saveGraphicsState]; 
    [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:bitmapCtx flipped:NO]]; 
    [self drawInRect:NSMakeRect(0,0, [self size].width, [self size].height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0]; 
    [NSGraphicsContext restoreGraphicsState]; 

    CGImageRef cgImage = CGBitmapContextCreateImage(bitmapCtx); 
    CGContextRelease(bitmapCtx); 

    return cgImage; 
} 


-(cv::Mat)CVMat 
{ 
    CGImageRef imageRef = [self CGImage]; 
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef); 
    CGFloat cols = self.size.width; 
    CGFloat rows = self.size.height; 
    cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels 

    CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,     // Pointer to backing data 
                cols,      // Width of bitmap 
                rows,      // Height of bitmap 
                8,       // Bits per component 
                cvMat.step[0],    // Bytes per row 
                colorSpace,     // Colorspace 
                kCGImageAlphaNoneSkipLast | 
                kCGBitmapByteOrderDefault); // Bitmap info flags 

    CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imageRef); 
    CGContextRelease(contextRef); 
    CGImageRelease(imageRef); 
    return cvMat; 
} 

-(cv::Mat)CVGrayscaleMat 
{ 
    CGImageRef imageRef = [self CGImage]; 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 
    CGFloat cols = self.size.width; 
    CGFloat rows = self.size.height; 
    cv::Mat cvMat = cv::Mat(rows, cols, CV_8UC1); // 8 bits per component, 1 channel 
    CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,     // Pointer to backing data 
                cols,      // Width of bitmap 
                rows,      // Height of bitmap 
                8,       // Bits per component 
                cvMat.step[0],    // Bytes per row 
                colorSpace,     // Colorspace 
                kCGImageAlphaNone | 
                kCGBitmapByteOrderDefault); // Bitmap info flags 

    CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imageRef); 
    CGContextRelease(contextRef); 
    CGColorSpaceRelease(colorSpace); 
    CGImageRelease(imageRef); 
    return cvMat; 
} 

+ (NSImage *)imageWithCVMat:(const cv::Mat&)cvMat 
{ 
    return [[[NSImage alloc] initWithCVMat:cvMat] autorelease]; 
} 

- (id)initWithCVMat:(const cv::Mat&)cvMat 
{ 
    NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()]; 

    CGColorSpaceRef colorSpace; 

    if (cvMat.elemSize() == 1) 
    { 
     colorSpace = CGColorSpaceCreateDeviceGray(); 
    } 
    else 
    { 
     colorSpace = CGColorSpaceCreateDeviceRGB(); 
    } 

    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); 

    CGImageRef imageRef = CGImageCreate(cvMat.cols,          // Width 
             cvMat.rows,          // Height 
             8,            // Bits per component 
             8 * cvMat.elemSize(),       // Bits per pixel 
             cvMat.step[0],         // Bytes per row 
             colorSpace,          // Colorspace 
             kCGImageAlphaNone | kCGBitmapByteOrderDefault, // Bitmap info flags 
             provider,          // CGDataProviderRef 
             NULL,           // Decode 
             false,           // Should interpolate 
             kCGRenderingIntentDefault);      // Intent 


    NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:imageRef]; 
    NSImage *image = [[NSImage alloc] init]; 
    [image addRepresentation:bitmapRep]; 

    CGImageRelease(imageRef); 
    CGDataProviderRelease(provider); 
    CGColorSpaceRelease(colorSpace); 

    return image; 
} 

@end 

के लिए एक सा कोड बदलने के लिए (+०१२३४०००४१)

संबंधित मुद्दे