- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
很棒的传感器记录器
此存储库包含一系列工具、资源和示例代码,可与 Sensor Logger 应用程序一起使用。

传感器记录器应用程序
Sensor Logger 是一款免费、易于使用的跨平台数据记录器,可记录智能手机上常见运动相关传感器的读数。完成后,记录可以导出为压缩的 CSV 文件、JSON、SQLite、KML,或通过交互式绘图在应用程序中查看。iOS版本附带一个免费的配套手表应用程序,允许您记录心率和手腕运动,并从手腕远程控制记录会话。支持的传感器和测量包括:
- 设备加速(加速度计;原始和校准)
- 重力矢量(加速度计)
- 设备旋转速率(陀螺仪)
- 设备方向(陀螺仪;原始和校准)
- 磁航向(磁力计;原始和校准)
- 气压高度 (Barometer)
- GPS坐标、高度、速度和航向
- 音频 (麦克风)
- Loudness (Microphone) 响度 (麦克风)
- 相机图像(前后,仅前景)
- 摄像头视频(前后,仅前景)
- 计步器(由操作系统估计)
- 心率(需要安装手表应用程序)
- 手腕运动(需要安装手表应用程序)
- 光传感器(仅限 Android)
- 注释(时间戳和可选的随附文本注释)
- 设备电池电量和状态
- 设备屏幕亮度级别
- 附近的蓝牙信标(所有公布的数据)
- 耳机运动(需要 AirPods)
了解更多信息并下载 Sensor Logger at www.tszheichoi.com/sensorlogger.
| Android | iOS |
|---|---|
![]() |
![]() |
执行跨平台分析?
如果您使用 Sensor Logger 执行跨平台分析,请注意 iOS 和 Android 之间的一些细微单位差异和一些重要的坐标系差异。根据您的分析,您可能需要将值乘以负号。请参见 Units 参考 和 Coordinates 参考。
:1.29版本中的新功能:在_设置>传感器配置_下切换标准化单位和框架将消除iOS和Android之间的许多约定差异。有关更多信息,请参阅此内容。
数据分析入门
使用 Sensor Logger 进行的测量可以导出为 、 、 或 格式。对于数据分析,建议使用 zip 导出,因为它是免费的并且包含所有原始数据。有关导出工作原理的更多信息,请参阅 www.tszheichoi.com/sensorloggerhelp。.zip``.csv``.json``.kml``.sqlite
推荐工具
建议使用 Python 来分析 Sensor Logger 的输出。对于交互式数据探索和可视化,请使用 Jupyter Notebooks,您可以通过 Google Colab 或 Deep Notes 等工具轻松免费运行它。典型的数据科学 Python 包适用:
- 用于 CSV 解析和操作的 Pandas
- 用于数据分析的 Numpy
- 用于时间序列分析的 SciPy
- 用于地理空间可视化的 Folium / Leaflet.js
- 用于数据流的 Dash / Flask
了解时间戳
所有导出的数据都有同步的时间戳,这意味着它们可以被交叉引用。但是,由于采样率不同,它们不一定一致。这是设计使然,因此您可以为每个传感器提供最精确的计时。如果您需要交叉传感器重采样,请参阅下面的“跨传感器对齐和插值测量”部分。
- 该列是传感器报告的测量的 UNIX 纪元时间戳,以纳秒为单位。您可以使用 https://www.epochconverter.com/ 等工具将它们转换为可读的时间戳。根据定义,这些是 UTC 时间 -- 而文件名是本地时间。
time - 该列是自点按 开始录制 按钮以来的秒数。请注意,某些条目可能是负数,这意味着测量是在录制开始_之前_进行的,但由于缓冲或缓存,您的手机会在点击_后_报告这些测量值。
seconds_elapsed - 请注意,时间戳的准确性取决于准确的系统时间戳。请确保您手机的时间准确无误,以确保时间戳正确无误。如果您的手机在录制过程中更改时区,也可能导致不可预测的行为。
了解单位
有关单元的完整文档,请参阅 https://github.com/tszheichoi/awesome-sensor-logger/blob/main/UNITS.md。
⚠️ 如果要跨平台分析未校准的加速度数据,则应注意单位定义中存在重要差异。
了解坐标系
有关坐标系的完整文档,请参阅 https://github.com/tszheichoi/awesome-sensor-logger/blob/main/COORDINATES.md。
⚠️ 如果您正在跨平台分析加速度和方向值,那么您应该注意参考框架定义中存在重要差异。
文件处理
Zip 和 CSV
- 通常,只使用 https://docs.python.org/3/library/zipfile.html,但要在 Python 中批量解压,请阅读 https://superfastpython.com/multithreaded-unzip-files/
- 阅读 : 使用 ,请参阅下文。
.csv``pandas - 读取音频文件:取决于您是否在 Sensor Logger 的设置中启用了压缩。
JSON 格式
JSON 导出格式是单个文件,其中内容是对象数组。每个对象表示一条记录(行)。 给定传感器的所有记录都分组在一起,然后按时间排序。
[ { "sensor": "Accelerometer", "time": "1698501144401773000", "seconds_elapsed": "0.21677294921875", "z": "-0.10382747650146484", "y": "-0.0009566396474838257", "x": "0.06110857427120209" }, { "sensor": "Accelerometer", "time": "1698501144411773000", "seconds_elapsed": "0.22677294921875", "z": "-0.10387134552001953", "y": "-0.002205267548561096", "x": "0.06393256038427353" }, { "sensor": "Location", "time": "1698501145514000000", "seconds_elapsed": "1.328999755859375", "bearingAccuracy": "0", "speedAccuracy": "0", "verticalAccuracy": "1.773818016052246", "horizontalAccuracy": "15.102999687194824", "speed": "0", "bearing": "0", "altitude": "214.1999969482422", "longitude": "0.0", "latitude": "0.0" } ]
SQLite
要读取使用 Python 中的 SQLite 选项导出的数据,您可以尝试:
import sqlite3 database_file = 'your_database_file.sqlite' try: connection = sqlite3.connect(database_file) cursor = connection.cursor() sql_query = "SELECT * FROM Accelerometer" cursor.execute(sql_query) results = cursor.fetchall() for row in results: print(row) except sqlite3.Error as e: print(f"SQLite error: {e}") finally: cursor.close() connection.close()
访问录制文件元数据
该文件包含有关执行日志记录的设备的信息。metadata.csv
- version:导出数据的 Schema 版本。这与应用程序的版本不同。当此版本递增时,您可能必须更新数据分析脚本,因为列名、文件名或数据结构等内容可能已更改。
- 设备名称:用于录制的设备的名称。
- recording time:录制的开始时间(UTC 格式)。
- platform:iOS 或 Android。
何时使用未校准的数据
Sensor Logger 允许您选择记录来自加速度计、陀螺仪和磁力计的原始、未校准的数据。始终记录校准的数据。原始流可用于执行较低级别的后处理或自定义传感器融合。如有疑问,请_始终_使用校准版本,除非您有充分的理由不这样做。
绘制数据
用于导入和转换时间戳。使用 Plotly 以交互方式可视化数据。在这里,我们展示了用户在乘坐过山车时所经历的加速度。pandas``.csv
import pandas as pd import plotly.graph_objects as go df = pd.read_csv('Accelerometer.csv') df.index = pd.to_datetime(df['time'], unit = 'ns') fig = go.Figure() for axis in ['x', 'y', 'z']: fig.add_trace(go.Scatter(x = df.index, y = df[axis], name = axis)) fig.show()

