在8月31号,Xbox披露了首批将于10月26号发布的Windows 8 Xbox游戏。其中有29个游戏来自于Microsoft Studio-部分为Windows 8独占。Xbox同时还宣布他们已得到来自Rovio,Miniclip,Gameloft,ZeptoLab, Glu Mobile, Halfbrick Studios的支持,这些游戏厂商同样将发布有游戏在首波Xbox游戏中。正在酝酿中的新版本游戏也将在假期后发布。
这些游戏将非常容易在Windows 8的Games应用中找到,并且在Windows Store中下载。Windows 8中的Xbox游戏将同样拥有Xbox成就,还有某些Xbox的特性例如排行榜,多玩家游戏模式和与朋友一起连接玩。
下面便是这批游戏的名单:
1.4 Elements II Special Edition
2.A World of Keflings
3.Adera: Episode 1
4.Adera: Episode 2
5.Adera: Episode 3
6.Angry Birds
7.Angry Birds Space
8.Big Buck Hunter Pro
9.BlazBlue Calamity Trigger
10.Collateral Damage
11.Crash Course GO
12.Cut the Rope
13.Disney Fairies
14.Dragon‘s Lair
15.Field & Stream Fishing
16.Fruit Ninja
17.Gravity Guy
18.Gunstringer: Dead Man Running
19.Hydro Thunder Hurricane
20.IloMilo
21.iStunt 2
22.Jetpack Joyride
23.Kinectimals Unleashed
24.Microsoft Mahjong
25.Microsoft Minesweeper
26.Microsoft Solitaire Collection
27.Monster Island
28.PAC-MAN Championship Edition DX
29.Pinball FX 2
30.Reckless Racing Ultimate
31.Rocket Riot 3D
32.Shark Dash
33.Shuffle Party
34.Skulls of the Shogun
35.Taptiles
36.Team Crossword
37.The Harvest HD
38.Toy Soldiers Cold War
39.Wordament
40.Zombies!!!
运动目标跟踪的目的是确定各运动目标的运动轨迹。
所以,要确定当前检测的目标与以往检测到的目标(受跟踪的动态目标)的关系。
1. 目标检测、分割
2. 目标特征匹配
3. 目标的特征估计与校正
运动目标的匹配特征信息一般包括:
1. 位置
2. 大小,size
3. 形状,如高宽比
4. 颜色,(已知的试验中,不太可靠)
5. 边缘特征
目标是动态的,所以,以上特征信息一般也是随着序列图像不断变化的。所以,估计、测量与校正形成一个反馈系统,利于目标跟踪。
目标跟踪的目的:
一是更好的检测或监控,如行人,车辆持续跟踪
二是对目标进行一些统计,如车辆数目统计
其实两个应用本质相同:检测是否是新目标,去除序列图像中的重复检测。
以目标的位置特征为例:
x ( t) = Ax ( t - 1)
x ( t) = (x , y , dx ,dy)T, x, y为位置坐标,dx,dy为速度
A =
1 0 1 0
0 1 0 1
0 0 1 0
0 0 0 1
由x(t-1)的位置,预估下一个位置为 !x(t)
目标观测为y(t)=(x, y)T.
状态更新为 x(t) = !x(t) + K(t)*[y(t)-H*!x(t)]
在预估的位置,设置一个区域,进行搜索匹配,若在此区域中搜索到目标,并匹配大于阈值,则此目标为持续跟踪的目标,可以去除重复检测,若为匹配特征小于阈值,则可能为新目标。
序列图像里,单个目标的状态有:
1. 目标出现
2. 目标持续存在
3. 目标消失
而多个目标的状态还存在更复杂的情况:
1. 目标重叠
这种情况在实际应用中复杂但更为常见。这时,要考虑目标的重合与分离状况。
在实际的开发应用中,会应用多种特征和更复杂的模型来跟踪目标,但其原理是不变的,把握这种思路,也就不会无从下手了。
在行人、车辆检测时,检测新目标需要更高的阈值进行确认,而跟踪已知的目标,则利用特征的变化,跟踪阈值会放宽。这就是目标跟踪的距离比新目标检测更远些的原因吧。
使用Android自带的LocationManager和Location获取位置的时候,经常会有获取的location为null的情况,并且操作起来也不是很方便,在这个Demo里我使用了百度地图API中的定位SDK,可以一次性获取当前位置经纬度以及详细地址信息,还可以获取周边POI信息,同时可以设定位置通知点,当到达某一位置时,发出通知信息等方式来告知用户。jar包下载以及官方文档请参照:百度定位SDK,前提是需要注册百度开发者账号。
下面来看看定位的基本原理,目前,定位SDK可以通过GPS、基站、Wifi信号进行定位。基本定位流程如下图所示,当应用程序向定位SDK发起定位请求时,定位SDK会根据当前的GPS、基站、Wifi信息生成相对应的定位依据。然后定位SDK会根据定位依据来进行定位。如果需要,定位SDK会向定位服务器发送网络请求。定位服务器会根据请求的定位依据推算出对应的坐标位置,然后根据用户的定制信息,生成定位结果返回给定位SDK。
到官方下载jar文件后添加到工程,工程目录截图如下:
注意要把locSDK_2.4.jar添加到当天工程,右键jar文件-Build path-Add to。。。
上代码
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btn_start" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Start"/> <TextView android:id="@+id/tv_loc_info" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18sp" /> </LinearLayout>
配置文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ericssonlabs" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </permission> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission> <uses-permission android:name="android.permission.READ_LOGS" > </uses-permission> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".LocationDemoActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.baidu.location.f" android:enabled="true" android:permission="android.permission.BAIDU_LOCATION_SERVICE" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.4" /> </intent-filter> </service> </application> </manifest>
实现代码:
public class LocationDemoActivity extends Activity { private TextView locationInfoTextView = null; private Button startButton = null; private LocationClient locationClient = null; private static final int UPDATE_TIME = 5000; private static int LOCATION_COUTNS = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); locationInfoTextView = (TextView) this.findViewById(R.id.tv_loc_info); startButton = (Button) this.findViewById(R.id.btn_start); locationClient = new LocationClient(this); //设置定位条件 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); //是否打开GPS option.setCoorType("bd09ll"); //设置返回值的坐标类型。 option.setPriority(LocationClientOption.NetWorkFirst); //设置定位优先级 option.setProdName("LocationDemo"); //设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。 option.setScanSpan(UPDATE_TIME); //设置定时定位的时间间隔。单位毫秒 locationClient.setLocOption(option); //注册位置监听器 locationClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { // TODO Auto-generated method stub if (location == null) { return; } StringBuffer sb = new StringBuffer(256); sb.append("Time : "); sb.append(location.getTime()); sb.append("\nError code : "); sb.append(location.getLocType()); sb.append("\nLatitude : "); sb.append(location.getLatitude()); sb.append("\nLontitude : "); sb.append(location.getLongitude()); sb.append("\nRadius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation){ sb.append("\nSpeed : "); sb.append(location.getSpeed()); sb.append("\nSatellite : "); sb.append(location.getSatelliteNumber()); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){ sb.append("\nAddress : "); sb.append(location.getAddrStr()); } LOCATION_COUTNS ++; sb.append("\n检查位置更新次数:"); sb.append(String.valueOf(LOCATION_COUTNS)); locationInfoTextView.setText(sb.toString()); } @Override public void onReceivePoi(BDLocation location) { } }); startButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (locationClient == null) { return; } if (locationClient.isStarted()) { startButton.setText("Start"); locationClient.stop(); }else { startButton.setText("Stop"); locationClient.start(); /* *当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。 *调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。 *如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求, *返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。 *定时定位时,调用一次requestLocation,会定时监听到定位结果。 */ locationClient.requestLocation(); } } }); } @Override protected void onDestroy() { super.onDestroy(); if (locationClient != null && locationClient.isStarted()) { locationClient.stop(); locationClient = null; } } }
来看看最后实现效果,点击Start后进入位置监听状态,根据设置的监听时间间隔进行定位,如果位置有变化则进行位置更新,同时显示了检测位置更新的次数,如果开启了GPS,则获取到卫星后,进行GPS定位:
设置位置提醒的功能我这里就没实现了,感兴趣的可以参考开发指南
欢迎关注我的新浪微博和我交流:@唐韧_Ryan