diff options
-rw-r--r-- | md/writeup.md | 1 | ||||
-rw-r--r-- | md/writeup/swift_ocr_example.md | 77 |
2 files changed, 78 insertions, 0 deletions
diff --git a/md/writeup.md b/md/writeup.md index 2d79481..6c4dd05 100644 --- a/md/writeup.md +++ b/md/writeup.md @@ -29,6 +29,7 @@ title: Writeup page [Linux hello world in Swift](writeup/linux_hello_world_in_swift.md) [Running disk images in QEMU](writeup/running_disk_images_in_qemu.md) [Mqueue IPC example](writeup/mqueue_ipc_example.md) +[Swift OCR example](writeup/swift_ocr_example.md) ## Projects diff --git a/md/writeup/swift_ocr_example.md b/md/writeup/swift_ocr_example.md new file mode 100644 index 0000000..fd0e169 --- /dev/null +++ b/md/writeup/swift_ocr_example.md @@ -0,0 +1,77 @@ +title:Swift OCR example +keywords:swift,ocr,macos + +# Swift OCR example + +## Intro + +After getting new M1 whanted to try some fancy machine learning stuff that avaliable. +Got inspired when seen new post on reddit about OCRImage tool realse. As +it was written in Object-C https://www.turbozen.com/sourceCode/ocrImage/ ,so I +decided that is good learning task to read the code and reimplement all in Swift. + +## OCR + +The whole working prototype can fit just in few lines of code. All you need to create +is text recognition requester and handle that collect results. There is few example on +apple doc page. + +```siwft +func recognizeImageUrl(_ url:URL, _ error: Error?) { + var pieces:[TextPiece] = [] + var err:NSError? + + var textRequest = VNRecognizeTextRequest(completionHandler: recognizeTextHandler(request:error:)) + + var handler = VNImageRequestHandler(url: url) + do { + try handler.perform([textRequest]) + } catch { + print("Cannot perform request 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)") + } +``` + +## Source code + +Example XCode project is located at http://git.main.lv/cgit.cgi/OCRImage.git/ +clone it and launch with XCode +```bash +git clone http://git.main.lv/cgit.cgi/OCRImage.git/ +``` + +## Future developments + +Could be nice to add sorting text, and some option to import location of text to json file with coordinates. + +Drawing boxes around original image with detected text is next thing to add. + +And there is alot of things that could be added to make it full featured OCR software. + + + +## Links + +http://git.main.lv/cgit.cgi/OCRImage.git/ +https://www.turbozen.com/sourceCode/ocrImage/ +https://turbozen.com/sourceCode/ocrImage/ocrImage_src/ +https://developer.apple.com/documentation/vision/recognizing_text_in_images +http://git.main.lv/cgit.cgi/OCRImage.git/tree/OCRImage/main.swift?h=main + + + + |