137 lines
4.2 KiB
Python
137 lines
4.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Wed Dec 25 09:17:32 2024
|
|
|
|
@author: ym
|
|
"""
|
|
import os
|
|
import sys
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from datetime import datetime
|
|
from contrast.utils.event import ShoppingEvent
|
|
|
|
sys.path.append(r"D:\DetectTracking")
|
|
from tracking.utils.read_data import read_weight_sensor, extract_data_realtime, read_tracking_output_realtime
|
|
from tracking.utils.read_data import read_process
|
|
|
|
def time_std2stamp(custom_time):
|
|
date_part = custom_time.split('-')[0]
|
|
time_part = custom_time.split('-')[1]
|
|
ms_part = int(custom_time.split('-')[2])
|
|
standard_time = f"{date_part} {time_part[:2]}:{time_part[2:4]}:{time_part[4:]}"
|
|
dt = datetime.strptime(standard_time, "%Y%m%d %H:%M:%S")
|
|
timestamp = int(dt.timestamp() * 1000) + ms_part
|
|
return timestamp
|
|
|
|
def time_stamp2std(timestamp):
|
|
if isinstance(timestamp, float) or isinstance(timestamp, str):
|
|
timestamp = int(timestamp)
|
|
ms = timestamp%1000
|
|
times = timestamp//1000
|
|
std_time = datetime.fromtimestamp(times)
|
|
stdtime = std_time.strftime("%Y%m%d-%H%M%S") + '-' +str(ms)
|
|
return stdtime
|
|
|
|
def get_timeduring_weight(procpath):
|
|
eventStart, eventEnd, weightValue = None, None, None
|
|
if os.path.isfile(procpath):
|
|
timeDict = read_process(procpath)
|
|
if "eventStart" in timeDict.keys():
|
|
eventStart = timeDict["eventStart"]
|
|
if "eventEnd" in timeDict.keys():
|
|
eventEnd = timeDict["eventEnd"]
|
|
if "weightValue" in timeDict.keys():
|
|
weightValue = timeDict["weightValue"]
|
|
return eventStart, eventEnd, weightValue
|
|
|
|
def event_devide(wpath):
|
|
'''
|
|
基于重力时序数据 _weight.data 进行事件切分
|
|
'''
|
|
# wpath = r'D:\全实时\source_data\2024122416\20241224-162658370_weight.data'
|
|
|
|
tpath, _ = os.path.split(wpath)
|
|
|
|
wsdata = read_weight_sensor(wpath)
|
|
times, weights = wsdata[:, 0], wsdata[:, 1]
|
|
Start, End = times[0], times[-1]
|
|
|
|
evtpaths, evtTimeWeight = [], []
|
|
for filename in os.listdir(tpath):
|
|
filelist = filename.split('_')
|
|
custom_time = filelist[0]
|
|
evtpath = os.path.join(tpath, filename)
|
|
if os.path.isdir(evtpath):
|
|
stamp = time_std2stamp(custom_time)
|
|
if stamp >= Start and stamp <= End:
|
|
evtpaths.append(evtpath)
|
|
|
|
for evtpath in evtpaths:
|
|
evtname = os.path.basename(evtpath)
|
|
event = ShoppingEvent(evtpath, stype = "realtime")
|
|
# try:
|
|
# event = ShoppingEvent(evtpath, stype = "realtime")
|
|
# except Exception as e:
|
|
# print(f"Error is: {e}", evtname)
|
|
|
|
'''读取事件的起止时间、重力变化值'''
|
|
propath = os.path.join(evtpath, "process.data")
|
|
evtStart, evtEnd, wgtValue = get_timeduring_weight(propath)
|
|
evtTimeWeight.append((evtStart, evtEnd, wgtValue))
|
|
|
|
|
|
'''重力变化曲线、事件起止区间'''
|
|
fig, ax1 = plt.subplots(figsize=(16, 9), dpi=100)
|
|
ax1.plot(times-Start, weights, 'bo-', linewidth=1, markersize=3)
|
|
ax1.set_title('Weight (gram)')
|
|
for t0, t1, w in evtTimeWeight:
|
|
min_diff = float('inf')
|
|
index = None
|
|
for i, t in enumerate(times):
|
|
diff = abs(t0 - t)
|
|
if diff < min_diff:
|
|
min_diff = diff
|
|
index = i
|
|
w0 = weights[index]
|
|
w1 = w0 + w
|
|
ax1.plot((t0, t0) - Start, (w0, w1), 'r*-', linewidth=1, markersize=6)
|
|
ax1.plot((t1, t1) - Start, (w0, w1), 'r*-', linewidth=1, markersize=6)
|
|
ax1.plot((t0, t1) - Start, (w1, w1), 'r*-', linewidth=1, markersize=6)
|
|
ax1.grid(True)
|
|
plt.show()
|
|
|
|
return plt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
tpath = r"D:\全实时\source_data\2024122416"
|
|
rltpath = r"D:\全实时\result"
|
|
for filename in os.listdir(tpath):
|
|
bname = filename.split("_")[0]
|
|
if filename.find("_weight.data") <= 0:
|
|
continue
|
|
wpath = os.path.join(tpath, filename)
|
|
|
|
plt = event_devide(wpath)
|
|
|
|
plt.savefig(os.path.join(rltpath, f'{bname}.png' )) # svg, png, pdf
|
|
|
|
print(filename)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("Done!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |