前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Windows Phone 7 Motion Sensor 使用指南

Windows Phone 7 Motion Sensor 使用指南

作者头像
ShiJiong
发布于 2018-01-10 09:26:58
发布于 2018-01-10 09:26:58
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

1. 为什么要引入Motion API

在上一篇《Windows Phone 7 数字罗盘使用指南》中,我们已经对WP7中的传感器有所了解,事实上,WP7正是通过这些传感器来获取手机当前的姿态和位置等信息。但是,对于开发者来说,他们所关心的并不是这些数据的值本身,而是这些数据所表示的含义。举个例子,之前做Windows Mobile设备定位应用的时候,一般会涉及到GPS数据的获取。在WM2003平台上,开发者需要自己写串口通信类,实现NEMA数据的解析。分析这个过程,最终我们提供给应用的有意义的数据其实就是经纬度和时间等信息,而并不是原始的NEMA协议数据。因此,微软在WM5.0平台中引入了GPSID(即GPS中间层驱动),对于应用程序来说,GPSID为其提供经纬度等信息;而与GPS硬件打交道的过程,就交给了GPSID。这样一来,应用程序开发者就从中解脱出来了。

    那么,在我看来,Motion API所做的事情,其实质就和GPSID类似。在应用程序开发过程中,如果我们开发者获取原始的传感器数据,然后对其数据进行分析,从而去判断手机的姿态和移动方向,这样一个处理流程确实有点复杂,而且有时候也很难处理,如加速度传感器的返回值中,不仅仅包含了手机移动的加速度,还包括了重力加速度(事实上,在Windows Phone OS 7.0上,处理加速度传感器时,我们的确是需要经历上面的过程)。

因此,在Windows Phone OS 7.1(Mango)中,引入了Motion API,用它来对底层的传感器数据进行分析和处理,从而得到开发者需要的信息,如设备的姿态(yaw, pitch, and roll)、旋转加速度和线性加速度。我们可以对原始的加速度传感器信息与Motion API中的加速度传感器信息进行对比,了解它们的区别。如下图1所示,左边是获取加速度传感器原始数据的页面,右边是获取Motion数据的页面。

图1:加速度传感器的原始数据与Motion获取的数据对比

从Y轴的数据来看,原始的加速度传感器数据包含了重力加速度与手机在外力作用下的加速度,而从Motion API获取到的加速度数据来看,它已经为我们排除了重力加速度的影响。因此,对于开发者而言,Motion API有助于简化应用程序的开发。

2. 使用Motion API的前提

    首先,需要注意的是,一代的Windows Phone 7手机没有开放Motion API。因此,如果想要在Windows Phone OS 7.0上写基于Motion的应用程序,那是无法实现的。但是,自从这个月初微软提供了Mango升级以后,很多设备厂商都对其生产的WP7推送了Mango更新。在OS升级以后,有些设备就提供了对Motion API的支持。如我的三星Focus i917就支持,因此才有了以下的尝试。下文中的内容,参考了MSDN上的文章:How to: Use the Combined Motion API for Windows Phone

3. 如何在应用程序中使用Motion API?

    这里以silverlight应用程序为例,展示了在应用程序中使用Motion API的方法。

(1)添加对Microsoft.Devices.Sensors与Microsoft.Xna.Framework的引用,如下图2所示:

图2:添加Motion API相关的namespace

(2)在主页面的XAML中,加入6个Textblock,表示手机姿态的yall、pitch、roll和加速度传感器的三个返回值。为了使得表现形式更加得直观,引入三个三角形,用其旋转的角度来表征yall、pitch、roll的数值,同时引入三个相互垂直的轴线,用来表示加速度传感器的值,其代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1:         <!--TitlePanel contains the name of the application and page title-->
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   2:          <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   3:              <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   4:              <TextBlock x:Name="PageTitle" Text="Simple Motion" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   5:          </StackPanel>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   6:   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   7:          <StackPanel>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   8:              <TextBlock Text="attitude" Margin="12,130,0,28" Style="{StaticResource PhoneTextLargeStyle}"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   9:              <Grid Margin="12 0 12 0">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  10:                  <TextBlock Height="30" HorizontalAlignment="Left"  Name="yawTextBlock" Text="YAW: 000" VerticalAlignment="Top" Foreground="Red" FontSize="25" FontWeight="Bold"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  11:                  <TextBlock Height="30" HorizontalAlignment="Center"  Name="pitchTextBlock" Text="PITCH: 000" VerticalAlignment="Top" Foreground="Green" FontSize="25" FontWeight="Bold"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  12:                  <TextBlock Height="30" HorizontalAlignment="Right"   Name="rollTextBlock" Text="ROLL: 000" VerticalAlignment="Top"  Foreground="Blue" FontSize="25" FontWeight="Bold"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  13:              </Grid>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  14:              <Grid Height="200">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  15:                  <Polygon Name="yawtriangle" Points="45,135 80,50 115,135"  Stroke="Red" StrokeThickness="2" >
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  16:                      <Polygon.Fill>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  17:                          <SolidColorBrush Color="Red" Opacity="0.3"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  18:                      </Polygon.Fill>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  19:                      <Polygon.RenderTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  20:                          <RotateTransform CenterX="80" CenterY="100"></RotateTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  21:                      </Polygon.RenderTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  22:                  </Polygon>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  23:                  <Polygon Name="pitchtriangle" Points="205,135 240,50 275,135" Stroke="Green" StrokeThickness="2" >
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  24:                      <Polygon.Fill>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  25:                          <SolidColorBrush Color="Green" Opacity="0.3"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  26:                      </Polygon.Fill>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  27:                      <Polygon.RenderTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  28:                          <RotateTransform CenterX="240" CenterY="100"></RotateTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  29:                      </Polygon.RenderTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  30:                  </Polygon>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  31:                  <Polygon Name="rolltriangle" Points="365,135 400,50 435,135" Stroke="Blue" StrokeThickness="2" >
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  32:                      <Polygon.Fill>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  33:                          <SolidColorBrush Color="Blue" Opacity="0.3"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  34:                      </Polygon.Fill>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  35:                      <Polygon.RenderTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  36:                          <RotateTransform CenterX="400" CenterY="100"></RotateTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  37:                      </Polygon.RenderTransform>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  38:                  </Polygon>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  39:              </Grid>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  40:              <TextBlock Text="acceleration" Style="{StaticResource PhoneTextLargeStyle}"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  41:              <Grid Margin="12 0 12 0">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  42:                  <TextBlock Height="30" HorizontalAlignment="Left"  Name="xTextBlock" Text="X: 000" VerticalAlignment="Top" Foreground="Red" FontSize="25" FontWeight="Bold"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  43:                  <TextBlock Height="30" HorizontalAlignment="Center"  Name="yTextBlock" Text="Y: 000" VerticalAlignment="Top" Foreground="Green" FontSize="25" FontWeight="Bold"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  44:                  <TextBlock Height="30" HorizontalAlignment="Right"   Name="zTextBlock" Text="Z: 000" VerticalAlignment="Top"  Foreground="Blue" FontSize="25" FontWeight="Bold"/>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  45:              </Grid>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  46:              <Grid Height="300">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  47:                  <Line x:Name="xLine" X1="240" Y1="150" X2="340" Y2="150" Stroke="Red" StrokeThickness="4"></Line>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  48:                  <Line x:Name="yLine" X1="240" Y1="150" X2="240" Y2="50" Stroke="Green" StrokeThickness="4"></Line>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  49:                  <Line x:Name="zLine" X1="240" Y1="150" X2="190" Y2="200" Stroke="Blue" StrokeThickness="4"></Line>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  50:              </Grid>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  51:          </StackPanel>

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

(3)在主页面的MainPage.xaml.cs中,声明一个Motion类的对象。

(4)重写页面的OnNavigatedTo(NavigationEventArgs)方法,检查设备是否支持Motion,初始化Motion对象,添加CurrentValueChanged事件,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1:  protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   2:  {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   3:    // Check to see whether the Motion API is supported on the device.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   4:    if (! Motion.IsSupported)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   5:    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   6:      MessageBox.Show("the Motion API is not supported on this device.");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   7:      return;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   8:    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   9:   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  10:    // If the Motion object is null, initialize it and add a CurrentValueChanged
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  11:    // event handler.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  12:    if (motion == null)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  13:    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  14:      motion = new Motion();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  15:      motion.TimeBetweenUpdates = TimeSpan.FromMilliseconds(20);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  16:      motion.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<MotionReading>>(motion_CurrentValueChanged);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  17:    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  18:   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  19:    // Try to start the Motion API.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  20:    try
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  21:    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  22:      motion.Start();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  23:    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  24:    catch (Exception ex)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  25:    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  26:      MessageBox.Show("unable to start the Motion API.");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  27:    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  28:  }

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

