List index out of range in pandas dataframe

Advertisements

I am trying keep the record of time when there is a motion in the camera and when the object leave to store in the csv file. The code works but when I enter the key ‘q’ I am getting an error IndexError: list index out of range in the line df = df.append({"Start":times[i],"End":times[i+1]},ignore_index=True)

here is my code:

import cv2,time
from datetime import datetime
import pandas

df = pandas.DataFrame(columns=["Start","End"])

first_frame=None
status_list=[None,None]
times=[]
video = cv2.VideoCapture(0)

while True:
    check, frame = video.read()
    frame=cv2.flip(frame,1)
    status=0

    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    gray=cv2.GaussianBlur(gray,(21,21),0)


    if first_frame is None:
        first_frame=gray
        continue

    delta_frame=cv2.absdiff(first_frame,gray)

    thresh_frame=cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]

    thresh_frame=cv2.dilate(thresh_frame,None,iterations=2)

    #contours
    (cnts,_) = cv2.findContours(thresh_frame.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

    for contour in cnts:
        if cv2.contourArea(contour) <10000:
            continue
        status=1

        (x,y,w,h) = cv2.boundingRect(contour)
        cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)
    status_list.append(status)

    status_list=status_list[-2:]

    if status_list[-1]==1 and status_list==0:
        times.append(datetime.now())

    if status_list[-1]==0 and status_list[-2]==1:
        times.append(datetime.now())


    #cv2.imshow("Gray Frame",gray)
    #cv2.imshow("Delta Frame",delta_frame)
    #cv2.imshow("Threshold Frame",thresh_frame)
    cv2.imshow("Color Frame",frame)

    key=cv2.waitKey(1)
    if key==ord('q'):
        if status==1:
            times.append(datetime.now())
        break

for i in range(0,len(times),2):
    df = df.append({"Start":times[i],"End":times[i+1]},ignore_index=True)

df.to_csv("Times.csv")

print(times)
video.release()
cv2.destroyAllWindows

here is the error:

PS D:\mysite\app6> python trial.py
Traceback (most recent call last):
  File "D:\mysite\app6\trial.py", line 64, in <module>
    df = df.append({"Start":times[i],"End":times[i+1]},ignore_index=True)

IndexError: list index out of range
[ WARN:0@7.243] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src
\cap_msmf.cpp (539) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB termina
ting async callback

>Solution :

it happen because you try to get index len(times)+1 -> out of the list
you can add a if

for i in range(0,len(times),2):
    if i<len(times):
      df = df.append({"Start":times[i],"End":times[i+1]},ignore_index=True)

Leave a ReplyCancel reply