一些传感器还可能报告不确定性,这对于分析和多传感器融合非常重要。例如,来自 GPS 的速度具有相关误差。
import pandas as pd import plotly.graph_objects as go df = pd.read_csv('Location.csv') df.index = pd.to_datetime(df['time'], unit='ns') fig = go.Figure() fig.add_trace(go.Scatter(x=df.index, y=df['speed'], mode='markers', error_y={'type': 'data', 'array': df['speedAccuracy']})) fig.show()

诊断采样率
实际测量值永远不会均匀采样。在进行任何分析之前仔细检查很重要。例如,iPhone 上记录的这个特定的 GPS 位置数据为 0.93Hz,但测量间隙在 0.99 到 12 秒之间。avg_sampling_rate
import pandas as pd import numpy as np df = pd.read_csv('Location.csv') consecutive_deltas = df['seconds_elapsed'].diff() avg_sampling_rate = 1 / np.mean(consecutive_deltas) shortest_gap = np.min(consecutive_deltas) maximum_gap = np.max(consecutive_deltas) total_num_of_samples = len(df.index)
要对数据进行重新采样,例如,到分钟周期:
import pandas as pd df = pd.read_csv('Location.csv') df.index = pd.to_datetime(df['time'], unit = 'ns') df.resample('1T').median()
要了解重新采样和处理运动相关时间序列中缺失数据的含义和稳健性,请参阅以下内容:
- https://towardsdatascience.com/preprocessing-iot-data-linear-resampling-dde750910531
- 降低采样率对基于加速度计的身体活动监测和机器学习活动分类的影响:https://www.medrxiv.org/content/10.1101/2020.10.22.20217927v1.full
- 通过重采样进行对比学习以识别人类活动:https://arxiv.org/pdf/2109.02054.pdf
绘制 GPS 轨迹
使用基于 leaflet.js 构建的 Folium 等工具在地图上重叠 GPS 轨迹
- https://towardsdatascience.com/build-interactive-gps-activity-maps-from-gpx-files-using-folium-cf9eebba1fe7
- https://towardsdatascience.com/simple-gps-data-visualization-using-python-and-open-street-maps-50f992e9b676
import folium import pandas as pd df = pd.read_csv("Location.csv") coords = [(row.latitude, row.longitude) for _, row in df.iterrows()] my_map = folium.Map(location=[df.latitude.mean(), df.longitude.mean()], zoom_start=16) folium.PolyLine(coords, color="blue", weight=5.0).add_to(my_map)

