Распознавание лиц с помощью 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)
Улыбающееся лицо - это маска для маскировки на обнаруженном лице.Но в правильной ориентации преобразование всегда неверно.