- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 CIDetector 从 UIImage 中检测 QRCode,以便从中提取 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
我做错了什么吗?
提前致谢
最佳答案
问题是你在函数中传递了 CIImage
func scanImage(image: CIImage)
然后你在
中添加另一个带有未定义图像的图像变量var image = CIImage(image: uiimage)
去掉这一行应该就可以了我正在为自己写一个二维码,如果你有兴趣可以看看。
// 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)
}
希望对你有帮助
关于ios - CIDetector 未检测到 QRCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34981112/
我正在使用 CIDetector 检测 UIImage 中的人脸。我正确地得到了面部矩形,但是当我将图像裁剪为检测到的面部矩形时。它没有显示在我的 ImageView 中。 我已经检查过了。我的形象不
现在我知道坐标系统搞砸了。我试过反转 View 和 imageView,没有。然后我尝试反转特征的坐标,但我仍然遇到同样的问题。我知道它检测到面部、眼睛和嘴巴,但是当我尝试从样本代码中放置覆盖框时,它
我正在查看 CIDetectorTypeQRCode。如何检测其他类型的条码?我可以通过 AVMetadataObjectType 读取其他条形码类型,但是我想用 CIDetector 做同样的事情。
CIDetector 无法检测到最大的矩形。左图为原始图像,右图为矩形检测图像。它没有检测到完整的矩形。我该如何解决? - (CIDetector *)highAccuracyRectangleDet
在尝试使用 CIDetector 检测人脸时减少计算时间时,我尝试按照 Apple 的建议重用单个检测器实例进行多个人脸检测: This class can maintain many state v
我正在练习使用一些 swift 2,但在使用 CIDetector 时遇到了一些困难。 我有一个应用程序,里面有一系列图片;三个不同的矩形和三张不同的人物/团体照片。我只是在这些图像上尝试 CIDet
我正在尝试使用 CIDetector 从 UIImage 中检测 QRCode,以便从中提取 messageString。 我有一个基本上接收 UIImage 作为输入并返回解码的 messageSt
我正在尝试实现内置的 iOS 5 人脸检测 API。我正在使用 UIImagePickerController 的实例来允许用户拍照,然后我尝试使用 CIDetector 来检测面部特征。不幸的是,f
我正在开发一个应用程序,我必须在其中检测左眼、右眼和嘴巴的位置。我的 self.view 上有一个 imageView 并且 imageView 包含一个面部图像,现在我想要同时获取眼睛和嘴巴的坐标。
所以我尝试在 Swift 中使用 CIDetector 制作一个文本检测器。当我将手机指向一段文字时,它没有检测到它。但是,如果我将手机转到一边,它就会工作并检测到文本。我怎样才能改变它,以便它在正确
我多次使用 CIDetector 如下: -(NSArray *)detect:(UIImage *)inimage { UIImage *inputimage = i
我试图让我的应用程序的用户能够从他们的库中获取图像并扫描其中的 QRCode。相关代码如下: 这是从图像选择器返回所选图像的函数。 func imagePickerController(picker:
我正在尝试使用核心检测器获取图像上的文本区域。 - (NSArray *)detectWithImage:(UIImage *)img { // prepare CIImage CII
我正在尝试使用 CIDetector 检测 Rectangle。 我使用的代码来自:https://www.cocoacontrols.com/controls/vnimagescanner 我的问题
我想从实时摄像头和图像中扫描二维码和条形码。我以前使用 ZBar 库来扫描代码。它不扫描特定类型的二维码和条形码。此外,Apple 的 AVFoundation 框架在从实时摄像头扫描代码时似乎更加快
我在我的应用程序中实现了一个 CIDetector 来检测图像上的矩形,但现在我如何使用返回的 CGPoint 来裁剪图像,以便我可以把它显示回来吗? 对于透视,我已经尝试应用 CIPerspecti
我不知道为什么我得到的 CIFaceFeature 总是返回零矩形: import Cocoa import QuartzCore let url = NSURL(string:"http://cs6
我不明白为什么这段代码不起作用,检测器对于 CIDetectorTypeQRCode 常量始终为零,一切都与 CIDetectorTypeFace 一起工作。我怀疑来自 Apple API 的错误。这
我正在尝试用相机拍照,然后检测其中的人脸。但它不起作用... results 数组返回的计数为零。我用一张来自互联网的人的照片测试了这段代码,它返回了 1 张找到的脸。这是我的代码: // MARK:
在为面部或矩形识别设置 CIDetector 时,应该如何使用 CIDetectorMinFeatureSize? description at Apple什么都没告诉我: A key used to
我是一名优秀的程序员,十分优秀!