def predictwithViewPoint(state, viewPoint): moved = copy.deepcopy(state) for m in viewPoint[0]["mean"]: moved[m] = viewPoint[0]["mean"][m] moved = encoder.retransformforViewPoint(moved, viewPoint[0]["base"], viewPoint[0]["ref"]) output = {} for s in state: if s in viewPoint[0]["mean"]: output[s] = moved[s] else: output[s] = state[s] return output
def predictwithViewPoint(state, viewPoint): moved = copy.deepcopy(state) base = viewPoint["base"] ref = viewPoint["ref"] mean = viewPoint["mean"] for m in mean: moved[m] = viewPoint["mean"][m] moved = encoder.retransformforViewPoint(moved, base, ref) output = {} for s in state: if s in mean: output[s] = moved[s] else: output[s] = state[s] return output
def getStateswithViewPoint(filepathList, baseList, refList, detail=False): output = {} for fpath in filepathList: if fpath[-4:] != ".csv": if detail == True: text = "[ViewPointManager]getSateswithViewPoint:" print(text + fpath + " is not csv file") continue # パスをキーにして管理すると面倒なのでファイル名に変更 filename = os.path.basename(fpath) # print("file:"+filename) output[filename] = [] with open(fpath, "r", encoding="utf-8") as f: while True: line = f.readline() if line == "": break bstate = encoder.encodeState(line) astate = encoder.transformforViewPoint(bstate, baseList, refList) # data = encoder.serialize(astate) data = astate output[filename].append(data) return output
def getDistribution(stateDict, baseList, refList, movedObject): # データの数を取得しておく size = len(stateDict["before"]) # 前後のデータ数が違えばそこでエラー終了 if size != len(stateDict["after"]): print("[ViewPointManager]getDistribution:different size") return [] # ゼロ個だったら何かおかしいのでエラー終了 if size == 0: print("[ViewPointManager]getDistribution:size is zero") return [] move = [] transafter = [] for i in range(size): transafter.append( \ encoder.transformforViewPoint( \ stateDict["after"][i], baseList, refList \ ) \ ) # 選択した物体の最終位置のブレをスコアとして返す # 観点変換はここで使う diffDict = {} for o in movedObject: diffDict[o] = [] for i in range(size): for s in movedObject: diffDict[s].append(np.array(transafter[i][s])) meanDict = {} for s in movedObject: meanDict[s] = sum(diffDict[s]) / size diff = 0 for i in range(size): for s in movedObject: diff += np.linalg.norm(np.array(transafter[i][s]) - meanDict[s]) return [meanDict, diff]
# coding = utf-8 # log データを可視化してチェックするだけ import glob import os import HDP_HMM.MakerMain as makerMain import DPM.ViewPointEncoder as encoder import DPM.ViewPointManager as manager fpaths = glob.glob("tmp/log_MakerMain/*") for fpath in fpaths: if os.path.basename(fpath)[:3] != "log" \ or fpath[-4:] != ".csv": continue if int(os.path.basename(fpath)[-6:-4]) > 2: continue with open(fpath, "r", encoding="utf-8") as f: count = 0 while True: line = f.readline() if line == "": break if count%100 == 0: manager.show(encoder.encodeState(line), title=fpath) count += 1
# coding = utf-8 import DPM.ViewPointEncoder as encoder import DPM.ViewPointManager as manager interList = [] path="tmp/log_MakerMain/GettingIntermediated/3-2500-2500-9/inter000000000.csv" with open(path) as f: while True: line = f.readline() if line == "": break interList.append(int(line.split(",")[0])) print("inters:"+str(interList)) with open("tmp/log_MakerMain/log000000000.csv", "r", encoding="utf-8") as f: counter = 0 while True: counter+=1 line = f.readline() if line == "": break elif counter%6 != 0 and counter not in interList: continue state = encoder.encodeState(line) name = "log000000000_"+str(counter)+".png" inter = counter in interList manager.savefig(state, name=name, log=True, inter=inter)