Как трансформировать систему координат при распознавании лица на фото с правильной ориентацией? - PullRequest
0 голосов
/ 18 февраля 2019

Распознавание лиц с помощью CoreImage в порядке для фотографии с ориентацией вверх (преобразование y в -y и перемещение y в -image.height), но я не знаю, как преобразовать систему координат, когда в правильной ориентации.

Я пробовал много преобразований, таких как вращение и так далее, но ни одно из них не в порядке.

let ciImageSize = personciImage.extent.size
var transform: CGAffineTransform!
switch image.imageOrientation {
case .up:
  transform = CGAffineTransform(scaleX: 1, y: -1)
  transform = transform.translatedBy(x: 0, y: -ciImageSize.height)
case .right:
  transform = CGAffineTransform(a: 0, b: -1, c: -1, d: 0, tx: ciImageSize.width, ty: ciImageSize.height)
default:
  transform = CGAffineTransform(scaleX: 1, y: -1)
  transform = transform.translatedBy(x: 0, y: -ciImageSize.height)
}
// Apply the transform to convert the coordinates
var faceViewBounds = faceFeature.bounds.applying(transform)
// Calculate the actual position and size of the rectangle in the image view
let viewSize = imageView.bounds.size
let scale = min(viewSize.width / ciImageSize.width,
                  viewSize.height / ciImageSize.height)
let offsetX = (viewSize.width - ciImageSize.width * scale) / 2
let offsetY = (viewSize.height - ciImageSize.height * scale) / 2
faceViewBounds = faceViewBounds.applying(CGAffineTransform(scaleX: scale, y: scale))
faceViewBounds.origin.x += offsetX
faceViewBounds.origin.y += offsetY

let haha = UIImageView(frame: faceViewBounds)
haha.image = UIImage(named: "haha-2")
imageView.addSubview(haha)

Улыбающееся лицо - это маска для маскировки на обнаруженном лице.Но в правильной ориентации преобразование всегда неверно.

good and bad

...