我正在尝试估算与太空中QR码相关的设备位置.我正在使用ARKit和Vision框架,两者都在iOS11中引入,但这个问题的答案可能并不依赖于它们.
使用Vision框架,我能够获得在相机框架中限制QR码的矩形.我想将此矩形与从标准位置转换QR码所需的设备平移和旋转相匹配.
例如,如果我观察到框架:
* *
B
C
A
D
* *
Run Code Online (Sandbox Code Playgroud)
如果我距离QR码1米远,以它为中心,假设QR码的边长为10cm,我会看到:
* *
A0 B0
D0 C0
* *
Run Code Online (Sandbox Code Playgroud)
那两个帧之间的设备转换是什么?我知道确切的结果可能是不可能的,因为观察到的QR码可能是略微非平面的,我们试图估计一个不完美的东西上的仿射变换.
我想这sceneView.pointOfView?.camera?.projectionTransform比sceneView.pointOfView?.camera?.projectionTransform?.camera.projectionMatrix后者已经考虑了从ARKit推断的变换更有帮助我对此问题不感兴趣.
我该怎么做
func get transform(
qrCodeRectangle: VNBarcodeObservation,
cameraTransform: SCNMatrix4) {
// qrCodeRectangle.topLeft etc is the position in [0, 1] * [0, 1] of A0
// expected real world position of the QR code in a referential coordinate system
let a0 = SCNVector3(x: -0.05, y: 0.05, z: 1)
let b0 = SCNVector3(x: 0.05, y: 0.05, z: …Run Code Online (Sandbox Code Playgroud) 我正在尝试提供一个帮助类UIAlertController.因为它是一个帮助类,所以我希望它不管视图层次结构如何工作,并且没有关于它的信息.我能够显示警报,但当它被解雇时,应用程序崩溃了:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Trying to dismiss UIAlertController <UIAlertController: 0x135d70d80>
with unknown presenter.'
Run Code Online (Sandbox Code Playgroud)
我正在创建弹出窗口:
guard let window = UIApplication.shared.keyWindow else { return }
let view = UIView()
view.isUserInteractionEnabled = true
window.insertSubview(view, at: 0)
window.bringSubview(toFront: view)
// add full screen constraints to view ...
let controller = UIAlertController(
title: "confirm deletion?",
message: ":)",
preferredStyle: .alert
)
let deleteAction = UIAlertAction(
title: "yes",
style: .destructive,
handler: { _ in
DispatchQueue.main.async {
view.removeFromSuperview()
completion()
} …Run Code Online (Sandbox Code Playgroud) 如果有的话,将Apple的新ARKit用于多个用户/设备的最佳方式是什么?
似乎每个设备都有自己独立的场景理解.到目前为止,我最好的猜测是使用原始特征点位置并尝试在不同设备上匹配它们以将不同的视点粘合在一起,因为ARKit不提供任何绝对参考参考.
=== Edit1,我尝试过的东西===
1)特征点
我已经玩过暴露的原始特征点,我现在确信在他们目前的状态下他们是死路一条:
总的来说,我认为尝试以某种有意义的方式使用它们是不合理的,不能在一个设备中进行任何类型的好点匹配,更不用说几个.替代方案是实现我自己的特征点检测和匹配,但这将更多地取代ARKit而不是利用它.
2)QR码
正如@Rickster建议的那样,我也尝试识别一个容易识别的对象,如QR码,并从该固定点获得相对参考变化(请参阅此问题)这有点困难,并暗示我使用一些openCV来估计相机姿势.但更重要的是非常有限
我正在尝试在我的 Xcode 项目中添加对本地 swift 包的依赖。(我不想使用文件 url 添加依赖项,file://me/dev/app/package因为这无法共享到其他环境)
我试图将包拖放到目标上。这会创建对项目中包的引用,我能够在“链接二进制与库”构建阶段添加该包,但仍未找到该库。
No such module 'Analytics'
Run Code Online (Sandbox Code Playgroud)
我原来的配置
拖放后
这是我的包配置:
// swift-tools-version:5.1
import PackageDescription
let package = Package(
name: "Analytics",
products: [
.library(name: "Analytics", targets: ["Analytics"]),
],
dependencies: [
.package(path: "../SomeOtherPackage"),
],
targets: [
.target(name: "Analytics", dependencies: [
"SomeOtherPackage",
]),
]
)
Run Code Online (Sandbox Code Playgroud)
我还在目标链接的二进制文件和/或捆绑资源和/或编译源中包含了包,但无济于事:
这是我正在尝试的一个简单示例:https : //github.com/gsabran/SPM_Xcode_test
我正在尝试使用BUCK和Realm pod.
我将我的buck文件设置为:
apple_pod_lib(
name = "Realm",
visibility = ["PUBLIC"],
exported_headers = glob([
"Realm/**/*.h",
"Realm/**/*.hpp",
]),
srcs = glob([
"Realm/**/.{m,mm,cpp}",
]),
)
apple_pod_lib(
name = "RealmSwift",
visibility = ["PUBLIC"],
swift_version = "4",
deps = [
"//Pods:Realm"
],
srcs = glob([
"RealmSwift/**/*.swift",
]),
)
Run Code Online (Sandbox Code Playgroud)
使用Airbnb的pod宏.
但是我无法构建我的项目,因为这失败了
In target '//Pods:Realm', 'Realm/history.hpp' maps to the following header files:
- /BuckSample/Pods/Realm/include/core/realm/sync/history.hpp
- /BuckSample/Pods/Realm/include/core/realm/history.hpp
Please rename one of them or export one of them to a different path.
Run Code Online (Sandbox Code Playgroud)
我也尝试手动指定要包含的文件和标题,从那些repos查看PodSpec,但我无法使它工作,因为我当时缺少一些文件,以便在Xcode中编译项目.
我正在通过节点SDK从AWS发送短信.短信很顺利,我正在尝试获取交付信息.显然它不是那么容易,需要设置SNS将日志发送到Cloudwatch并解析CloudWatch以获取查询MessageId的交付信息:https://stackoverflow.com/a/40327061/2054629
如果我通过SNS Web界面发送短信,日志我会看到cloudwatch中的日志,但是当我通过节点SDK发送它们时.在从节点发送之前,我无法获得有关如何设置内容的信息.
理想情况下,我希望实现以下目标:
const sendSMS = async (message, number) => {
// send the SMS
// wait to get delivery info
// resolve with delivery info, or reject if failed
}
Run Code Online (Sandbox Code Playgroud)
目前我有:
import AWS from 'aws-sdk';
AWS.config.update({
accessKeyId: accessKey,
secretAccessKey: secretKey,
region: 'us-east-1',
});
const sns = new AWS.SNS();
const sendSMS = async (message, number) => {
return await new Promise((resolve, reject) => {
sns.publish({
Message: message,
MessageStructure: 'string',
PhoneNumber: number,
}, (err, res) => {
if …Run Code Online (Sandbox Code Playgroud) 我想发布一个集合,根据字段和用户确定的上下文的组合对文档进行评分; 并且返回的结果将根据此分数进行排序,并且可能仅限于最高结果.
这显示了transform在发布时如何在集合上添加过滤器.但是,我不确定transform是否是一种有效的方法来计算我想要在排序中使用的字段..
最后,使用Mongo map reduce来快速返回基于计算得分的推荐项目将是非常棒的,这可以并行完成.
@ brett-mclain 指出了一些地图减少排序可以在纯Mongo中完成.有几个流星包在那里延长流星集合,但我找不到如何在流星出版(在方法VS)使用它们此外,这里的地图降低输出发送到每次显然覆盖另一个集合该方法被调用.
这大致是我想要实现的逻辑:
/* Server */
Meteor.publish('getRecommendedItems', function() {
var u = Users.findOne(this.userId);
var scoreItem = function(item, u) { ... };
return Items.find(
{},
{
transformInParallel: function(doc) {
doc.score = scoreItem(doc);
},
sort: {score: -1},
limit: 10,
}
);
});
/* Client template*/
Template.templateName.onCreated(function() {
this.subscribe('getRecommendedItems');
this.items = Items.find({}, sort: {score: -1});
});
Run Code Online (Sandbox Code Playgroud)
除了score可以在客户端访问而不进行任何计算.
做自定义的东西似乎更容易Meteor.methods,但Meteor.publish感觉就像这样做的自然场所; …
我想分享一些枚举属性.就像是:
enum State {
case started
case succeeded
case failed
}
enum ActionState {
include State // what could that be?
case cancelled
}
class Action {
var state: ActionState = .started
func set(state: State) {
self.state = state
}
func cancel() {
self.state = .cancelled
}
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么ActionState不能继承State(因为状态cancelled没有表示State)但我仍然可以说"ActionState就像具有更多选项的State,而ActionState可以获得State类型的输入,因为它们也是输入ActionState"
我看到如何使用上述逻辑来复制案例ActionState并在set函数中进行切换.但我正在寻找一种更好的方法.
我知道枚举不能在Swift中继承,我已经阅读了swift-enum-inheritance的协议答案.它没有解决"继承"或包含来自另一个枚举的案例的需要,而只涉及属性和变量.
我试图理解在ArKit中引入的不同元素与它们在SceneKit中的等价物之间的区别:
SCNNode.simdTransformVS SCNNode.transform.在ARKit中,似乎人们使用SCNNode.simdTransform而不是SCNNode.transform.他们有什么不同?simdTransform似乎使用列主要顺序,而transform(SCNMatrix4)是行主要.如何将一个转换为另一个?只需转置?我的印象是,如果我使用transform而不是跟踪,那么跟踪也不会有效simdTransform.这是预期的还是仅仅是一种印象?如果我设置了一个属性,如果我再设置另一个属性会怎样?
ARFrame.cameravs Scene.pointOfView:看看他们的转型,他们似乎有点不同:
.
// ARFrame.camera.transform (matrix_float4x4)
-0.01 0.99 -0.11 0.02
-0.99 0.00 0.11 0.06
0.10 0.11 0.98 0.0
0.0 0.0 0.0 1.0
// sceneView.pointOfView.transform (SCNMatrix4)
// or sceneView.pointOfView.simdTransform^T (matrix_float4x4)
0.99 0 0.11 0
0.01 0.99 -0.12 0
-0.11 0.11 0.98 0
0.03 0.6 0.0 0.99
Run Code Online (Sandbox Code Playgroud)
它们是相同的减一轮吗?
我已经完成了一个大型 repo ( git clone --depth 1 git@github.com:myOrg/myRepo.git)的浅层克隆。我可以向遥控器推送新的更改,但第一次推送非常慢。后续推送就好了。该命令表示第一次推送向远程写入了大量数据:
$ git checkout -b test && \
touch tmp.txt && \
git add tmp.txt && \
git commit -m tmp && \
git push origin test
Enumerating objects: 164300, done.
Counting objects: 100% (164300/164300), done.
Delta compression using up to 12 threads
Compressing objects: 100% (93987/93987), done.
Writing objects: 100% (164300/164300), 368.72 MiB | 139.00 KiB/s, done.
Total 164300 (delta 41183), reused 164297 (delta 41182)
remote: Resolving deltas: 100% (41183/41183), done. …Run Code Online (Sandbox Code Playgroud)