Проблема преобразования изображения [в основном масштабирование] с Google Cloud Textrecognizer, когда текст состоит из нескольких блоков и строк - PullRequest
1 голос
/ 10 июля 2020

введите описание изображения здесь Я пытаюсь ограничить рамки линий [Получено из распознавания текста Google Cloud Vision ] на изображении в iOS Swift.

У меня есть линии из блока и получил кадры строки с помощью кода line.frame , предоставленного Google.

Я видел некоторые преобразования al go, которые я применил:

private func createScaledFrame(
    featureFrame: CGRect,
    imageSize: CGSize, viewFrame: CGRect)
    -> CGRect {
    let viewSize = viewFrame.size
      
// 2
let resolutionView = viewSize.width / viewSize.height
let resolutionImage = imageSize.width / imageSize.height
  
// 3
var scale: CGFloat
if resolutionView > resolutionImage {
  scale = viewSize.height / imageSize.height
} else {
  scale = viewSize.width / imageSize.width
}
  
// 4
let featureWidthScaled = featureFrame.size.width * scale
let featureHeightScaled = featureFrame.size.height * scale
  
// 5
let imageWidthScaled = imageSize.width * scale
let imageHeightScaled = imageSize.height * scale
let imagePointXScaled = (viewSize.width - imageWidthScaled) / 2
let imagePointYScaled = (viewSize.height - imageHeightScaled) / 2
  
// 6
let featurePointXScaled = imagePointXScaled + featureFrame.origin.x * scale
let featurePointYScaled = imagePointYScaled + featureFrame.origin.y * scale
  
// 7
return CGRect(x: featurePointXScaled,
              y: featurePointYScaled,
              width: featureWidthScaled,
              height: featureHeightScaled)
}

Это происходит из-за увеличения количества линий и блоков. Они становятся маленькими, как показано на изображении. Проблема с масштабом примерно 2,0 ... 2,25 Я не знаю, где я ошибаюсь, проблема с аспектом или что-то, что я здесь пропустил.

Код, в котором я применяю вышеуказанный метод:

    let r = self.createScaledFrame(featureFrame: line.frame, imageSize: imageSize, viewFrame: self.imageView.frame)                                
    let lyr = self.createShapeLayer(frame: r)
self.imageView.layer.addSublayer(lyr)

Метод создания слоя-фигуры:

private func createShapeLayer(frame: CGRect) -> CAShapeLayer {
     // 1
     let bpath = UIBezierPath(rect: frame)
     let shapeLayer = CAShapeLayer()
     shapeLayer.path = bpath.cgPath
     // 2
     shapeLayer.strokeColor = Constants.lineColor
     shapeLayer.fillColor = Constants.fillColor
     shapeLayer.lineWidth = Constants.lineWidth
     return shapeLayer
   }

Заранее спасибо

...