(5)通过周期性地调用CurrentValueChanged事件获得Motion数据,但是该事件是在后台进程中调用,无法对UI元素进行更改。因此,我们需要在UI线程中使用BeginInvoke来调用CurrentValueChanged。

(6)创建CurrentValueChanged方法,在其中设置6个Textblock和4个图的内容。使用XNA Framework中的MathHelper类实现弧度和角度的转换,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1:  private void CurrentValueChanged(MotionReading e)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   2:  {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   3:    // Check to see if the Motion data is valid.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   4:    if (motion.IsDataValid)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   5:    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   6:      // Show the numeric values for attitude.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   7:      yawTextBlock.Text = "YAW: " + MathHelper.ToDegrees(e.Attitude.Yaw).ToString("0") + "°";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   8:      pitchTextBlock.Text = "PITCH: " + MathHelper.ToDegrees(e.Attitude.Pitch).ToString("0") + "°";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   9:      rollTextBlock.Text = "ROLL: " + MathHelper.ToDegrees(e.Attitude.Roll).ToString("0") + "°";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  10:   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  11:      // Set the Angle of the triangle RenderTransforms to the attitude of the device.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  12:      ((RotateTransform)yawtriangle.RenderTransform).Angle = MathHelper.ToDegrees(e.Attitude.Yaw);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  13:      ((RotateTransform)pitchtriangle.RenderTransform).Angle = MathHelper.ToDegrees(e.Attitude.Pitch);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  14:      ((RotateTransform)rolltriangle.RenderTransform).Angle = MathHelper.ToDegrees(e.Attitude.Roll);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  15:   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  16:      // Show the numeric values for acceleration.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  17:      xTextBlock.Text = "X: " + e.DeviceAcceleration.X.ToString("0.00");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  18:      yTextBlock.Text = "Y: " + e.DeviceAcceleration.Y.ToString("0.00");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  19:      zTextBlock.Text = "Z: " + e.DeviceAcceleration.Z.ToString("0.00");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  20:   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  21:      // Show the acceleration values graphically.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  22:      xLine.X2 = xLine.X1 + e.DeviceAcceleration.X * 100;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  23:      yLine.Y2 = yLine.Y1 - e.DeviceAcceleration.Y * 100;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  24:      zLine.X2 = zLine.X1 - e.DeviceAcceleration.Z * 50;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  25:      zLine.Y2 = zLine.Y1 + e.DeviceAcceleration.Z * 50;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  26:    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  27:  }

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

4. 测试结果

    对三星Focus i917(已升级到Mango,版本号为7720.68)进行Compass测试,获得的结果如下图3所示:

图3:Focus上的Motion API测试结果

参考链接:

1. How to: Use the Combined Motion API for Windows Phone

2. Sensors Overview for Windows Phone

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-10-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
深度学习算法优化系列十七 | TensorRT介绍,安装及如何使用?
由于前期OpenVINO的分享已经基本做完了,笔者也可以成功的在CPU和Intel神经棒上完整的部署一些工作了,因此开始来学习TensorRT啦。先声明一下我使用的TensorRT版本是TensorRT-6.0.1.5 。
BBuf
2020/03/06
6.2K0
GPU推理服务性能优化之路 | 得物技术
随着CV算法在业务场景中使用越来越多,给我们带来了新的挑战,需要提升Python推理服务的性能以降低生产环境成本。为此我们深入去研究Python GPU推理服务的工作原理,推理模型优化的方法。最终通过两项关键的技术: 1.Python的GPU与CPU进程分离,2.使用TensorRT对模型进行加速,使得线上大部分模型服务QPS提升5-10倍左右,大量节约了线上GPU推理服务的成本。
用户10346649
2023/03/10
9800
GPU推理服务性能优化之路 | 得物技术
外卖广告大规模深度学习模型工程实践
总第520篇 2022年 第037篇 在外卖广告CTR场景下,深度学习模型正在从简单DNN小模型过渡到千亿参数复杂模型。基于该背景,本文将重点针对大规模深度模型在全链路带来的挑战,从在线时延、离线效率两个方面展开,阐述外卖广告在大规模深度模型上的工程实践经验,希望能为读者提供思路上的借鉴。 导语 1 背景 2 分析 3 模型推理 3.1 分布式 3.2 CPU加速 3.3 GPU加速 4 特征服务CodeGen优化 4.1 全流程CodeGen优化 4.2 传输优化 4.3 高维ID特征编码 5 样本构建
美团技术团队
2022/07/07
7930
外卖广告大规模深度学习模型工程实践
NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
12月22日,量子位联合NVIDIA英伟达举行了线下交流会,跟现场近百位开发者同学共同探讨了如何用TensorRT加速深度学习推理计算,详细讲解了GPU的推理引擎TensorRT,以及如何配合Deepstream实现完整加速推理的解决方案。
量子位
2019/04/24
1.5K0
NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
NVIDIA何琨:AI视频处理加速引擎TensorRT及Deepstream介绍
近日,爱奇艺技术沙龙“多模态视频人物识别的关键技术及应用”成功举办,英伟达开发者社区经理何琨出席并作出精彩分享,以下为分享实录:
量子位
2019/05/16
2.1K0
NVIDIA何琨:AI视频处理加速引擎TensorRT及Deepstream介绍
在NVIDIA Jetson平台上部署深度学习模型需要知道的6个技巧
本文整理自讲座: 演讲者为: 功能强大的低能耗设备的引入引发了可以在边缘运行的高级 AI 方法的新时代。但是由于与边缘设备相关的严格限制,在边缘训练和部署深度学习模型可能会令人生畏。您如何构建一个不太复杂或太大而无法在边缘设备上运行的模型,但仍能充分利用可用硬件?NVIDIA Jetson是当今最受欢迎的低功耗边缘硬件系列之一。它旨在加速边缘硬件上的深度学习模型,无论是机器人、无人机、物联网设备还是自动驾驶汽车。 是什么让 Jetson 上的深度学习变得困难? 在最好的情况下,深度学习并不是那么容易做好
GPUS Lady
2022/03/04
3.1K0
计算机视觉深度学习训练推理框架
前言 本文整理了一些深度学习训练推理框架,涉及计算机视觉、语音、时序任务上的框架,共计20多种。
小白学视觉
2025/02/05
1660
计算机视觉深度学习训练推理框架
英伟达CUDA介绍及核心原理
CUDA定义了一种针对GPU特性的指令集,允许程序员直接编写针对GPU硬件的代码。这些指令专为大规模并行处理而设计,能够高效地驱动GPU上的数千个并行处理单元(如CUDA核心或流处理器)同时工作。
用户7353950
2024/04/30
4.2K0
英伟达CUDA介绍及核心原理
推荐!私藏的深度学习模型推理加速项目
深度学习一般分为训练和部署两大部分。训练部分首先也是最重要的是构建网络结构,准备数据集,使用各种框架进行训练,训练要包含validation和test的过程,最后对于训练好的模型要在实际业务中进行使用。训练的操作一般在线下,实时数据来之后在线训练的情况比较少,大多数情况下数据是离线的,已经收集好的,数据更新不频繁的一天或一周一收集,数据更新频繁的可能几十分钟,在线下有大规模的集群开始对数据或模型进行更新,这样的训练需要消耗大量的GPU,相对而言一般会给一个比较大的batchsize,因为它的实时性要求相对较低,一般训练模型给的是128,甚至有些极端的1024,大的batch的好处是可以充分的利用GPU设备。
AI算法修炼营
2020/05/08
1.4K0
为什么 CUDA 对深度学习至关重要 ?
毫无疑问,你可能已经听说过 CUDA,并且知道它与 NVIDIA GPU 有关。但你可能对 CUDA 的确切含义和用途还不甚了解。究竟,CUDA 是什么呢?它只是一个与 GPU 进行对话的库吗?如果是,它是一个 C++ 库,还是可以通过 Python 等高级语言进行调用?或者,CUDA 是为 GPU 编写代码的编译器?它是否是让操作系统与 GPU 进行通信的驱动程序?...
Luga Lee
2024/11/01
4250
为什么 CUDA 对深度学习至关重要 ?
【AI系统】推理系统介绍
推理系统是一个专门用于部署神经网络模型,执行推理预测任务的 AI 系统。它类似于传统的 Web 服务或移动端应用系统,但专注于 AI 模型的部署与运行。通过推理系统,可以将神经网络模型部署到云端或者边缘端,并服务和处理用户的请求。因此,推理系统也需要应对模型部署和服务生命周期中遇到的挑战和问题。
用户11307734
2024/12/02
2980
来份TensorRT的教程,要实战的哟!
对于Lady来说,我信了你的邪!我决定把之前发布的关于TensorRT的视频教程再综合地整理一遍。
GPUS Lady
2019/06/14
5K0
来份TensorRT的教程,要实战的哟!
旋转目标检测模型-TensorRT 部署(C++)
这次工程部署主要选择了比较熟悉的旋转选择框架-GGHL。如果没有特殊算子的检测框架,依然可以使用下面的这个Pipeline, 旋转目标检测主要分成五参数和八参数的表征方法,分别对应的 x,y,w,h.以及对应的八参数的转化求法 x_1,y_1,x_2,y_2,x_3,y_3,x_4,y_4 。这两种方式在后处理的时候可以互相转换,我们这里选择后者。
墨明棋妙27
2022/09/27
1.7K0
旋转目标检测模型-TensorRT 部署(C++)
深度学习算法优化系列二十 | TensorRT 如何进行细粒度的Profiling
今天我将以GoogleNet为例来展示如何在TensorRT中实现细粒度的Profiling并且顺带介绍一下TensorRT的16Bit推理。
BBuf
2020/03/19
3.3K0
深度学习算法优化系列二十 | TensorRT 如何进行细粒度的Profiling
PyTorch 2.7 发布,进一步助力 NVIDIA 技术生态加速产业智能化转型
全球领先的开源深度学习框架 PyTorch 正式发布 2.7 版本。此次版本不仅在性能、稳定性和开发体验方面进行了重要升级,更进一步强化了与 NVIDIA 全栈技术平台的深度协作,为生成式AI、大模型部署、自动驾驶、智慧医疗等产业应用提供了更强有力的技术支撑。
GPUS Lady
2025/04/28
2350
PyTorch 2.7 发布,进一步助力 NVIDIA 技术生态加速产业智能化转型
为什么深度学习模型在GPU上运行更快?
当前,提到深度学习,我们很自然地会想到利用GPU来提升运算效率。GPU最初是为了加速图像渲染和2D、3D图形处理而设计的。但它们强大的并行处理能力,使得它们在深度学习等更广泛的领域中也发挥了重要作用。
数据科学工厂
2024/07/05
2140
为什么深度学习模型在GPU上运行更快?
推理速度数倍提升,大幅简化多GPU后端部署:Meta发布全新推理引擎AITemplate
机器之心报道 机器之心编辑部 刚刚,Meta 发布了革命性的推理引擎 AITemplate。测试结果显示,相比 PyTorch Eager,AITemplate 在 NVIDIA GPU 上实现了最高 12 倍的性能提升,在 AMD GPU 上实现了高达 4 倍的性能提升。 众所周知,GPU 在各种视觉、自然语言和多模态模型推理任务中都占据重要位置。然而,对于高性能 GPU 推理引擎,AI 从业者几乎没有选择权,必须使用一些平台专有的黑盒系统。这意味着如果要切换 GPU 供应商,就必须重新实现一遍部署系统
机器之心
2022/10/08
1.2K0
推理速度数倍提升,大幅简化多GPU后端部署:Meta发布全新推理引擎AITemplate
深度 | 英伟达深度学习Tensor Core全面解析
AI 科技评论消息,不久前,NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构——Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的飞跃。Turing架构的两大重要特性便是集成了用于光线追踪的RT Core以及用于AI计算的Tensor Core,使其成为了全球首款支持实时光线追踪的GPU。
AI科技评论
2018/09/21
4K0
深度 | 英伟达深度学习Tensor Core全面解析
CUDA驱动深度学习发展 - 技术全解与实战
CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一个并行计算平台和应用编程接口(API)模型。它允许开发者使用NVIDIA的GPU进行高效的并行计算,从而加速计算密集型任务。在这一节中,我们将详细探讨CUDA的定义和其演进过程,重点关注其关键的技术更新和里程碑。
TechLead
2023/12/14
1.2K0
CUDA驱动深度学习发展 - 技术全解与实战
【AI系统】GPU 架构回顾(从2010年-2017年)
1999 年,英伟达发明了 GPU(graphics processing unit),本文将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒(Kepler)、麦克斯韦(Maxwell)、帕斯卡(Pashcal)、伏特(Volt)、图灵(Turing)、安培(Ampere)和赫柏(Hopper)和布莱克韦尔(Blackwell)架构。经过 15 年的发展,CUDA 已成为英伟达的技术“护城河”,Tensor Core5.0,NVLink5.0,NVswitch4.0,Transformer Engine2.0 等技术迭代更新,正如英伟达公司官方宣传语所言:“人工智能计算领域的领导者,推动了 AI、HPC、游戏、创意设计、自动驾驶汽车和机器人开发领域的进步。”
用户11307734
2024/11/27
3070
推荐阅读
相关推荐
深度学习算法优化系列十七 | TensorRT介绍,安装及如何使用?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档