或者,使用 https://github.com/mhaberler/sensorlogger-util 将导出的数据转换为 GPS,然后上传到 Google 地图进行可视化,例如,遵循 https://www.alphr.com/gpx-google-maps/。
跨传感器对齐和插值测量
通常,必须调整跨传感器(例如陀螺仪和加速度计)的测量值,以便将旋转矩阵应用于加速度矢量。
- 选项 0:使用 Sensor Logger 内置的“组合 CSV”导出选项。请注意,此功能需要付费订阅层级之一。您可以轻松配置对测量值进行重采样、上采样和下采样的方式。此输出是一个文件,省去了处理对齐问题的麻烦。如果您更喜欢自己动手,请参阅下面的选项 1 和 2。
.csv

- 选项 1:执行外部联接,然后为两个传感器插入缺失值。默认情况下,以线性方式插值,但有关更高级的选项,请参阅文档。
pandas
import pandas as pd import numpy as np df_gyro = pd.read_csv('Gyroscope.csv') df_acce = pd.read_csv('Accelerometer.csv') for df in [df_gyro, df_acce]: df.index = pd.to_datetime(df['time'], unit = 'ns') df = df_gyro.join(df_acce, lsuffix = '_gyro', rsuffix = '_acce', how = 'outer').interpolate()
- 选项 2:将一个传感器插入到另一个传感器的时间戳上 - 如果两个传感器的采样率大相径庭,可能会更好。例如:
np.interp(df_acce.index, df_gyro.index, df_gyro['x'])
使用上面的选项 1,将对 GPS 和气压计的高度读数进行重采样和对齐。如您所见,GPS 在描述快速高度变化方面并不擅长,并且在瞬态期间表现出偏差。

对于更复杂的对齐需求 -- 例如与来自 Sensor Logger 以外的来源的测量值对齐,您可能需要互相关或动态时间规整等技术:
- https://towardsdatascience.com/dynamic-time-warping-3933f25fcdd
- https://dtaidistance.readthedocs.io/en/latest/usage/dtw.html
- https://dynamictimewarping.github.io/
平滑和降噪
不同的应用程序需要不同的平滑和降噪策略。这本 scipy 说明书有一些方便的代码,你可以借用:
- https://scipy-cookbook.readthedocs.io/items/SignalSmooth.html
- https://scipy-cookbook.readthedocs.io/items/SavitzkyGolay.html
- 也试试
scipy.ndimage.median_filter
参考上一节关于插值的章节,使用合适的聚合器(例如中位数)执行下采样或使用合适的样条或多项式函数进行插值也可以实现平滑。您还可以使用 pandas 轻松应用滚动中位数(或滚动平均值)技术,该技术还可以实现平滑和异常消除:
import pandas as pd df_gyro = pd.read_csv('Gyroscope.csv') window_size = 200 smoothed_gyro = df_gyro['x'].rolling(window=window_size, min_periods=1).mean() print(smoothed_gyro)
傅里叶变换
使用 Fourier 变换来了解记录值中的任何周期性。例如,您只需在频率空间中对重力矢量测量值进行阈值处理即可检测行走。这是一个傅里叶改变在 Zodiac(索普公园的旋转游乐设施)上进行的重力测量的简单示例。如您所见,在 0.25 Hz 附近有一个峰值(即每 4 秒行驶一圈)。
import pandas as pd import numpy as np df = pd.read_csv('Gravity.csv') ts = pd.to_datetime(df['time'], unit = 'ns') period = np.nanmedian(ts.diff().dt.total_seconds()) sp = np.fft.fft(df['x']) freq = np.fft.fftfreq(len(df.index), period) mask = (freq >= 0) &(freq < 1) fig = go.Figure() fig.add_trace(go.Scatter(x = freq[mask], y = [np.linalg.norm(s) for s in sp[mask]])) fig.show()

