如何使用iOS swift将图像转换为文本?

时间:2018-03-07 07:40:54

标签: ios swift ocr tesseract swiftocr

如何使用iOS swift将图像转换为文本?

步骤01:使用iOS相机拍照。 (在iOS swift中使用UIImagePickerController完成)

步骤02:我得到了图像。

步骤03:我必须将这些图像(UIImage)转换为文本格式。

使用iOS swift。

我已经引用了许多链接,因为我们已经有了VNDetectTextRectanglesRequest来识别字符框。

但我的目的是如何将图像转换为文本。不是使用iOS swift的矩形框

5 个答案:

答案 0 :(得分:0)

如果您需要将图像转换为OCR文本,则可以使用以下链接: -

OCR没有内置库,但您可以使用以下链接

1)开源OCR - Tesseract http://code.google.com/p/tesseract-ocr/ - 完全免费,但不太准确。

此链接将显示如何在iPhone中运行:https://github.com/nolanbrown/Tesseract-iPhone-Demo

2)商业OCR - http://abbyy.com/mobileocr/iphone - 高度准确,客户支持等,但需要花钱。

答案 1 :(得分:0)

我想你谈的是从图像中提取文本一个叫做cOCR“光学字符识别”的过程

阅读:https://en.wikipedia.org/wiki/Optical_character_recognition IOS没有内置的OCR SDK /库

我强烈建议您查看由Google维护的开源OCR引擎Tesseract。 https://github.com/tesseract-ocr/tesseract

你也可以在这里找到一篇完整的swift4文章

https://www.raywenderlich.com/163445/tesseract-ocr-tutorial-ios

还记得在OCR处理之前捕获高质量图片。

答案 2 :(得分:0)

如果您需要识别图像中的文字,那么您可以参考:

1)Tesseract OCR:https://github.com/cconstable/OCR-iOS-Example

2)ABBYY:http://abbyy.com/mobileocr/iphone

3)Google Cloud Vision:https://cloud.google.com/vision/

根据图像分辨率,字体,文字颜色等,Tesseract OCR更准确。

答案 3 :(得分:0)

使用CoreML的VNDetectTextRectanglesRequest,您只能在图像中找到可见文本的区域。并且,这还不足以使用swift从图像中获取文本。

第一步是裁剪图像,您需要在VNTextObservation中裁剪每个图像的图像。像

    for textObservation in textObservations {
        guard let rects = textObservation.characterBoxes else {
            continue
        }
        var xMin = CGFloat.greatestFiniteMagnitude
        var xMax: CGFloat = 0
        var yMin = CGFloat.greatestFiniteMagnitude
        var yMax: CGFloat = 0
        for rect in rects {

            xMin = min(xMin, rect.bottomLeft.x)
            xMax = max(xMax, rect.bottomRight.x)
            yMin = min(yMin, rect.bottomRight.y)
            yMax = max(yMax, rect.topRight.y)
        }
       let imageRect = CGRect(x: xMin * size.width, y: yMin * size.height, width: (xMax - xMin) * size.width, height: (yMax - yMin) * size.height)

第二步是将图像发送到Opencv等图像处理工具,有一些关于如何与iOS集成的在线教程,如果你想在swift中使用它,你可以使用objective-c标题。 https://medium.com/pharos-production/using-opencv-in-a-swift-project-679868e1b798

一旦你得到了加工图像,第三步就是尼克所提到的 然后使用tesseract或ABBYY SDK。

Tesseract可以免费使用,你可以找到tesseract 3.03-rc1 here的iOS框架。您需要了解OCR工具最重要的是语言。您尝试转换的语言是什么?检测到的图像有什么语言?大多数情况下,您在tesseract repository中获得了多种语言的训练数据。在摘要中,工作流程将是,

图像捕获 - >图像处理 - > OCR流程

答案 4 :(得分:-1)

有几种方法可行。

  1. 如果您只想将现有的UITextFieldUITextViewUILabel呈现为图片,则可以使用传统的快照方法,例如:< / p>

       func image(for view: UIView) -> UIImage {
    
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0)
    
     if view.responds(to: Selector("drawViewHierarchyInRect:afterScreenUpdates:")) {
    
     view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
     }
     else {
    
    if let aContext = UIGraphicsGetCurrentContext() {
        view.layer.render(in: aContext)
    }
         }
    

    // ...否则,回到尝试过的真实方法

     let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
    
     UIGraphicsEndImageContext()
    
      return image ?? UIImage()
    
            }
    
  2. 如果您想要一个通用的“从文本创建图像”例程,在iOS 7中,它看起来像:

       func image(from string: String, attributes: [AnyHashable: Any], size: CGSize) -> UIImage {
    
           UIGraphicsBeginImageContextWithOptions(size, false, 0)
         string.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height), withAttributes: attributes)
    
          let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
    
         UIGraphicsEndImageContext()
    
      return image ?? UIImage()
     }
    

    以上将创建一个图像,其大小将根据文本而变化。显然,如果你只想要一个固定大小的图像,那么使用常量frame,而不是动态构建它。

    无论如何,你可以像上面那样使用上面的内容:

    NSString *string = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    
        var attributes = [NSFontAttributeName: UIFont.systemFont(ofSize: 20), NSForegroundColorAttributeName: UIColor.blue, NSBackgroundColorAttributeName: UIColor.clear]
    
     var image: UIImage? = image(fromString: string, attributes: attributes, size: imageView?.bounds.size)
    
  3. var you:如果您需要支持早期的iOS版本?

          var image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
    
        func UIGraphicsEndImageContext() {
            }
    

    每种方法都有很多种排列。这取决于你想要达到的目标。

    另一种方法是在视图中同时拥有UIImageViewUILabel / UITextView个对象,如果您有来自服务器的图像,请设置{{1 }和文字,设置UIImageView / text的{​​{1}}。