当前位置: 首页 > news >正文

上海做网站要多少钱大连哪家公司做网站好

上海做网站要多少钱,大连哪家公司做网站好,cms程序,深装总建设集团股份有限公司与2D人体姿态检测一样#xff0c;在ARKit 中#xff0c;我们不必关心底层的人体骨骼关节点检测算法#xff0c;也不必自己去调用这些算法#xff0c;在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后#xff0c;基于摄像头图像的3D人体姿态估计任务也会启动…      与2D人体姿态检测一样在ARKit 中我们不必关心底层的人体骨骼关节点检测算法也不必自己去调用这些算法在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后基于摄像头图像的3D人体姿态估计任务也会启动我们可以通过 session_ session: ARSession, didUpdate anchorsARAnchor代理方法直接获取检测到的ARBodyAnchor。 在 ARKit 中与检测2D图像或者 3D物体一样在检测到3D 人体后会生成一个ARBodyAnchor 用于在现实世界和虚拟空间之间建立关联关系绑定虚拟元素到检测的人体上。在获取 ARBodyAnchor 后就可以通过 ARBodyAnchor. skeleton. definition. jointNames 获取所有3D人体骨骼关节点名称通过ARBodyAnchor. skeleton. modelTransformfor方法取指定关节点相对 ARBodyAnchor 的位置姿态信息通过 ARBodyAnchor. skeleton. localTransformfor: ARSkeleton. JointName方法获取指定关节相对于其父节点的位置姿态信息。示例代码如下代码所示。 func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {guard let anchor anchors.first as? ARBodyAnchor else {return}if !isPrinted {isPrinted true//获取root节点在世界坐标系中的姿态let hipWordPosition anchor.transformprint(root transform: \(hipWordPosition))//获取3d骨骼对象let skeleton anchor.skeleton//获取相对于root节点所有节点的姿态信息数组let jointTranforms skeleton.jointModelTransforms//获取在世界空间坐标系中所有节点的姿态信息数组let localTransform skeleton.jointLocalTransforms//遍历姿态信息数字通过下标遍历for (i, jointTransform) in jointTranforms.enumerated() {let name anchor.skeleton.definition.jointNames[i]let parentIndex skeleton.definition.parentIndices[i]guard parentIndex ! -1 else {continue}let parentJointTransform jointTranforms[parentIndex]let parentName anchor.skeleton.definition.jointNames[parentIndex]print(name: \(name),index: \(i), transform: \(String(describing: jointTransform)), parent name: \(parentName),parent index: \(parentIndex) parent transform: \(String(describing: parentJointTransform)))}//通过名字遍历let jointNames anchor.skeleton.definition.jointNamesfor name in jointNames {let landmark anchor.skeleton.modelTransform(for: ARSkeleton.JointName(rawValue: name))let index anchor.skeleton.definition.index(for: ARSkeleton.JointName(rawValue: name))print(\(name),\(String(describing: landmark)),the index is \(index) parent index is \(anchor.skeleton.definition.parentIndices[index]))}}} 代码演示了如何获取 ARKit 生成的 ARBodyAnchor如何获取3D人体所有骨骼关节点名字集合以及各关节点及其父节点索引如何利用关节点名字获取该关节点相对 ARBodyAnchor 的位置信息。捕捉人体3D 姿态信息后除了进行运动姿态分析最重要的用途就是驱动3D 模型在理解ARKit 提供的3D人体骨骼关节点数据结构信息及关联关系之后我们就可以利用这些数据实时驱动三维模型基本思路如下 1建立一个与关节点表一致拥有相同人体骨骼关节点的三维模型。 2 开启 3D人体姿态估计功能。 3建立 ARKit 3D 人体姿态估计骨骼关节点与三维模型骨骼关节点的对应关系并利用3D人体姿态估计骨骼关节点数据驱动三维模型骨骼关节点。 如前文所述我们可以从生成的 ARBodyAnchor 中获取所有骨骼关节点的位置信息利用这些位息就可以将模型关节点与检测到的人体骨骼关节点关联起来。为了简单起见下面我们演示利用检的人体 ARBodyAnchor在人眼处绘制两个球体。代码如下所示。 func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {guard let anchor anchors.first as? ARBodyAnchor else {return}let bodyPosition simd_make_float3(anchor.transform.columns.3) //位置平移信息robotAnchor.position bodyPosition robotOffsetrobotAnchor.orientation Transform(matrix: anchor.transform).rotationif let robotCharacter robotCharacter,robotCharacter.parent nil {robotAnchor.addChild(robotCharacter)}//更新眼睛小球位置guard let leftMatrix anchor.skeleton.modelTransform(for: ARSkeleton.JointName(rawValue: left_eye_joint)),let rightMatrix anchor.skeleton.modelTransform(for: ARSkeleton.JointName(rawValue: right_eye_joint)) else {return}leftEye.position simd_make_float3( leftMatrix.columns.3)rightEye.position simd_make_float3(rightMatrix.columns.3)//跟节点的位置付值给anchoreyeAnchor.position simd_make_float3(anchor.transform.columns.3)} 在代码中我们首先创建了两个球体代表人体的左右两只眼睛然后在 session didUipdateanchors方法中检查 ARBodyAnchor利用检测到的3D人体骨骼左右眼关节点left_eye_joint 和 righ.eye_joint信息设置并实时更新两个球体的位置及方向。需要注意的是在实际使用人体骨骼关节点位置信息时通过 modelTransformfor方法获取的关节点位置是相对于 ARBodyAnchor的位置并不是世界坐标空间中的坐标。在上述代码中获取某特定关节点位置信息我们使用了 modelTransformfor方法通过关节点名字获取该关节点位置数据因为关节点的位置数据存储在数组中使用bodyAnchor.skeleton.jointModelTransformsindex的方式效率更高如左眼索引为54直接将 54作为参数传递即可以获取人体左眼位置数据。上节表列出了所有91 个骨骼关节点的索引值可以直接使用。运行该示例在ARKit 检测到人体时会在人体双眼处放置两个球体效果如图所示。 采用同样的方法可以将获取的所有人体3D骨骼关节点数据绑定到3D模型中的骨骼关节点上并以此来驱动3D模型的运动这是以手工的方式绑定检测到的骨骼关节点与模型。在 RealityKit 中使用了一个名为 BodyTrackedEntity 的实体类描述带骨骼绑定的人体模型如果模型骨骼关节点命名与相互之间的关系与上节表所示一致也可以直接通过使用 Body TrackedEntity.joint Transforms [3] Transform (matrix: body Anchor. skeleton. model Transtorm (for: ARSkeleton. JointName.head语句将检测到的人体关节点位置信息赋给人体模型从而达到驱动模型的目的。 ARKit检测到的3D人体骨骼关节点有91个采用人工绑定骨骼关节点的工作量很大且很容易出错为此RealityKit 会自动检测场景中加载的 BodyTrackedEntity 实体对象并尝试自动执行将检测到的人体骨骼关节点与模型骨骼关节点匹配如果模型骨骼关节点命名和相互之间的关系与表7-3所示一致则无须人工手动绑定RealityKit会自动进行关节点绑定。因此在模型骨骼完全符合要求的情况下利用ARKit检测到的3D人体关节点驱动模型变得格外简单只需要加载模型为 BodyTrackedEntity 实体对象并添加到 AnchorEntity 中。代码如下所示。 // // BodyTracking3DView.swift // ARKitDeamo // // Created by zhaoquan du on 2024/2/1. //import SwiftUIimport SwiftUI import ARKit import RealityKit import Combinestruct BodyTracking3DView: View {var body: some View {BodyTracking3DViewContainer().edgesIgnoringSafeArea(.all).navigationTitle(人体骨架3D检测)} }struct BodyTracking3DViewContainer:UIViewRepresentable {func makeUIView(context: Context) -ARView {let arView ARView(frame: .zero)return arView}func updateUIView(_ uiView: UIViewType, context: Context) {guard ARBodyTrackingConfiguration.isSupported else {return}context.coordinator.arView uiViewlet config ARBodyTrackingConfiguration()config.frameSemantics .bodyDetectionconfig.automaticSkeletonScaleEstimationEnabled trueuiView.session.delegate context.coordinatoruiView.session.run(config)}func makeCoordinator() - Coordinator {Coordinator()}class Coordinator: NSObject,ARSessionDelegate {var arView : ARView? nilvar isPrinted falsevar robotCharacter: BodyTrackedEntity?let robotOffset: SIMD3Float [-0.1, 0, 0]let robotAnchor AnchorEntity()func loadRobot(){var cancellable: AnyCancellable? nilcancellable Entity.loadBodyTrackedAsync(named: robot.usdz).sink { completion inif case let .failure(error) completion {print(无法加载模型,错误\(error.localizedDescription))}cancellable?.cancel()} receiveValue: { body inbody.scale [1.0,1.0,1.0]self.robotCharacter bodyself.arView?.scene.addAnchor(self.robotAnchor)cancellable?.cancel()}}func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {guard let anchor anchors.first as? ARBodyAnchor else {return} // createSphere()loadRobot()}func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {guard let anchor anchors.first as? ARBodyAnchor else {return}let bodyPosition simd_make_float3(anchor.transform.columns.3) //位置平移信息robotAnchor.position bodyPosition robotOffsetrobotAnchor.orientation Transform(matrix: anchor.transform).rotationif let robotCharacter robotCharacter,robotCharacter.parent nil {robotAnchor.addChild(robotCharacter)}}}}在代码中我们首先使用异步的方式加载3D人体模型并对模型中的骨骼信息进行检查如果模型骨骼都符合要求则生成可供驱动的3D 模型对象然后在 sessiondidUpdate anchors方法中实时更新模型的姿态信息。上述代码对 robotAnchor 位置进行了偏移处理这是因为我们获取的ARBodyAnchor 所在位置为检测到的3D人体关节点的Root 位置如果不进行偏移则模型与人体会重合显示代码中我们将模型向X轴负方向移动了 1mARBodyAnchor 位置三维空间中的位置可以向任何方向偏移我们也可以不加这个偏移。编译运行代码将设备摄像头对准真实人体在检测到人体时加载一个机器人并且人体姿态可以实时驱动机器人模型同步运动效果如下图所示。 经过测试目前 ARKit 可以正确检测追踪人体正面或背面站立姿态对坐姿也能比较好地跟踪但不能检测跟踪倒立、俯卧姿态。并且我们在测试中发现实时跟踪一个真实人体与跟踪显示器上视频中的人体跟踪精度似乎没有区别使用iPad Pro 与iPhone 跟踪精度也似乎没有区别。 在人体尺寸估计方面使用纯图像处理时虚拟模型有时会出现跳跃或者突然改变大小的现象。在配备了 LiDAR 传感器的设备上由于可以直接从 LiDAR 传感器中采集到人体深度信息因此在人体尺寸估计方面有很大提升相比使用纯图像方式估计的尺寸精度更高对虚拟模型的大小控制更合理。 从本节与2D检测实例可以看到在运行 ARSession 进行人体检测跟踪时将 ARBody TrackingConfiguration.frameSemantics 设置为 bodyDetection即默认值既可以检测2D人体骨骼关节点也可以检测3D人体骨骼关节点区别是检测的2D 人体骨骼关节点是在屏幕空间中而检测的3D人体骨骼关节点是在世界空间中因此我们一般会在 sessiondidUpdate frame代理方法中处理2D人体检测在 sessiondidUpdate 提示也可以在 sessiondidUpdate anchors代理方法中处理2D人体检测在使用 sessiondidUpdateanchors方法处理2D人体检测时由于获取的ARBodyAnchor 是在世界空间中因此需要按照 3D人体检测的步骤进行处理。 具体代码地址https://github.com/duzhaoquan/ARkitDemo.git
http://www.zqtcl.cn/news/728439/

