小编ARG*_*Geo的帖子

ARKit – 视口大小与实际屏幕分辨率

我正在编写一个使用 ARSCNViewhitTest函数的 ARKit 应用程序。该应用程序还将捕获的图像发送到服务器进行一些分析。

当我这样做时我注意到:

let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size 
Run Code Online (Sandbox Code Playgroud)

那么第一个是第二个的两倍。

问题是:

  • 1.为什么会有差异?
  • 2.hitTest中使用什么“大小”(例如坐标)?

augmented-reality scenekit swift arkit realitykit

1
推荐指数
1
解决办法
2217
查看次数

如何在 RealityKit 中旋转实体而不复制它?

我正在使用以下代码旋转从 Reality Composer 加载的实体。我希望球体会简单地旋转。但是,我留下了新的旋转实体和旧实体。以为这会很简单。

我该怎么做才能只旋转实体而不复制它?

ball?.transform.rotation = simd_quatf(angle: GLKMathDegreesToRadians(90), 
                                       axis: SIMD3(x: 0, y: 1, z: 0.5))
Run Code Online (Sandbox Code Playgroud)

augmented-reality swift arkit realitykit reality-composer

1
推荐指数
1
解决办法
1753
查看次数

如何将我自己的 Reality Composer 场景加载到 RealityKit 中?

我在Experience.rcproject文件中创建了 3 个“场景” ,这是在您使用 xcode 启动新的增强现实项目时创建的。

经常为 3D 工作,我会说这些是场景中的 3 个对象,但在里面Experience.rcproject我添加了 3 个“场景”。每一个内部,都有相同的 3D 模型。第一个附加到水平平面,第二个附加到垂直平面,第三个附加到图像。

我第一次使用 Reality Kit 并在此过程中学习。

我这样做的想法是,当我想要将它附加到水平、垂直或图像时加载正确的对象。

我就是这样完成的。

我修改Experience.swift了 Apple 提供的文件以接受场景名称,如下所示:

public static func loadBox(namedFile:String) throws -> Experience.Box {
    guard let realityFileURL = Foundation.Bundle(for: Experience.Box.self).url(forResource: "Experience", withExtension: "reality") else {
      throw Experience.LoadRealityFileError.fileNotFound("Experience.reality")
    }
    
    let realityFileSceneURL = realityFileURL.appendingPathComponent(namedFile, isDirectory: false)
    let anchorEntity = try Experience.Box.loadAnchor(contentsOf: realityFileSceneURL)
    return createBox(from: anchorEntity)
  }
Run Code Online (Sandbox Code Playgroud)

我叫这条线

let entity = try! Experience.loadBox(namedFile:sceneName)
Run Code Online (Sandbox Code Playgroud)

无论我想要什么,但我必须使用以下代码:

// I have to keep …
Run Code Online (Sandbox Code Playgroud)

augmented-reality swift arkit realitykit

1
推荐指数
1
解决办法
1354
查看次数

RealityKit 中的粒子系统

RealityKit中有粒子系统吗?如果是这样,有人可以指出我正确的文档/文章吗?

到目前为止,我在 RealityKit 模块中没有找到任何粒子系统。

swift realitykit visionos

1
推荐指数
1
解决办法
1413
查看次数

使用Vision框架跟踪本地视频中的面部

我正在尝试使用Vision框架检测本地录制的视频中的人脸。提供的大多数样本都是在实时凸轮视频中检测面部。

  • 如何使用Vision / CoreML框架在本地视频中进行人脸检测并在运行时在检测到的人脸中放置一个矩形?

cocoa-touch ios ios11 apple-vision coreml

0
推荐指数
1
解决办法
1449
查看次数

VNFaceObservation BoundingBox 在纵向模式下不缩放

作为参考,这源于Vision API中的一个问题。我正在努力使用Vision通过 a 来检测图像中的面部VNDetectFaceRectanglesRequest,该方法在确定图像中正确的面部数量并boundingBox为每张面部提供 方面成功发挥作用。

我的麻烦是,由于我UIImageView(持有有UIImage问题的)正在使用.scaleAspectFit内容模式,我在纵向模式下正确绘制边界框(在横向模式下效果很好)方面遇到了巨大的困难。

这是我的代码;

