利用数据手套进行数据采集,但在运行程序过程中未报错提前结束了进程,按b采集并继续连续采集大概只执行了两次,第三次还没完成就直接结束了。手套是wiseglove.
结束后进程已结束,退出代码-1073741819 (0xC0000005)
import ctypes
import time
import pandas
import gc
from math import floor
lib = ctypes.CDLL("./WISEGLOVEU3D.dll")
# 数据类型
g_pGlove = ctypes.c_bool
finger_sensor = (ctypes.c_ushort * 19)()
finger_angle = (ctypes.c_float * 19)()
arm_sensor = (ctypes.c_float * 12)()
timestamp = ctypes.c_uint
# 手套传感器检测
def GetSensorSum():
num_sensor = lib.wgGetNumOfSensor() # 手指传感器个数
num_arm = lib.wgGetNumOfArm() # 手臂传感器个数
try:
print('当前手套拥有:手指传感器{0}个,手臂传感器{1}个'.format(num_sensor, num_arm))
except ValueError:
print('错误,请检查')
# 手套标定
def GloveStandardization():
lib.wgResetQuat()
lib.wgResetCalib()
# 一次手势采集数据
def GestureCollect():
global timestamp
once_data = []
# 时间戳
timestamp = lib.wgGetData(finger_sensor)
once_data.append(timestamp)
# 手指传感器值
for i in range(19):
once_data.append(finger_sensor[i])
# 手指传感器角度值
lib.wgGetAngle(finger_angle)
for i in range(19):
once_data.append(finger_angle[i])
# 手臂传感器角度值
lib.wgGetQuat(arm_sensor)
for i in range(12):
once_data.append(arm_sensor[i])
try:
return once_data
except:
print('错误')
return None
# 采集初始化
def initialize():
GloveStandardization()
number = 1
get_data = []
while number < 10:
data = GestureCollect()
time.sleep(0.001) # 每1秒读取一次
get_data.append(data)
number = number + 1
name = 'begin'
data_to_excel = pandas.DataFrame(get_data)
data_to_excel.to_csv('D:/Python/p/data/%s.csv' % name, encoding="utf-8-sig")
# 1秒手势采集数据
def OneGesture():
data_total = []
collect_number = 1
end_time = time.monotonic() + 1
while time.monotonic() < end_time:
gesture_data = GestureCollect()
print('第{}次'.format(collect_number))
print(gesture_data)
collect_number = collect_number + 1
data_total.append(gesture_data)
return data_total
# 数据保存
def DataSave(data):
data_title = ['timestamp']
for i in range(19):
data_title.append('Sensor#{}'.format(i))
for i in range(19):
data_title.append('Angle#{}'.format(i))
for i in range(12):
data_title.append('Arm#{}'.format(i))
data_total = data
data_total_excel = pandas.DataFrame(data=data_total, columns=data_title)
gesture_name = input('请输入当前手势名称:')
data_total_excel.insert(loc=1, column='gesture', value=floor(float(gesture_name)))
print(data_total_excel)
data_total_excel.to_csv('D:/Python/p/data/{}.csv'.format(gesture_name))
# 主程序
print('手套初始化检测手套时间较久,请等待。。。。。。')
g_pGlove = lib.wgInit()
while True:
if not g_pGlove:
print('数据手套连接失败!')
g_pGlove = lib.wgInit()
else:
print('数据手套已成功连接!')
break
initialize()
GetSensorSum()
standardization = input('使用前请按 "s" 进行手套标定,请保持手指张开,手臂自然下垂')
if standardization in ('s', 'S'):
GloveStandardization()
else:
print('未进行标定')
begin = input('按 "b" 开始记录传感器数据,按 “q” 退出程序 ')
begin = input('按 "b" 开始记录传感器数据,按 “q” 退出程序 ')
while True:
if begin in ('b', 'B'):
save_data = []
print('开始记录传感器数据,请保持手势1秒钟')
save_data = OneGesture()
saving = input('是否保存数据?“y"')
if saving == 'y':
DataSave(save_data)
print('文件已保存')
else:
print('不保存数据')
begin = 'q'
m = input('是否继续记录?y')
if m in ('Y', 'y'):
begin = 'b'
elif begin in ('q', 'Q'):
break
else:
print('按键错误,未进行记录数据,请重新输入:')
begin = input('b记录 or q退出')
gc.collect() # 强制进行垃圾回收
lib.wgClose() # 断开手套接口
调试的时候是哪里弄错了?按理说应该要OneGesture()保持循环直到一秒钟的,但他运行一次后就结束了
运行结果截图看下呢,看下是在哪一步结束的
这是致命错误,如安装了WPS、金山词霸之类金山产品,卸载试试(卸载后重启)