为了从UIImage中提取messageString,我尝试使用CIDetector从CIDetector中检测出messageString。
我有一个函数,它基本上接收一个UIImage作为输入,并返回解码的messageString。
我传递给这个函数的UIImage是使用PHAsset、PHAssetCollection、PHImageRequestOptions等从用户库中提取出来的。请求是同步提出的,我得到的所有图像质量都很好(为了确保图像的可读性,我尝试在UIImageView中呈现图像)。
在这里,您可以看到请求图像的代码片段:
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,并使用以下代码:
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的教程
我做错了什么吗?
提前感谢
发布于 2016-04-04 17:43:40
问题是您要在函数中传递CIImage
func scanImage(image: CIImage)中添加另一个具有未定义图像的图像变量。
var image = CIImage(image: uiimage)删除这一行,这应该是可以的,我正在为自己编写一个QRCode,如果您感兴趣,您可以查看它。
// 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
// 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)
}希望这会有帮助
https://stackoverflow.com/questions/34981112
复制相似问题