为3d mobile d的分类寻求建议

2024-10-03 21:27:10 发布

您现在位置:Python中文网/ 问答频道 /正文

项目

我正在从事一个项目,其最终目标是根据3D(加速度计和陀螺仪)运动(位移、速度、加速度和急动)以及2D交互(速度、加速度、“触碰”次数等)的读数,对智能手机上的用户输入/行为进行分类。我的分类器必须输出用户是否参与/沮丧/可能还有其他受此paper影响的情绪。但是,在这一步中不需要这些。你知道吗

数据

智能手机会生成JSON文件,其中包含手机的x、y和z位置,以及时间戳。每2000毫秒就有一个新的时间戳。你知道吗

想法

到目前为止,我已经完成了一些Python教程并在底部生成了代码。有人建议我使用NumPy和SciPy来让我的生活更轻松。除了明显的运动学,我需要包括一个过滤过程。谷歌建议使用卡尔曼滤波器。你知道吗

问题

如果有人有这方面的经验,他们能推荐一种方法来解决这个问题吗,也许你遇到过一个类似的项目,方法很好。你知道吗

import sqlalchemy
import json
import ReferenceFrame, get_motion_params, dynamicsymbols, symbols

con = sqlalchemy.create_engine('postgresql+psycopg2://postgres:@localhost/airlib')
meta = sqlalchemy.MetaData(bind=con, reflect=True)


dataObjects = []
dataAccObjects = []
dataGyroObjects = []

displacementChangeInX = []
displacementChangeInY = []
displacementChangeInZ = []


t = []  #time
v = []  #velocity
a = []  #acceleration
j = []  #jerk


results = meta.tables['rawmobiledata']


class DataEntry(object):
    item = 0
    time = 0
    x = 0
    y = 0
    z = 0

def __init__(self, item, time, x, y, z):
    self.item = item
    self.time = time
    self.x = x
    self.y = y
    self.z = z



def make_accelerometerEntry(item, time, x, y, z):
    dataAcc = DataEntry(item ,time, x, y, z)
    #print str(dataAccObjects)
    return dataAcc

def make_gyroEntry(item, time, x, y, z):
    dataGyro = DataEntry(item, time, x, y, z)
    #print str(dataGyroObjects)
    return dataGyro



for row in con.execute(results.select()):
        r = row[1]
        r = json.dumps(r)
        loaded_r = json.loads(r)
        #print(loaded_r)

        if loaded_r['sensor'] == 'accelerometer':
            for item in range(0, 250):
                time = loaded_r['data'][item]['time']
                x = loaded_r['data'][item]['x']
                y = loaded_r['data'][item]['y']
                z = loaded_r['data'][item]['z']
                dataAccObjects.append(make_accelerometerEntry(item, time, x, y, z))
                #print "this is an accelerometerObj"
        elif loaded_r['sensor'] == 'gyroscope':
            for item in range(0, 250):
                time = loaded_r['data'][item]['time']
                x = loaded_r['data'][item]['x']
                y = loaded_r['data'][item]['y']
                z = loaded_r['data'][item]['z']
                dataGyroObjects.append(make_gyroEntry(item, time, x, y, z))
                #print "gyroObj with time " + str(time) + ", reading " + str(item+1) + "/250, test#" + str((row[0]/2)+1)

for row in con.execute(results.select()):
        r = row[1]
        r = json.dumps(r)
        loaded_r = json.loads(r)
        if loaded_r['sensor'] == 'gyroscope':
            for item in range (0,250):
                #rate of change
                # ti = |t2-t1|
                t[item] = abs(int(dataGyroObjects[item].time) - int(dataGyroObjects[item+1].time))
                #calculate change in displacement over the 3 axes
                displacementChangeInX[item] = abs(int(dataGyroObjects[item].x) - int(dataGyroObjects[item+1].x))
                displacementChangeInY[item] = abs(int(dataGyroObjects[item].y) - int(dataGyroObjects[item+1].y))
                displacementChangeInZ[item] = abs(int(dataGyroObjects[item].z) - int(dataGyroObjects[item+1].z))
                # v = dx/dt
                v[item] = abs(t[item] - 0)

                #calculate acceleration
                # a = dv/dx

                #calculate jerk
                # j = da/dt

Tags: inselfjsonfordatatimeabsitem