轨道简化
您可以使用 Douglas-Peucker 等算法来简化记录的 GPS 轨迹,以节省长时间记录的存储空间。可在此处找到特定于 Sensor Logger 的实现:https://github.com/mhaberler/sensorlogger-util/blob/master/simplify.py
峰值检测
Scipy 是最容易开始的地方。例如:find_peaks
import pandas as pd import numpy as np from scipy.signal import find_peaks import plotly.graph_objects as go df_accel = pd.read_csv('Accelerometer.csv') signal = df_accel['x'] min_distance = 25 peaks, _ = find_peaks(signal, distance=min_distance) fig = go.Figure() fig.add_trace(go.Scatter(x=peaks, y=signal[peaks], mode='markers', marker=dict(color='red', size=10))) fig.add_trace(go.Scatter(x=range(len(signal)), y=signal, mode='lines')) fig.show() print("Indices of peaks:", peaks)

另请参阅:
- https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html
- https://en.wikipedia.org/wiki/Topographic_prominence
- https://stackoverflow.com/questions/1713335/peak-finding-algorithm-for-python-scipy
活动检测和语义分割
- 使用加速度计进行活动识别的全面研究:https://www.researchgate.net/publication/325470495_A_Comprehensive_Study_of_Activity_Recognition_Using_Accelerometers
- 时间序列数据挖掘任务的有用工具:https://stumpy.readthedocs.io/en/latest/
- Kang et al. 2017 一种使用不受约束的智能手机的新型步行检测和计步算法