func detectFaces(image: UIImage) {

    let detectFaceRequest = VNDetectFaceRectanglesRequest { (request, error) in
        if let results = request.results as? [VNFaceObservation] {
            for faceObservation in results {
                let boundingRect = faceObservation.boundingBox

                let transform = CGAffineTransform(scaleX: 1, y: -1).translatedBy(x: 0, y: -self.mainImageView.frame.size.height)
                let translate = CGAffineTransform.identity.scaledBy(x: self.mainImageView.frame.size.width, y: self.mainImageView.frame.size.height)
                let facebounds = boundingRect.applying(translate).applying(transform)

                let mask = CAShapeLayer()
                var maskLayer = [CAShapeLayer]()
                mask.frame …
Run Code Online (Sandbox Code Playgroud)

core-graphics ios swift apple-vision

0
推荐指数
1
解决办法
2997
查看次数

是否可以使用CoreML和ARKit获得World对象的“ SCNVector3”位置?

我正在研究一种基于AR的解决方案,其中使用SceneKit和ARKit渲染了一些3D模型。我还集成了CoreML以识别对象并在场景中渲染相应的3D对象。

但是现在,我一检测到对象就将其呈现在屏幕中央(仅适用于我拥有的对象列表)。是否可以获取现实世界对象的位置,以便可以在对象上方显示一些叠加层?

也就是说,如果我扫描了水瓶,则应该能够找到水瓶的位置。它可能在水瓶中的任何地方,但不应放在水瓶外面。使用SceneKit是否可能?

augmented-reality scenekit ios11 arkit coreml

0
推荐指数
1
解决办法
574
查看次数

减少使用AVAssetExportSession导出的视频的大小-iOS Swift

我目前以以下方式导出视频:

   let exporter = AVAssetExportSession.init(asset: mixComposition, presetName: AVAssetExportPreset1280x720)
   exporter?.outputURL = outputPath
   exporter?.outputFileType = AVFileType.mp4
   exporter?.shouldOptimizeForNetworkUse = true
   exporter?.videoComposition = mainCompositionInst
Run Code Online (Sandbox Code Playgroud)

15秒的视频消耗约20MB的数据。与Snapchat的2MB视频相比,这个数字似乎是完全不能接受的。

我已经降低了导出和捕获会话的质量(1280x720)。

该视频在自定义相机上拍摄。UIImagePickerController未使用。

AVAssetExportSession与默认设置一起使用。

有什么办法可以减小视频尺寸?非常感谢!

编辑1: 我尝试使用此库:https : //cocoapods.org/pods/NextLevelSessionExporter

不幸的是,这会造成尺寸问题,并删除了我的音频:

// Creating exporter
    let exporter = NextLevelSessionExporter(withAsset: mixComposition)
    exporter.outputURL = outputPath
    exporter.outputFileType = AVFileType.mp4
    exporter.videoComposition = mainCompositionInst

    let compressionDict: [String: Any] = [
        AVVideoAverageBitRateKey: NSNumber(integerLiteral: 2500000),
        AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel as String,
        ]

        exporter.videoOutputConfiguration = [
            AVVideoCodecKey: AVVideoCodecType.h264,
            AVVideoWidthKey: NSNumber(integerLiteral: 1280),
            AVVideoHeightKey: NSNumber(integerLiteral: 720),
            AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill,
            AVVideoCompressionPropertiesKey: compressionDict
        ] …
Run Code Online (Sandbox Code Playgroud)

avfoundation avassetexportsession swift avkit ios11

0
推荐指数
2
解决办法
1645
查看次数

Swift – 如何判断一个字符串是否包含多个相同的字符?

这是一个简单的代码,让我们找出一个字符串是否包含一个dot字符(我们不知道有多少个,我们只知道它包含它):

var number: String = "3.14"

if number.contains(".") {
    print("The string contains a dot character")
} else {
    print("There's no dot character")
}
Run Code Online (Sandbox Code Playgroud)

但想象一下用户错误地将 2 或 3 个点排成一行的情况,如下所示:

var number: String = "3...14"
Run Code Online (Sandbox Code Playgroud)

如何判断一个字符串包含一个dot还是多个?

如何计算字符串中所有的点?

swift

0
推荐指数
1
解决办法
2600
查看次数

C# 中是否存在与 Swift“guard let”语句等效的语义?

在 Swift 中,有一个用于可选绑定的Guard let语句:

\n
var opt: Int? = 5\n// var opt: Int? = nil\n\nguard let nonOptional: Int = opt else { return }\n
Run Code Online (Sandbox Code Playgroud)\n

guard let语句允许我们提取Int存在的值(在下面的示例中为),并且如果 option 等于5则不提取值(因为如果它等于\xe2\x80\x93 ,应用程序将崩溃)。nilnilnil

\n

我想知道 C# 中的语义等效项是什么?

\n

c# swift

0
推荐指数
1
解决办法
1995
查看次数

在指定的时间段内运行和暂停ARSession

我正在使用手势识别开发ARKit/ VisioniOS应用程序.我的应用程序有一个包含单个的简单UI UIView.没有ARSCNView/ 根本没有ARSKView.我正在将一系列捕获ARFramesCVPixelBuffer我用于的内容中VNRecognizedObjectObservation.

我不需要会话中的任何跟踪数据.我只需要currentFrame.capturedImageCVPixelBuffer.我需要以30 fps捕获ARFrame.60 fps是过高的帧速率.

preferredFramesPerSecond在我的情况下,实例属性绝对没用,因为它控制渲染ARSCNView/的帧速率ARSKView.我没有ARViews.并且它不会影响会话的帧速率.

所以,我决定使用run()pause()方法来降低会话的帧速率.

我想知道如何在指定的时间内自动runpauseARSession?持续时间runpause方法必须16 ms(或0.016秒).我想通过它可能是可能的DispatchQueue.但我不知道如何实现它.

怎么做?

在此输入图像描述

这是一个伪代码:

session.run(configuration)

    /*  run lasts 16 ms  */

session.pause()

    /*  pause lasts 16 ms  */

session.run(session.configuration!)

    /*  etc...  */
Run Code Online (Sandbox Code Playgroud)

PS 我在我的应用程序中既不使用CocoaPod也不使用Carthage.

更新:它是关于如何currentFrame.capturedImage检索和使用ARSession的.

let session …
Run Code Online (Sandbox Code Playgroud)

augmented-reality ios swift arkit dispatch-queue

-6
推荐指数
1
解决办法
497
查看次数