ios आईओएस रीयलटाइम में बिजनेस कार्ड के कोनों को निर्धारित करें



image-processing crop (1)

Hough ट्रांसफ़ॉर्म के बारे में पढ़ें इसके साथ, आप लाइनों का पता लगा सकते हैं मैं आपको सीधा रेखाओं का पता लगाने के लिए आग्रह करता हूं और फिर चार पंक्तियां खोजता हूं जो लगभग एक दूसरे को सही कोण पर होती हैं और सबसे बड़ी क्षेत्र के साथ आयताकार लेती हैं।

ये कदम होंगे:

  1. सोबेल फिल्टर का उपयोग करके एज पहचान
  2. छवि में सभी सीधी रेखाएं ढूंढने के लिए हाफ़ ट्रांसफ़ॉर्म।
  3. सभी समांतर रेखाओं को देखो और फिर सभी समानांतर रेखा के जोड़े के लिए सभी लाइनें 90 डिग्री, संभव आयतों को खोजने के लिए।
  4. आप जिस आयत को सबसे अच्छा पसंद करते हैं उसे चुनें यह क्षेत्र के आधार पर हो सकता है, या फोन से सबसे अच्छी तरह से जुड़ा हो सकता है, या आपको यह अपेक्षा की जा सकती है कि सभी किनारों को दृश्यमान कैमरा छवि के अंदर या किसी अन्य विधि के अंदर है।

अंत में: कंप्यूटर विजन मुश्किल है ... आसान परिणामों की अपेक्षा न करें।

परिशिष्ट

मुझे यह ध्यान रखना चाहिए कि उपरोक्त चरण 3 बहुत सरल है, क्योंकि कोण की रेखाएं आपके हफ़ स्पेस के एक आयाम हैं तो समानांतर रेखाएं इस आयाम के समान मूल्यों में होंगी, और ओर्थोगोनल लाइनों को पीआई या 90 डिग्री से स्थानांतरित कर दिया जाएगा।

मैं इस ऐप ( https://scanbot.io ) जैसी कार्यक्षमता का पता लगाने के लिए एक व्यवसाय कार्ड को लागू करना चाहता हूं। कैमरे को एक व्यवसाय कार्ड का पता लगाना चाहिए और इसे स्वचालित रूप से एक तस्वीर लेनी चाहिए (केवल व्यवसाय कार्ड)।

मेरा विचार BradLarson's GPUImage लाइब्रेरी BradLarson's GPUImage उपयोग कर रहा था, कोनों को पता लगाता है (हैरिस कोने का पता लगाने एल्गोरिदम का उपयोग करके), कोने के साथ सबसे बड़ी आयत की गणना और आयत के अंदर स्थित छवि को क्रॉप करें।

यहां मेरा कोड है:

 - (void)setupFilter {
    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];

    filter = [[GPUImageHarrisCornerDetectionFilter alloc] init];
    [(GPUImageHarrisCornerDetectionFilter *)filter setThreshold:0.01f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setSensitivity:0.5f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setBlurRadiusInPixels:2.0f];

    [videoCamera addTarget:filter];
    videoCamera.runBenchmark = YES;
    GPUImageView *filterview = [[GPUImageView alloc] init];
    self.view=filterview;

    GPUImageCrosshairGenerator *crosshairGenerator = [[GPUImageCrosshairGenerator alloc] init];
    crosshairGenerator.crosshairWidth = 22.0;
    [crosshairGenerator forceProcessingAtSize:CGSizeMake(480.0, 640.0)];

    [(GPUImageHarrisCornerDetectionFilter *)filter setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime) {
        [crosshairGenerator renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
    }];

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    [blendFilter forceProcessingAtSize:CGSizeMake(480.0, 640.0)];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
    [videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:blendFilter];

    [crosshairGenerator addTarget:blendFilter];
    [blendFilter addTarget:filterview];

    [videoCamera startCameraCapture];

}

समस्या यह है कि मैं कोनों को पाने के लिए संपत्ति को threshold और sensibility एट्रिब्यूट्स को कैसे समायोजित करने के बारे में नहीं जानता (अब मैं छवि में सभी ऑब्जेक्ट्स के कोनों को प्राप्त कर रहा हूं)।

मुझे यह भी नहीं पता है कि इस GLfloat* cornerArray साथ कैसे काम किया GLfloat* cornerArray

मुझे नहीं पता कि क्या मैं सही तरीके से हूं ... इस कार्यक्षमता को कैसे कार्यान्वित करें या कोई मौजूदा पुस्तकालय है?

धन्यवाद!





gpuimage