Здесь я пытаюсь создать фрейм данных для сравнения местоположения объекта между фреймами:
Pcount = []
Pcountdb = []
framenumber = 0
frames_count = 0
frames_count = self.vdo.get(cv2.CAP_PROP_FRAME_COUNT)
df = pd.DataFrame(index=range(int(frames_count)))
if len(outputs) > 0:
for i in range(len(outputs):
bbox_xyxy = outputs[:,:4]
identities = outputs[:,-1]
sx = outputs[:,0]
sy = outputs[:,1]
ex = outputs[:,2]
ey = outputs[:,3]
cx = ((sx + ex) /2)
cy = ((sy + ey) /2)
ct = (cx, cy)
cx2 = (cx.tolist())
cy2 = (cy.tolist())
P = identities[i]
df[str(P.astype(int))] = ""
#creates new column with an id number obtained through deepsort
df.at[int(framenumber), str(P.astype(int))] = [cx2[i], cy2[i]]
#the i function from a for loop is necessary for multiple objects in the same frame
print(df)
if not P in Pcountdb:
global PcountT
Pcountdb.append(P)
PcountT = PcountT + 1
framenumber = framenumber + 1
Отредактировано: приведенный выше скрипт начинается с заполнителей
df = pd.DataFrame... создает мой фрейм данных со строкой для каждого изображения / кадра в моем видео
bbox_xyxy создается после того, как мой детектор объектов был зациклен с помощью deepsort, и deepsort идентифицировал каждый обнаруженный объект и идентифицировал его как объектс местоположением.
Затем разбейте np.arrays и вычислите центральные точки этих объектов, чтобы их можно было рассматривать как отдельную точку вместо прямоугольника ограничивающего прямоугольника.
Pandas берет мои входные данные и создает DataFrame с идентификатором объекта (в данном случае 1), координатами xy центра и помещает их в строку, соответствующую каждому кадру
, затем мы печатаем кадр данных и просматриваем результаты
print (df) возвращает:
1
Frames
3 [614.5, 632.0]
1
Frames
3
4 [610.5, 624.0]
1
Frames
3
4
5 [603.0, 618.0]
1
Frames
3
4
5
6 [574.0, 615.5]
1
Frames
3
4
5
6
7 [564.0, 610.0]
1
Frames
3
4
5
6
7
8 [559.0, 597.0]
DataFrame отслеживает ТОЛЬКО самый последний набор координат в column. Если бы мне пришлось создать два столбца, в моем фрейме данных будет присутствовать только последнее обнаружение каждого объекта (как показано выше с одним объектом, идентифицированным как 1)
Мне нужно сохранить выходные данные в моем pd.DataFrame. = df, вместо перезаписи.
1
Frames
3 [614.5, 632.0]
4 [610.5, 624.0]
5 [603.0, 618.0]
6 [574.0, 615.5]
7 [564.0, 610.0]
8 [559.0, 597.0]
Таким образом, я могу сравнивать местоположения этих объектов между кадрами, давая мне счетчик объектов, который считает объекты и сохраняет их в 2 базах данных: «ВВЕРХ» и «ВНИЗ»