59 lines
1.6 KiB
Swift
59 lines
1.6 KiB
Swift
import Foundation
|
|
import Cocoa
|
|
import VisionKit
|
|
|
|
class StandardError: TextOutputStream {
|
|
func write(_ string: String) {
|
|
try! FileHandle.standardError.write(contentsOf: Data(string.utf8))
|
|
}
|
|
}
|
|
|
|
@main
|
|
struct Litex {
|
|
static var stderr = StandardError()
|
|
|
|
static func main() async throws {
|
|
try? await recognize()
|
|
}
|
|
|
|
static func recognize() async throws {
|
|
if #available(macOS 13.0, *) {
|
|
if let inputData = try? FileHandle.standardInput.readToEnd() {
|
|
if let image = NSImage(data: inputData) {
|
|
try? await recognizeTextByLiveText(inputimage: image)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@available(macOS 13, *)
|
|
static func recognizeTextByLiveText(inputimage: NSImage) async throws {
|
|
// if not supported
|
|
if !ImageAnalyzer.isSupported {
|
|
print("Live Text is not supported", to: &stderr)
|
|
return
|
|
}
|
|
|
|
// setup ImageAnalyzer
|
|
var configuration = ImageAnalyzer.Configuration([.text])
|
|
configuration.locales = ["ja","en"]
|
|
let analyzer = ImageAnalyzer()
|
|
|
|
// analyze the image
|
|
let analysis = try? await analyzer.analyze(inputimage,
|
|
orientation: .up,
|
|
configuration: configuration)
|
|
// output results
|
|
if let analysis {
|
|
if analysis.hasResults(for: .text) {
|
|
print(analysis.transcript)
|
|
} else {
|
|
print("")
|
|
}
|
|
}
|
|
else {
|
|
print("Unknown error", to: &stderr)
|
|
}
|
|
}
|
|
}
|