时间序列分类
删除重复的条目
有时,错误的传感器可能会使用相同的时间戳报告相同的值两次,这可能是由于缓存造成的。尝试如下操作来删除它们:
def remove_duplicated_rows(df: pd.DataFrame): _df = df[ ~(df["timeStamp"].diff() < 0) ] # be careful that diff() gives nan for first row if len(_df.index) != len(df.index): print( f"duplicated rows detected in the input file ({len(df.index) - len(_df.index)}" ) return _df
音频分析
ffmpeg-python (https://github.com/kkroening/ffmpeg-python)有一些有趣的音频分析的有价值的例子:
- Splitting silence:https://github.com/kkroening/ffmpeg-python/blob/master/examples/split_silence.py
- 使用 Google Cloud 进行音频转录:https://github.com/kkroening/ffmpeg-python/blob/master/examples/transcribe.py
pyAudioAnalysis音频特征提取、分类和分割也值得一试:https://github.com/tyiannak/pyAudioAnalysis
转换为 GPX 或 InfluxDB
Michael Haberler 精心制作了一个命令行工具,用于获取从 Sensor Logger 导出的 JSON,并将其转换为 GPX 或 InfluxDB 格式:https://github.com/mhaberler/sensorlogger-utilsensorlogger-utils
python sensorlogger -g <json file>
python sensorlogger.py -2 [--bucket sensorlogger] --token xxx --org yyyy --url http://host:8086 2022-06-14_03-15-05.json
记录 Bluetooth LE 传感器
1.17 版增加了记录各种蓝牙 LE 传感器报告的值的功能,这些传感器通过定期通告报告值。
Sensor Logger 允许您扫描并选择记录此类 BLE 传感器,并将它们的广告记录在日志中。Sensor Logger 支持这种报告值的方法,但不知道任何特定传感器如何编码其值。因此,Sensor Logger 会记录广告(尤其是制造商数据字段),并将这些记录的解释留给后面的后处理步骤。
这意味着 Sensorlogger _支持_任何使用此报告方法的现有或尚未设计的 BLE 传感器 - 因为它仅实现记录,而不执行特定于传感器的解释步骤。
可以在此处找到应该与 Sensorlogger 一起开箱即用的传感器列表:https://decoder.theengs.io/devices/devices.html - 但是,可以使用此方法的任何设备进行记录。
此外,还可以记录定制的传感器 - 可以在此处找到已验证可与 Sensor Logger 配合使用的示例项目:https://github.com/mhaberler/flowsensor
对 Bluetooth LE 传感器记录进行后处理
要解释 BLE 传感器记录,必须对导出的日志进行后处理。此处汇总了一项实验性服务:https://sensorlogger.mah.priv.at/sensorlogger - 源代码可在此处找到。随意分叉和滚动你自己的。
示例:使用 Sensor Logger 记录 Ruuvi 标签
这是 Sensorlogger 记录 Ruuvi 标签的方式:
{ "sensor": "bluetooth-DB08D33338EF", "time": "1690316310897000000", "seconds_elapsed": "0.906", "rssi": "-79", "id": "DB:08:D3:33:38:EF", "txPowerLevel": "", "manufacturerData": "99040512735828ffff0070fc18012890962ec379db08d33338ef" }
这些值包含在字段中,但就其现有而言没有意义。一种快速而肮脏的解析方法是使用在线解码器。例如,使用 https://parser.theengs.io/。选择 TPMS 并复制并替换整个 manufacturerData。然后点击 decode。如果这是来自公认的传感器,例如这个 Ruuvi Tag 示例,那么您将看到解码后的信息。manufacturerData

后处理 ruuvi 标签报告值后的示例
使用 https://sensorlogger.mah.priv.at/sensorlogger 进行解码将其扩展为实际有意义的值:
{ "sensor": "bluetooth-DB08D33338EF", "time": 1690316310896.9998, "seconds_elapsed": 0.906, "rssi": -79, "id": "DB:08:D3:33:38:EF", "txPowerLevel": "", "values": { "name": "Ruuvi 38EF", "rssi": -79, "brand": "Ruuvi", "model": "RuuviTag", "model_id": "RuuviTag_RAWv2", "type": "ACEL", "track": true, "tempc": 23.615, "tempf": 74.507, "hum": 56.42, "pres": 1155.35, "accx": 0.10983448, "accy": -0.980665, "accz": 0.29027684, "volt": 2.756, "tx": 4, "mov": 46, "seq": 50041, "mac": "DB:08:D3:33:38:EF" } }
实时数据流
:1.30 版本中的新功能:Sensor Logger 现在支持通过 MQTT 推送实时数据。有关更多信息,请参阅 https://github.com/tszheichoi/awesome-sensor-logger/blob/main/PUSHING.md。
Sensor Logger 支持通过 HTTP 推送实时数据。这可以通过点击 Logger 页面上的齿轮图标来启用。录制期间所有启用的传感器将每 200 毫秒流式传输一次到指定的 URL。要显示流数据,您需要在另一台计算机上设置 Web 服务器。

HTTP 推送将 POST 请求发送到提供的 URL,其内容类型为“application/json”。请求正文的格式如下:
{ messageId: 0, sessionId: "identifier", deviceId: "identifier", payload: [ { "name": "accelerometer", "time": 1698501144401773000, <other fields depending on sensor> }, { "name": "location", "time": 1698501145514000000, <other fields depending on sensor> }, ], }
对于发送的每条消息,该 将递增。这很有用,因为消息可以无序接收,这可能需要根据您的使用案例进行处理。对于单个录制中的所有消息,以及来自单个设备的所有消息,都是相同的。该时间以 UTC 纪元纳秒为单位。messageId``messageId``sessionId``deviceId
注意:由于旧版原因,某些传感器会报告准确性以及 和 和 ,仅限 Android 上。为了向后兼容,这被保留下来。解释此字段:name``time
- 0 表示不可靠
- 1 表示准确率低
- 2 表示中等精度
- 3 表示最高准确度
设置 Server
有许多方法可以设置可以接受从 Sensor Logger 推送的消息的服务器 - 从现成的解决方案到自己运行服务器。以下是一些帮助您入门的提示。建议(但不是必需的)服务器使用 HTTP 代码 200 进行响应。如果服务器使用 HTTP 代码 499 进行响应,并且正文包含文本,则将向用户显示此消息(每次录制一次)。
请求箱
要简单地使用和浏览数据,您可能需要使用 https://requestbin.com/ 之类的工具。要实时绘制数据,您可能需要更自定义的内容。有关使用 telegraf 的解决方案,请参阅 https://github.com/mhaberler/sensorlogger-telegraf。
时光加
还可以查看实时流分析平台 Timeplus:。他们还提供 dockerized 解决方案。查看 https://github.com/timeplus-io/proton/tree/develop/examples/awesome-sensor-logger

Javascript Web 服务器
感谢 Harshad Joshi,您可以找到使用 nodejs 的 javascript 实现,该实现适用于专为 Sensor Logger 设计的 Web 服务器:https://github.com/hj91/json-server
Python Web 服务器
如果您更喜欢坚持使用 Python,这里有一个使用 Plotly Dash 的实现来帮助您入门。Dash 在后台由 Flask 提供支持,提供了一种简单的方法来设置 Web 服务器以实现实时、交互式数据可视化。此代码侦听端点,仅过滤来自加速度计的值并绘制它。回调每 触发一次,并使用到目前为止的任何累积测量值更新绘图。如果您想绘制来自其他传感器的测量值,则必须自己自定义此脚本。/data``update_graph()``UPDATE_FREQ_MS
import dash from dash.dependencies import Output, Input from dash import dcc, html, dcc from datetime import datetime import json import plotly.graph_objs as go from collections import deque from flask import Flask, request server = Flask(__name__) app = dash.Dash(__name__, server=server) MAX_DATA_POINTS = 1000 UPDATE_FREQ_MS = 100 time = deque(maxlen=MAX_DATA_POINTS) accel_x = deque(maxlen=MAX_DATA_POINTS) accel_y = deque(maxlen=MAX_DATA_POINTS) accel_z = deque(maxlen=MAX_DATA_POINTS) app.layout = html.Div( [ dcc.Markdown( children=""" # Live Sensor Readings Streamed from Sensor Logger: tszheichoi.com/sensorlogger """ ), dcc.Graph(id="live_graph"), dcc.Interval(id="counter", interval=UPDATE_FREQ_MS), ] ) @app.callback(Output("live_graph", "figure"), Input("counter", "n_intervals")) def update_graph(_counter): data = [ go.Scatter(x=list(time), y=list(d), name=name) for d, name in zip([accel_x, accel_y, accel_z], ["X", "Y", "Z"]) ] graph = { "data": data, "layout": go.Layout( { "xaxis": {"type": "date"}, "yaxis": {"title": "Acceleration ms<sup>-2</sup>"}, } ), } if ( len(time) > 0 ): # cannot adjust plot ranges until there is at least one data point graph["layout"]["xaxis"]["range"] = [min(time), max(time)] graph["layout"]["yaxis"]["range"] = [ min(accel_x + accel_y + accel_z), max(accel_x + accel_y + accel_z), ] return graph @server.route("/data", methods=["POST"]) def data(): # listens to the data streamed from the sensor logger if str(request.method) == "POST": print(f'received data: {request.data}') data = json.loads(request.data) for d in data['payload']: if ( d.get("name", None) == "accelerometer" ): # modify to access different sensors ts = datetime.fromtimestamp(d["time"] / 1000000000) if len(time) == 0 or ts > time[-1]: time.append(ts) # modify the following based on which sensor is accessed, log the raw json for guidance accel_x.append(d["values"]["x"]) accel_y.append(d["values"]["y"]) accel_z.append(d["values"]["z"]) return "success" if __name__ == "__main__": app.run_server(port=8000, host="0.0.0.0")
运行此 Python 脚本并在计算机上访问。然后,您必须在设置页面下的手机上的 Sensor Logger 中输入正确的推送 URL。要找出运行 websever 的设备的 localhost,例如,您可以在 Python 中执行类似操作。http://localhost:8000/
import socket hostname = socket.gethostname() print(socket.gethostbyname(hostname))
例如,如果返回 ,则您要在 Sensor Logger 中输入。使用 “Tap to Test Pushing” 按钮测试 Sensor Logger 是否可以正确到达端点。如果您收到 200 个回复,那么您就可以开始了!像往常一样开始录制,您应该开始看到数据正在流式传输:192.168.1.168``http://192.168.1.168:8000/data

更多用例和应用
根据用户提交的反馈,Sensor Logger 正在用于许多应用程序 - 研究人员和业余爱好者。以下是一些可以帮助您入门的方法。请告诉我,我也会在这里展示您的用例!
已发表的研究
一些最近发表的引用/使用 Sensor Logger 的论文:
- Rodi Laanen, Maedeh Nasri, Richard van Dijk, Mitra Baratchi, Alexander Koutamanis, & Carolien Rieffe.(2023). 预定义运动模式的自动分类:GNSS 和 UWB 技术的比较。
- Shin, J. I. 和 Kim, J. O.:基于众包的方法测量行人空间平坦度的可能性,国际建筑摄影。空间研究所科学, XLVIII-4/W10-2024, 163–168, https://doi.org/10.5194/isprs-archives-XLVIII-4-W10-2024-163-2024, 2024.
- N. Loecher、S. King、J. Cabo、T. Neal 和 K. Kosyluk,“使用移动生物识别技术评估减少自我耻辱的心理健康计划的有效性:正在进行的工作”,2023 年 IEEE 第 17 届自动面部和手势识别 (FG) 国际会议,美国夏威夷州怀可洛亚海滩,2023 年,第 1-6 页,doi:10.1109/FG57933.2023.10042655。
- 艾蒂安,AJ,菲尔德,WE,埃勒斯,SG,托莫伦,R.和哈斯莱特,新泽西州(2024)。测试选定的市售可穿戴设备在检测农业相关事件方面的可行性。农业安全与健康杂志,30(4),181-204。https://doi.org/10.13031/jash.15985
- Degambur, L.-N.(2024). 分散式接触者追踪中的重放攻击预防:一种基于区块链的方法。OALib, 11(02), 1-17.https://doi.org/10.4236/oalib.1111179
- 孙西平,陈静,吴聪,和坤,徐浩哲,冯业波,杜瑞英,&陈先浩。(2024). MagLive:智能手机上基于近场磁传感的语音实时检测。
- Gadelho, J. 和 Guedes Soares, C. (2024)。使用智能手机传感器作为低预算解决方案对浮动双室 OWC 进行实验运动测量。在可再生能源创新中,海上第 6 届海上可再生能源国际会议论文集。
- 张,J.,刘M.C.和朱,Z.(2024)。使用 IMU 时间序列数据进行运动分类的混合 CNN-GRU 模型。机器智能与数据科学杂志, 5.https://doi.org/10.11159/jmids.2024.007
- 张,J.,刘M.C.和朱,Z.(2024)。使用混合 CNN-GRU 模型进行高级运动分类:利用手机中的 IMU 数据。控制、动态系统和机器人技术国际会议。https://doi.org/10.11159/cdsr24.115
- 李,MJ,林,J.和许,L. T.(2024)。探索使用大型语言模型实现无缝定位的自动化数据标准化的可行性。arXiv 预印本 arXiv:2408.12080。
- Vallivaara, I., Dong, Y., & Arslan, T. (2024)。告别旋转手机:SLAM 期间的磁力计校准。arXiv 预印本 arXiv:2409.01242。
- Ray, L. S. S., Geißler, D., Liu, M., 周, B., Suh, S., & Lukowicz, P. (2024).ALS-HAR:利用可穿戴环境光传感器增强基于 IMU 的 HAR。arXiv 预印本 arXiv:2408.09527。
- Yonetani, R., Baba, J., & Furukawa, Y. (2024年10月)。RetailOpt:根据智能手机运动数据和零售设施信息进行选择加入、易于部署的轨迹估计。在 2024 年 ACM 可穿戴计算机国际研讨会论文集(第 125-132 页)中。
如果您使用 Sensor Logger 发布了工作,请随时联系我们或提出拉取请求。
其他用途
- 热气球跟踪
- 飞行数据记录
- 可穿戴技术研究
- 行人航位推算
- 过山车追踪
- 体育研究
- 车辆跟踪
- 花样滑冰分析
- 赏鲸
- 视频稳定功能
- 惯性导航
- 传感器融合 / 卡尔曼滤波 / 数据同化
- 用于照片/视频地理定位的 GPS 数据记录。
贡献
如果您有可能对其他用户有用的脚本或链接,请提交 PR。我还将介绍任何使用 Sensor Logger 的项目,这些项目作为更大的工作流程的一部分进行集成。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...

