From 7cab502a47a8b91081d79954ee9ead86866e5dd5 Mon Sep 17 00:00:00 2001 From: Libo Huang Date: Mon, 9 May 2022 23:19:45 +0800 Subject: [PATCH 1/4] refine code --- ocr/main.swift | 68 +++++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 40 deletions(-) diff --git a/ocr/main.swift b/ocr/main.swift index ef635f6..abc79f8 100644 --- a/ocr/main.swift +++ b/ocr/main.swift @@ -20,19 +20,21 @@ if #available(OSX 11, *) { bigSur = true; } +// MARK: Helper functions + func convertCIImageToCGImage(inputImage: CIImage) -> CGImage? { let context = CIContext(options: nil) - if let cgImage = context.createCGImage(inputImage, from: inputImage.extent) { - return cgImage + guard let cgImage = context.createCGImage(inputImage, from: inputImage.extent) else { + return nil } - return nil + return cgImage } func recognizeTextHandler(request: VNRequest, error: Error?) { - guard let observations = - request.results as? [VNRecognizedTextObservation] else { + 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 @@ -45,60 +47,46 @@ func recognizeTextHandler(request: VNRequest, error: Error?) { let pasteboard = NSPasteboard.general pasteboard.declareTypes([.string], owner: nil) pasteboard.setString(joined, forType: .string) - } -func detectText(fileName : URL) -> [CIFeature]? { - if let ciImage = CIImage(contentsOf: fileName){ - guard let img = convertCIImageToCGImage(inputImage: ciImage) else { return nil} - - let requestHandler = VNImageRequestHandler(cgImage: img) +func detectText(fileName : URL) { + guard let ciImage = CIImage(contentsOf: fileName) else { return } + guard let img = convertCIImageToCGImage(inputImage: ciImage) else { return} - // Create a new request to recognize text. - let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler) - request.recognitionLanguages = recognitionLanguages - - - do { - // Perform the text-recognition request. - try requestHandler.perform([request]) - } catch { - print("Unable to perform the requests: \(error).") - } -} - return nil + // Create a new request to recognize text. + let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler) + request.recognitionLanguages = recognitionLanguages + + do { + let requestHandler = VNImageRequestHandler(cgImage: img) + // Perform the text-recognition request. + try requestHandler.perform([request]) + } catch { + print("Unable to perform the requests: \(error).") + } } - +// MARK: Start OCR... let inputURL = URL(fileURLWithPath: "/tmp/ocr.png") -var recognitionLanguages = ["en-US"] +var recognitionLanguages = ["zh-CN"] do { - - let arguments = Array(CommandLine.arguments.dropFirst()) - let parser = ArgumentParser(usage: "", overview: "macOCR is a command line app that enables you to turn any text on your screen into text on your clipboard") - if(bigSur){ + if (bigSur) { let languageOption = parser.add(option: "--language", shortName: "-l", kind: String.self, usage: "Set Language (Supports Big Sur and Above)") - - let parsedArguments = try parser.parse(arguments) let language = parsedArguments.get(languageOption) - if (language ?? "").isEmpty{ - - }else{ - recognitionLanguages.insert(language!, at: 0) + if let language = language, !language.isEmpty { + recognitionLanguages.insert(language, at: 0) } } - + let _ = ScreenCapture.captureRegion(destination: "/tmp/ocr.png") - - if let features = detectText(fileName : inputURL), !features.isEmpty{} - + detectText(fileName : inputURL) } catch { // handle parsing error } From 273fd17ebd9e3743e24c2279f42783850036c63a Mon Sep 17 00:00:00 2001 From: Libo Huang Date: Mon, 9 May 2022 23:37:08 +0800 Subject: [PATCH 2/4] refine code --- ocr/main.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ocr/main.swift b/ocr/main.swift index abc79f8..00aa872 100644 --- a/ocr/main.swift +++ b/ocr/main.swift @@ -88,7 +88,7 @@ do { let _ = ScreenCapture.captureRegion(destination: "/tmp/ocr.png") detectText(fileName : inputURL) } catch { - // handle parsing error + print(error) } exit(EXIT_SUCCESS) From f431f295eb9afa630a4135bd2bb9bbfc9f3662dd Mon Sep 17 00:00:00 2001 From: Libo Huang Date: Mon, 9 May 2022 23:38:21 +0800 Subject: [PATCH 3/4] refine code --- ocr/main.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ocr/main.swift b/ocr/main.swift index 00aa872..1fa990d 100644 --- a/ocr/main.swift +++ b/ocr/main.swift @@ -12,9 +12,11 @@ import Vision import ScreenCapture import ArgumentParserKit +// MARK: Global varibles var joiner = " " -var bigSur = false; +var bigSur = false +var recognitionLanguages = ["zh-CN"] if #available(OSX 11, *) { bigSur = true; @@ -66,10 +68,7 @@ func detectText(fileName : URL) { } } -// MARK: Start OCR... - -let inputURL = URL(fileURLWithPath: "/tmp/ocr.png") -var recognitionLanguages = ["zh-CN"] +// MARK: 🉑 Start OCR ... do { let arguments = Array(CommandLine.arguments.dropFirst()) @@ -85,6 +84,7 @@ do { } } + let inputURL = URL(fileURLWithPath: "/tmp/ocr.png") let _ = ScreenCapture.captureRegion(destination: "/tmp/ocr.png") detectText(fileName : inputURL) } catch { From 867d287323298e6f6a977383718165ace7f609eb Mon Sep 17 00:00:00 2001 From: Libo Huang Date: Tue, 10 May 2022 22:01:23 +0800 Subject: [PATCH 4/4] refine code --- ocr/main.swift | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ocr/main.swift b/ocr/main.swift index 1fa990d..f87048f 100644 --- a/ocr/main.swift +++ b/ocr/main.swift @@ -26,16 +26,12 @@ if #available(OSX 11, *) { func convertCIImageToCGImage(inputImage: CIImage) -> CGImage? { let context = CIContext(options: nil) - guard let cgImage = context.createCGImage(inputImage, from: inputImage.extent) else { - return nil - } + guard let cgImage = context.createCGImage(inputImage, from: inputImage.extent) else { return nil } return cgImage } func recognizeTextHandler(request: VNRequest, error: Error?) { - guard let observations = request.results as? [VNRecognizedTextObservation] else { - return - } + guard let observations = request.results as? [VNRecognizedTextObservation] else { return } let recognizedStrings = observations.compactMap { observation in // Return the string of the top VNRecognizedText instance.