Skip to content

Instantly share code, notes, and snippets.

@bulentsiyah
Last active July 5, 2018 21:25
Show Gist options
  • Select an option

  • Save bulentsiyah/38febcaa7116ca0deff4bbd96c5ad95d to your computer and use it in GitHub Desktop.

Select an option

Save bulentsiyah/38febcaa7116ca0deff4bbd96c5ad95d to your computer and use it in GitHub Desktop.

Revisions

  1. bulentsiyah revised this gist Jul 5, 2018. No changes.
  2. bulentsiyah created this gist Jul 5, 2018.
    125 changes: 125 additions & 0 deletions IleriMetinTanimaViewController.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,125 @@
    //
    // IleriMetinTanimaViewController.swift
    // ML Ornekleri
    //
    // Created by Bülent Siyah on 5.07.2018.
    // Copyright © 2018 Bülent Siyah. All rights reserved.
    //

    import UIKit
    import Vision
    import TesseractOCR

    class IleriMetinTanimaViewController: UIViewController , UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var imageView: UIImageView!

    @IBOutlet weak var txtResult: UITextView!
    var imagePicker: UIImagePickerController!
    var userPickedImage: UIImage?

    override func viewDidLoad() {
    super.viewDidLoad()

    imagePicker = UIImagePickerController()
    imagePicker.delegate = self

    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
    imageView.contentMode = .scaleAspectFit
    imageView.image = pickedImage
    self.userPickedImage = pickedImage
    }

    dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
    }

    @IBAction func btnResimCek(_ sender: Any) {
    imagePicker.allowsEditing = false
    imagePicker.sourceType = .photoLibrary
    present(imagePicker, animated: true, completion: nil)
    }

    @IBAction func btnAnalizEt(_ sender: Any) {

    findText()
    recognizeTextImage()
    }

    func findText() {

    // VN Request Rectangles (faces / Text)

    var textLayers: [CAShapeLayer] = []
    let textDetectionRequest = VNDetectTextRectanglesRequest(completionHandler: { (request, error) in

    guard let observations = request.results as? [VNTextObservation] else {
    fatalError("unexpected results")
    }

    //self.addShapesToText
    textLayers = self.addShapesToText(forObservations: observations, withImageView: self.imageView)

    })

    if let image = self.imageView.image, let cgImage = image.cgImage {

    let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])

    guard let _ = try? handler.perform([textDetectionRequest]) else {
    return print("could not perform the text detection request")
    }

    for layer in textLayers {
    self.imageView.layer.addSublayer(layer)
    }

    }

    }

    func addShapesToText(forObservations observations: [VNTextObservation], withImageView textImageView: UIImageView) -> [CAShapeLayer] {

    let layers: [CAShapeLayer] = observations.map {observation in

    let w = observation.boundingBox.size.width * textImageView.bounds.width
    let h = observation.boundingBox.size.height * textImageView.bounds.height
    let x = observation.boundingBox.origin.x * textImageView.bounds.width
    let y = abs(((observation.boundingBox.origin.y * (textImageView.bounds.height)) - textImageView.bounds.height )) - h

    let layer = CAShapeLayer()
    layer.frame = CGRect(x: x, y: y, width: w, height: h)
    layer.borderColor = UIColor.red.cgColor
    layer.cornerRadius = 5
    layer.borderWidth = 5
    layer.strokeColor = UIColor.red.cgColor
    layer.backgroundColor = UIColor.green.cgColor
    layer.opacity = 0.5 // 0 - 1

    return layer

    }

    return layers

    }

    func recognizeTextImage(){
    if let tesseract = G8Tesseract(language: "eng+fra"){
    tesseract.engineMode = .tesseractCubeCombined
    tesseract.pageSegmentationMode = .auto
    tesseract.image = userPickedImage?.g8_blackAndWhite()
    tesseract.recognize()
    txtResult.text = tesseract.recognizedText

    }

    }
    }