Where am I 解析

sdq
Explore, Think, Create
3 min readApr 20, 2017

这里是开源项目地址

接触室内定位还是在研究室的那段时间里,那个时候机器学习和人工智能还不像现在这么火,SVM和神经网络还处在平级的阶段。最近又偶然看到whereami,希望通过源码让自己重新看看室内定位这个领域。

先看看whereami的效果如何。首先你需要一台笔记本,之前我的研究基本都是在Android设备上进行的,原因是移动比较方便,iOS其实也是可以的,但必须越狱才能使用到Wifi的框架。

笔记本安装非常简单,python环境,一条pip命令。

pip install whereami

可以端着笔记本使用了

# 在卧室里采样100个点
whereami learn -l bedroom -n 100

# 在厨房里采样100个点
whereami learn -l kitchen -n 100

# 列出已经学习到的位置
whereami locations

# 历史数据的交叉验证准确度
whereami crossval
# 0.99319

# 说出“我”在哪儿
whereami predict | say
# 计算机说: "bedroom!"

# 定位概率列表
whereami predict_proba
# {"bedroom": 0.99, "kitchen": 0.01}

精度说明:水平方向10米左右误差可以做到大于99%的精度,据说垂直精度可以做的更好(楼层的区分?)。如果条件允许,尽量在位置之间往返进行数据采集与训练(在A处20次,在B处20次,再回到A处20次)。

learn.py

数据采集:获取此时地点的WiFi数据 (get_data.py)

{
"quality": 100,
"bssid": "XX:XX:XX:XX:XX:84",
"ssid": "X",
"security": "XX"
}

把采集后的数据写入位置标签对应的TXT文件中.

pipeline.py

项目针对模型训练设计了一套管道,管道机制实现了对全部步骤的流式化封装和管理。 这里的pipeline只有两步: 1. 键值字典转化为向量。 2. 随机森林分类器。 训练后的模型序列化为pkl文件存放。

predict.py

通过简单的交叉验证,可以查看训练数据集的准确程度。 最终预测位置的方法非常简单,直接使用模型 lp.predict(sample()), 选取第一个概率最大的位置即刻。

简单总结一下,代码和实现逻辑都非常简单,采用的方案其实还是传统的WiFi指纹定位的方法,可以入手的点还是在训练与预测信号指纹数据,其实本质上就是一个机器学习问题。整体的准确度还是和几年前的效果差别不大,瓶颈大多是在无线信号的不稳定性。作为一个实验性的项目来说,可玩性还行,感兴趣可以尝试尝试,或者可以探索一下相关物联网方向的应用。

--

--