首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIDetector未检测到QRCodes

CIDetector未检测到QRCodes
EN

Stack Overflow用户
提问于 2016-01-24 20:33:35
回答 1查看 2K关注 0票数 1

为了从UIImage中提取messageString,我尝试使用CIDetector从CIDetector中检测出messageString。

我有一个函数,它基本上接收一个UIImage作为输入,并返回解码的messageString。

我传递给这个函数的UIImage是使用PHAsset、PHAssetCollection、PHImageRequestOptions等从用户库中提取出来的。请求是同步提出的,我得到的所有图像质量都很好(为了确保图像的可读性,我尝试在UIImageView中呈现图像)。

在这里,您可以看到请求图像的代码片段:

代码语言:javascript
复制
let _: PHImageRequestID = PHImageManager.defaultManager().requestImageForAsset(asset as! PHAsset, targetSize: size, contentMode: PHImageContentMode.AspectFit, options: options, resultHandler: { (image: UIImage?, info:[NSObject : AnyObject]?) -> Void in
                    images.append(image!)
                })

获取图像后,我想检测QRCodes,并使用以下代码:

代码语言:javascript
复制
func scanImage(image: CIImage) -> String {

    let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])
    var image = CIImage(image: uiimage)

    var decode = ""
    let features = detector.featuresInImage(image!)
    for feature in features as! [CIQRCodeFeature] {
        decode = feature.messageString
    }
    return decode
}

我发现了这个(Core Image Detector(CIDetector) is not detecting QRCodes)和其他类似的问题,但它们似乎都不起作用。

这是我遵循https://www.shinobicontrols.com/blog/ios8-day-by-day-day-13-coreimage-detectors的教程

我做错了什么吗?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 17:43:40

问题是您要在函数中传递CIImage

代码语言:javascript
复制
func scanImage(image: CIImage)

中添加另一个具有未定义图像的图像变量。

代码语言:javascript
复制
var image = CIImage(image: uiimage)

删除这一行,这应该是可以的,我正在为自己编写一个QRCode,如果您感兴趣,您可以查看它。

代码语言:javascript
复制
// open photo library 
func loadGallery() {
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .PhotoLibrary
    self.presentViewController(imagePicker,
        animated: true,
        completion: nil)
}

// read QRCode from selecting image
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let qrImg:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    if #available(iOS 8.0, *) {
        let detector:CIDetector = CIDetector(ofType: CIDetectorTypeQRCode, context:nil, options:[CIDetectorAccuracy: CIDetectorAccuracyHigh])
        let ciimg: CIImage = CIImage(image: qrImg)!
        let features = detector.featuresInImage(ciimg)

        for feature in features as! [CIQRCodeFeature] {
            print(feature.messageString)
        }


    } else {
        // Fallback on earlier versions
    }

    dismissViewControllerAnimated(true, completion: nil)
}

更新到Swift 3 xcode 8.1

代码语言:javascript
复制
// read QRCode from selecting image
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {


    let qrImg:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    if #available(iOS 8.0, *) {
        let detector:CIDetector = CIDetector(ofType: CIDetectorTypeQRCode, context:nil, options:[CIDetectorAccuracy: CIDetectorAccuracyHigh])!
        let ciimg: CIImage = CIImage(image: qrImg)!
        let features = detector.features(in: ciimg)

        for feature in features as! [CIQRCodeFeature] {
            print(feature.messageString!)
        }


    } else {
        // Fallback on earlier versions
    }
    dismiss(animated: true, completion: nil)
}

希望这会有帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34981112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档