相关文章:

  • 专业做家居的网站佛山做网站永网
  • 医疗网站建设讯息企业门户网站建设思路
  • 四川建设安全监督管理局网站网站传送门怎么做
  • 哪家网站做推广好优化师和运营区别
  • 鹰潭网站建设公司南宁行业平台开发公司
  • 织梦如何仿手机网站源码奉贤区专业建网站
  • 上海网站建设接单wordpress htaccess 404
  • 长春网站优化指导网站怎样做301跳转
  • 做网站域名是什么意思临沧网站开发
  • 怎么在网站上做网页专业图库网站 西安
  • 龙南建设局网站wordpress 购物导航网站
  • 做数据分析好看的网站自己做背景的网站
  • 做纸棋的网站制作什么网站做毕业设计
  • 上海易雅达网站建设公司广元网站开发
  • 网站备案注销北京优化健康宝
  • 网站地图怎么做XML深圳公共资源交易中心
  • 高碑店做网站的公司湛江专业建站推荐
  • 中国建设银行官网的网站首页c2c电子商务网站建设栏目结构图
  • 做网站的软件图标上海建站外贸
  • 保定网站建设推广成都移动端网站建设
  • 服务平台型网站做那个网站比较好
  • 网站做icp备案需要多久上海人才引进官网
  • 国外的设计网站app有什么好的免费网站做教育宣传语
  • 做期货都看那些网站淮北网
  • 网站建设的需求怎么写网站头条怎么做
  • 宜春seoseo网站自动推广
  • 张家界酒店网站建设人人设计网网址
  • 电脑系统做的好的网站什么网站做一手房好
  • 为什么用MyEclipse做网站上海境外输入
  • 做的比较好的小众网站go 是做网站的吗