From a8163efb21ab71db3f4f54f8e02b24f10fea3027 Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Sun, 14 Mar 2021 12:58:46 +0000 Subject: First example generated working, OCR text output --- OCRImage/main.swift | 57 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) (limited to 'OCRImage/main.swift') diff --git a/OCRImage/main.swift b/OCRImage/main.swift index 9eff185..3e5d08a 100644 --- a/OCRImage/main.swift +++ b/OCRImage/main.swift @@ -10,6 +10,8 @@ import ArgumentParser import Vision import AppKit + + class TextPiece { var text:String?; var topLeft:CGPoint; @@ -17,6 +19,14 @@ class TextPiece { var bottomLeft:CGPoint; var bottomRIght:CGPoint; + init() { + self.text = "Empty"; + self.topLeft = CGPoint(x:0,y:0); + self.topRight = CGPoint(x:0,y:0); + self.bottomLeft = CGPoint(x:0,y:0); + self.bottomRIght = CGPoint(x:0,y:0); + } + init(_ t: String, _ tl:CGPoint, _ tr:CGPoint, _ bl:CGPoint, _ br: CGPoint ) { self.text = t; self.topLeft = tl; @@ -24,6 +34,14 @@ class TextPiece { self.bottomLeft = bl; self.bottomRIght = br; } + + func set(_ t: String, _ tl:CGPoint, _ tr:CGPoint, _ bl:CGPoint, _ br: CGPoint) { + self.text = t; + self.topLeft = tl; + self.topRight = tr; + self.bottomLeft = bl; + self.bottomRIght = br; + } } class TextOCR { @@ -34,12 +52,41 @@ class TextOCR { } func recognizeImageUrl(_ url:URL, _ error: Error?) { + var pieces:[TextPiece] = [] + var err:NSError? + + //guard let cgImage = + + //let requestHandler = VNImageRequestHandler(url: url) + var textRequest = VNRecognizeTextRequest(completionHandler: recognizeTextHandler(request:error:)) + + //let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler); + var handler = VNImageRequestHandler(url: url) + do { + try handler.perform([textRequest]) + } catch { + print("Cannot perfom request error:\(error)") + } } func handleTextRequest(_ request: VNRequest, error: Error?) { } + + func recognizeTextHandler(request: VNRequest, error: Error?) { + print("Start recognize handler") + guard let observations = + request.results as? [VNRecognizedTextObservation] else { + return + } + + let recognizedStrings = observations.compactMap { observation in + // Return the string of the top VNRecognizedText instance. + return observation.topCandidates(1).first?.string + } + print("\(recognizedStrings)") + } } print("Start program") @@ -77,18 +124,20 @@ var fm = FileManager.default.homeDirectoryForCurrentUser print(fm) let path:String = options.inputFile fm.appendPathComponent(path) -let ocrImateUrl = fm.absoluteURL +let ocrImageUrl = fm.absoluteURL print(fm) //load image -let image = NSImage(contentsOf: ocrImateUrl) +let image = NSImage(contentsOf: ocrImageUrl) if (image == nil) { - stderr.write("Cannot load image properly \(ocrImateUrl)".data(using: .utf8)!) + stderr.write("Cannot load image properly \(ocrImageUrl)".data(using: .utf8)!) exit(0) } //Start text recognition request - +var ocr = TextOCR() +var err:NSError? +ocr.recognizeImageUrl(ocrImageUrl, err) -- cgit v1.2.3