Извлечение ограничивающих рамок на уровне слова с помощью .accurate VNRecounceeTextRequest в Vision Framework — SwiftUIIOS

Программируем под IOS
Ответить
Anonymous
 Извлечение ограничивающих рамок на уровне слова с помощью .accurate VNRecounceeTextRequest в Vision Framework — SwiftUI

Сообщение Anonymous »

Я работаю над проектом по распознаванию текста с использованием платформы Apple Vision и пытаюсь использовать VNRecounceeTextRequest для извлечения ограничивающих рамок текста в изображениях. Моя цель — точно определить и получить ограничивающие рамки для отдельных слов, а не для целых предложений или текстовых блоков.
Большинство ресурсов и руководств, с которыми я сталкивался, посвящены получение ограничивающих рамок для предложений или более крупных текстовых блоков с минимальным обсуждением выбора отдельных слов. Кроме того, мне известно, что VNRecounceeTextRequest предлагает две точности распознавания: .fast и .accurate. По результатам моего тестирования качество распознавания в режиме .fast значительно уступает режиму .accurate, поэтому я предпочитаю использовать последний, чтобы обеспечить максимальное качество распознавания текста.
Однако я столкнулся с проблемой: несмотря на то, что для распознавания установлено значение .accurate, я по-прежнему не могу получить ограничивающие рамки для отдельных слов — результаты по-прежнему охватывают более крупные текстовые блоки.
Кто-нибудь знает, как настроить VNRecounceeTextRequest или использовать какой-либо другой метод для определения ограничивающих рамок для отдельных слов? Я упускаю какие-либо конкретные настройки или параметры, которые могли бы улучшить обнаружение до такого уровня детализации?
Я был бы очень признателен за любые советы или рекомендации по этому вопросу. Спасибо!
Это простой пример получения ограничивающего поля предложений:

Код: Выделить всё

import SwiftUI
import Vision

struct OCR: View {
@State var image: UIImage? = UIImage(named: "test")
@State var texts: [String] = []
@State var positions: [CGRect] = []

@State var size: CGSize = CGSize()

func VNImageRectForNormalizedRect(rect: CGRect, imageSize: CGSize) -> CGRect {
let width = imageSize.width
let height = imageSize.height

let x = rect.minX * width
let y = (1 - rect.maxY) * height
let rectWidth = rect.width * width
let rectHeight = rect.height * height

return CGRect(x: x, y: y, width: rectWidth, height: rectHeight)
}

var body: some View {
ZStack {
if let image = image {
Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fit)
.background {
GeometryReader { geo in
Color.clear
.onAppear {
size = geo.size
}
}
}
.overlay(Canvas { context, size in
for position in positions {
let normalizedRect = VNImageRectForNormalizedRect(rect: position, imageSize: size)
context.stroke(Path(normalizedRect), with: .color(.red), lineWidth: 1)
}
})
.onAppear {
recognizeText(image: image) { t, p in
texts = t
positions = p
}
}
} else {
Text("Their is no picture")
}
}
}
}

extension ContentView {
func recognizeText(image: UIImage, completion: @escaping([String], [CGRect]) -> Void) {
var texts: [String] = []
var positions: [CGRect] = []

guard let cgImage = image.cgImage else { return }
let request = VNRecognizeTextRequest { (request, error) in
guard let observations = request.results as? [VNRecognizedTextObservation], error == nil else {
print("Text recognition error: \(error?.localizedDescription ?? "Unknown error")")
return
}
for observation in observations {
guard let topCandidate = observation.topCandidates(1).first else { continue }
texts.append(topCandidate.string)
positions.append(observation.boundingBox)
}
DispatchQueue.main.async {
print(texts)
print(positions)
completion(texts, positions)
}
}
request.recognitionLevel = .accurate

let handler = VNImageRequestHandler(cgImage: cgImage)
try? handler.perform([request])
}
}

#Preview {
OCR()
}
тестовое изображение

Подробнее здесь: https://stackoverflow.com/questions/781 ... urate-in-v
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»