我正在编写一个使用 ARSCNViewhitTest函数的 ARKit 应用程序。该应用程序还将捕获的图像发送到服务器进行一些分析。
当我这样做时我注意到:
let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size
Run Code Online (Sandbox Code Playgroud)
那么第一个是第二个的两倍。
问题是:
我正在使用以下代码旋转从 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) 我在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) RealityKit中有粒子系统吗?如果是这样,有人可以指出我正确的文档/文章吗?
到目前为止,我在 RealityKit 模块中没有找到任何粒子系统。
我正在尝试使用Vision框架检测本地录制的视频中的人脸。提供的大多数样本都是在实时凸轮视频中检测面部。
作为参考,这源于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) 我正在研究一种基于AR的解决方案,其中使用SceneKit和ARKit渲染了一些3D模型。我还集成了CoreML以识别对象并在场景中渲染相应的3D对象。
但是现在,我一检测到对象就将其呈现在屏幕中央(仅适用于我拥有的对象列表)。是否可以获取现实世界对象的位置,以便可以在对象上方显示一些叠加层?
也就是说,如果我扫描了水瓶,则应该能够找到水瓶的位置。它可能在水瓶中的任何地方,但不应放在水瓶外面。使用SceneKit是否可能?
我目前以以下方式导出视频:
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) 这是一个简单的代码,让我们找出一个字符串是否包含一个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 中,有一个用于可选绑定的Guard let语句:
\nvar opt: Int? = 5\n// var opt: Int? = nil\n\nguard let nonOptional: Int = opt else { return }\nRun Code Online (Sandbox Code Playgroud)\n该guard let语句允许我们提取Int存在的值(在下面的示例中为),并且如果 option 等于5则不提取值(因为如果它等于\xe2\x80\x93 ,应用程序将崩溃)。nilnilnil
我想知道 C# 中的语义等效项是什么?
\n我正在使用手势识别开发ARKit/ VisioniOS应用程序.我的应用程序有一个包含单个的简单UI UIView.没有ARSCNView/ 根本没有ARSKView.我正在将一系列捕获ARFrames到CVPixelBuffer我用于的内容中VNRecognizedObjectObservation.
我不需要会话中的任何跟踪数据.我只需要currentFrame.capturedImage为CVPixelBuffer.我需要以30 fps捕获ARFrame.60 fps是过高的帧速率.
preferredFramesPerSecond在我的情况下,实例属性绝对没用,因为它控制渲染ARSCNView/的帧速率ARSKView.我没有ARViews.并且它不会影响会话的帧速率.
所以,我决定使用run()和pause()方法来降低会话的帧速率.
题
我想知道如何在指定的时间内自动run和pauseARSession?持续时间run和pause方法必须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) swift ×9
arkit ×5
realitykit ×4
ios ×3
ios11 ×3
apple-vision ×2
coreml ×2
scenekit ×2
avfoundation ×1
avkit ×1
c# ×1
cocoa-touch ×1
visionos ×1