Cashapelayer перевернул координату при использовании с IOS11 VisionIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Cashapelayer перевернул координату при использовании с IOS11 Vision

Сообщение Anonymous »

Я играю с iOS 11vision Framework, чтобы обнаружить особенности лица, такие как нос, глаза, губы и т. Д. Теперь я пытаюсь нарисовать красную линию над правым глазом с помощью пути Безера, и ниже приведен код, который я использую для рисования. Контекст создается и используется для рисования линейной линии. < /p>

2) AddNewPathtoImage () < /code> Метод определяется для добавления Shapelayer в обнаруженный правый глаз, чтобы я мог обрезать это в следующей форме. < /p>

func addFaceLandmarksToImage(_ face: VNFaceObservation) {

UIGraphicsBeginImageContextWithOptions(image.size, false, 1.0)
let context = UIGraphicsGetCurrentContext()

image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))

context?.translateBy(x: 0, y: image.size.height)
context?.scaleBy(x: 1.0, y: -1.0)

// draw the face rect
let w = face.boundingBox.size.width * image.size.width
let imgViewWidth = face.boundingBox.size.width * imageView.frame.size.width
let h = face.boundingBox.size.height * image.size.height
let imgViewHeight = face.boundingBox.size.height * imageView.frame.size.height
let x = face.boundingBox.origin.x * image.size.width
let imgViewX = face.boundingBox.origin.x * imageView.frame.size.width
let y = face.boundingBox.origin.y * image.size.height
let imgViewY = face.boundingBox.origin.y * imageView.frame.size.height
let faceRect = CGRect(x: x, y: y, width: w, height: h)
context?.saveGState()
context?.setStrokeColor(UIColor.red.cgColor)
context?.setLineWidth(5.0)
context?.addRect(faceRect)
context?.drawPath(using: .stroke)
context?.restoreGState()

// right eye
context?.saveGState()
context?.setStrokeColor(UIColor.red.cgColor)

if let landmark = face.landmarks?.rightEye {
for i in 0...landmark.pointCount - 1 {
let point = landmark.normalizedPoints
if i == 0 {
eyePath.move(to: CGPoint(x: imgViewX + CGFloat(point.x) * imgViewWidth, y: imgViewY + CGFloat(point.y) * imgViewHeight))
context?.move(to: CGPoint(x: x + CGFloat(point.x) * w, y: y + CGFloat(point.y) * h))
} else {
eyePath.addLine(to: CGPoint(x: imgViewX + CGFloat(point.x) * imgViewWidth, y: imgViewY + CGFloat(point.y) * imgViewHeight))
context?.addLine(to: CGPoint(x: x + CGFloat(point.x) * w, y: y + CGFloat(point.y) * h))
addNewPathToImage(path: eyePath)
}
}
}

addNewPathToImage(path: eyePath)
eyePath.close()

context?.closePath()
context?.setLineWidth(2.0)
context?.drawPath(using: .stroke)
context?.saveGState()

let finalImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
imageView.image = finalImage

}

func addNewPathToImage(path: UIBezierPath){

shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.blue.cgColor
shapeLayer.fillColor = UIColor.red.cgColor
shapeLayer.lineWidth = 1.0
imageView.layer.addSublayer(shapeLayer)
}
< /code>

< /p>

Теперь, как вы можете видеть, я могу точно нарисовать правый глаз через текущий контекст на ImageView. Я уже применил свойство «Перевести и масштабировать в своем контексте». Я знаю, что uikit использует ulo (верхнее левое происхождение), а основная графика основана на системе llo (левое левое левое). < /p>

Какое преобразование мне нужно применить в этом процессе, чтобы разместить этот Shapelayer точно на правый глаз.shapeLayer.setAffineTransform(CGAffineTransform(translationX: 0, y: image.size.height))
shapeLayer.setAffineTransform(CGAffineTransform(scaleX: 1, y: -1))


Подробнее здесь: https://stackoverflow.com/questions/480 ... s11-vision
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Преобразовать повернутую координату NetCDF в обычную координату в CDO?
    Anonymous » » в форуме Linux
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать координату в собственном DPI в координату в логике DPI WPF?
    Anonymous » » в форуме C#
    0 Ответы
    65 Просмотры
    Последнее сообщение Anonymous
  • При использовании Cashapelayer есть ли какое -либо преимущество для использования UibezierPath над просто построением CG
    Anonymous » » в форуме IOS
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как замаскировать, анимировать и добавить тень к CAShapeLayer?
    Гость » » в форуме IOS
    0 Ответы
    25 Просмотры
    Последнее сообщение Гость
  • Анимация прохождения CAShapeLayer x UIBezierPath
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

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