Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

List index out of range in pandas dataframe

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:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading