I am trying to build Motion Detector using openCV and python but display window is not responding when I terminate program









up vote
0
down vote

favorite












Here is the code for the same, have a look at it. In this, below code I am creating a Motion Detector and with this I will be recording the timings of when the various objects appeared and disappeared for which I am using dataframe.



The issue with this is that the program executes but when the output is displayed in the form of a Window, it freezes when I try to terminate.



import cv2, pandas
from datetime import datetime

first_frame = None
status_list = [None,None]
times =
df = pandas.DataFrame(columns=["Start", "End"]) #Dataframe to store the time values during which object detection and movement appears.


video = cv2.VideoCapture(0)#VideoCapture object is used to record video using web cam

while True:
#check is a bool data type, returns true if VideoCapture object is read
check,frame = video.read()
status = 0
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # For converting the frame color to gray scale
gray = cv2.GaussianBlur(gray,(21,21),0) # For converting the gray scale frame to GaussianBlur

if first_frame is None:
first_frame = gray # used to store the first image/frame of the video
continue
delta_frame = cv2.absdiff(first_frame,gray)#calculates the difference between first and other frames
thresh_delta = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
thresh_delta = cv2.dilate(thresh_delta,None,iterations=0) #Provides threshold value, so if the difference is <30 it will turn to black otherwise if >30 pixels will turn to white
(_,cnts,_) = cv2.findContours(thresh_delta.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #Define the contour area,i.e. adding borders

#Removing noises and shadows, any part which is greater than 1000 pixels will be converted to white
for contour in cnts:
if cv2.contourArea(contour) < 1000:
continue
status = 1 #change in status when the object is detected
#Creating a rectangular box around the object in frame
(x,y,w,h) = cv2.boundingRect(contour)
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)

#list of status for every frame
status_list.append(status)

status_list=status_list[-2:]

#Record datetime in a list when change occurs
if status_list[-1]==1 and status_list[-2]==0:
times.append(datetime.now())
if status_list[-1]==0 and status_list[-2]==1:
times.append(datetime.now())

cv2.imshow('frame',frame)
#cv2.imshow('Capturing',gray)
#cv2.imshow('delta',delta_frame)
#cv2.imshow('thresh',thresh_delta)

key = cv2.waitKey(1) #changing the frame after 1 millisecond

#Used for terminating the loop once 'q' is pressed
if key == ord('q'):
break

print(status_list)
print(times)

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")

video.release()
cv2.destroyAllWindows #will be closing all the windows









share|improve this question





















  • welcome to SO. do you run mac, windows, linux? cv2 version? might be helpful.
    – user1269942
    Nov 10 at 6:33










  • I am using windows and 3.4.1 version of cv2
    – Palash Sharma
    Nov 10 at 19:14














up vote
0
down vote

favorite












Here is the code for the same, have a look at it. In this, below code I am creating a Motion Detector and with this I will be recording the timings of when the various objects appeared and disappeared for which I am using dataframe.



The issue with this is that the program executes but when the output is displayed in the form of a Window, it freezes when I try to terminate.



import cv2, pandas
from datetime import datetime

first_frame = None
status_list = [None,None]
times =
df = pandas.DataFrame(columns=["Start", "End"]) #Dataframe to store the time values during which object detection and movement appears.


video = cv2.VideoCapture(0)#VideoCapture object is used to record video using web cam

while True:
#check is a bool data type, returns true if VideoCapture object is read
check,frame = video.read()
status = 0
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # For converting the frame color to gray scale
gray = cv2.GaussianBlur(gray,(21,21),0) # For converting the gray scale frame to GaussianBlur

if first_frame is None:
first_frame = gray # used to store the first image/frame of the video
continue
delta_frame = cv2.absdiff(first_frame,gray)#calculates the difference between first and other frames
thresh_delta = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
thresh_delta = cv2.dilate(thresh_delta,None,iterations=0) #Provides threshold value, so if the difference is <30 it will turn to black otherwise if >30 pixels will turn to white
(_,cnts,_) = cv2.findContours(thresh_delta.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #Define the contour area,i.e. adding borders

#Removing noises and shadows, any part which is greater than 1000 pixels will be converted to white
for contour in cnts:
if cv2.contourArea(contour) < 1000:
continue
status = 1 #change in status when the object is detected
#Creating a rectangular box around the object in frame
(x,y,w,h) = cv2.boundingRect(contour)
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)

#list of status for every frame
status_list.append(status)

status_list=status_list[-2:]

#Record datetime in a list when change occurs
if status_list[-1]==1 and status_list[-2]==0:
times.append(datetime.now())
if status_list[-1]==0 and status_list[-2]==1:
times.append(datetime.now())

cv2.imshow('frame',frame)
#cv2.imshow('Capturing',gray)
#cv2.imshow('delta',delta_frame)
#cv2.imshow('thresh',thresh_delta)

key = cv2.waitKey(1) #changing the frame after 1 millisecond

#Used for terminating the loop once 'q' is pressed
if key == ord('q'):
break

print(status_list)
print(times)

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")

video.release()
cv2.destroyAllWindows #will be closing all the windows









share|improve this question





















  • welcome to SO. do you run mac, windows, linux? cv2 version? might be helpful.
    – user1269942
    Nov 10 at 6:33










  • I am using windows and 3.4.1 version of cv2
    – Palash Sharma
    Nov 10 at 19:14












up vote
0
down vote

favorite









up vote
0
down vote

favorite











Here is the code for the same, have a look at it. In this, below code I am creating a Motion Detector and with this I will be recording the timings of when the various objects appeared and disappeared for which I am using dataframe.



The issue with this is that the program executes but when the output is displayed in the form of a Window, it freezes when I try to terminate.



import cv2, pandas
from datetime import datetime

first_frame = None
status_list = [None,None]
times =
df = pandas.DataFrame(columns=["Start", "End"]) #Dataframe to store the time values during which object detection and movement appears.


video = cv2.VideoCapture(0)#VideoCapture object is used to record video using web cam

while True:
#check is a bool data type, returns true if VideoCapture object is read
check,frame = video.read()
status = 0
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # For converting the frame color to gray scale
gray = cv2.GaussianBlur(gray,(21,21),0) # For converting the gray scale frame to GaussianBlur

if first_frame is None:
first_frame = gray # used to store the first image/frame of the video
continue
delta_frame = cv2.absdiff(first_frame,gray)#calculates the difference between first and other frames
thresh_delta = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
thresh_delta = cv2.dilate(thresh_delta,None,iterations=0) #Provides threshold value, so if the difference is <30 it will turn to black otherwise if >30 pixels will turn to white
(_,cnts,_) = cv2.findContours(thresh_delta.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #Define the contour area,i.e. adding borders

#Removing noises and shadows, any part which is greater than 1000 pixels will be converted to white
for contour in cnts:
if cv2.contourArea(contour) < 1000:
continue
status = 1 #change in status when the object is detected
#Creating a rectangular box around the object in frame
(x,y,w,h) = cv2.boundingRect(contour)
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)

#list of status for every frame
status_list.append(status)

status_list=status_list[-2:]

#Record datetime in a list when change occurs
if status_list[-1]==1 and status_list[-2]==0:
times.append(datetime.now())
if status_list[-1]==0 and status_list[-2]==1:
times.append(datetime.now())

cv2.imshow('frame',frame)
#cv2.imshow('Capturing',gray)
#cv2.imshow('delta',delta_frame)
#cv2.imshow('thresh',thresh_delta)

key = cv2.waitKey(1) #changing the frame after 1 millisecond

#Used for terminating the loop once 'q' is pressed
if key == ord('q'):
break

print(status_list)
print(times)

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")

video.release()
cv2.destroyAllWindows #will be closing all the windows









share|improve this question













Here is the code for the same, have a look at it. In this, below code I am creating a Motion Detector and with this I will be recording the timings of when the various objects appeared and disappeared for which I am using dataframe.



The issue with this is that the program executes but when the output is displayed in the form of a Window, it freezes when I try to terminate.



import cv2, pandas
from datetime import datetime

first_frame = None
status_list = [None,None]
times =
df = pandas.DataFrame(columns=["Start", "End"]) #Dataframe to store the time values during which object detection and movement appears.


video = cv2.VideoCapture(0)#VideoCapture object is used to record video using web cam

while True:
#check is a bool data type, returns true if VideoCapture object is read
check,frame = video.read()
status = 0
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # For converting the frame color to gray scale
gray = cv2.GaussianBlur(gray,(21,21),0) # For converting the gray scale frame to GaussianBlur

if first_frame is None:
first_frame = gray # used to store the first image/frame of the video
continue
delta_frame = cv2.absdiff(first_frame,gray)#calculates the difference between first and other frames
thresh_delta = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
thresh_delta = cv2.dilate(thresh_delta,None,iterations=0) #Provides threshold value, so if the difference is <30 it will turn to black otherwise if >30 pixels will turn to white
(_,cnts,_) = cv2.findContours(thresh_delta.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #Define the contour area,i.e. adding borders

#Removing noises and shadows, any part which is greater than 1000 pixels will be converted to white
for contour in cnts:
if cv2.contourArea(contour) < 1000:
continue
status = 1 #change in status when the object is detected
#Creating a rectangular box around the object in frame
(x,y,w,h) = cv2.boundingRect(contour)
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)

#list of status for every frame
status_list.append(status)

status_list=status_list[-2:]

#Record datetime in a list when change occurs
if status_list[-1]==1 and status_list[-2]==0:
times.append(datetime.now())
if status_list[-1]==0 and status_list[-2]==1:
times.append(datetime.now())

cv2.imshow('frame',frame)
#cv2.imshow('Capturing',gray)
#cv2.imshow('delta',delta_frame)
#cv2.imshow('thresh',thresh_delta)

key = cv2.waitKey(1) #changing the frame after 1 millisecond

#Used for terminating the loop once 'q' is pressed
if key == ord('q'):
break

print(status_list)
print(times)

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")

video.release()
cv2.destroyAllWindows #will be closing all the windows






python pandas opencv motion-detection






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 5:49









Palash Sharma

11




11











  • welcome to SO. do you run mac, windows, linux? cv2 version? might be helpful.
    – user1269942
    Nov 10 at 6:33










  • I am using windows and 3.4.1 version of cv2
    – Palash Sharma
    Nov 10 at 19:14
















  • welcome to SO. do you run mac, windows, linux? cv2 version? might be helpful.
    – user1269942
    Nov 10 at 6:33










  • I am using windows and 3.4.1 version of cv2
    – Palash Sharma
    Nov 10 at 19:14















welcome to SO. do you run mac, windows, linux? cv2 version? might be helpful.
– user1269942
Nov 10 at 6:33




welcome to SO. do you run mac, windows, linux? cv2 version? might be helpful.
– user1269942
Nov 10 at 6:33












I am using windows and 3.4.1 version of cv2
– Palash Sharma
Nov 10 at 19:14




I am using windows and 3.4.1 version of cv2
– Palash Sharma
Nov 10 at 19:14












1 Answer
1






active

oldest

votes

















up vote
0
down vote













Try this:



if cv2.waitKey(1) & 0xFF == ord('q'):
break


For a brief explanation about what "& 0xFF" is, see: What's 0xFF for in cv2.waitKey(1)?



It is basically a bit mask that takes the portion of 'waitKey' value(32 bit) that can be compared to ASCII (8 bit).






share|improve this answer




















  • I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
    – Palash Sharma
    Nov 10 at 19:29










Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53236348%2fi-am-trying-to-build-motion-detector-using-opencv-and-python-but-display-window%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
0
down vote













Try this:



if cv2.waitKey(1) & 0xFF == ord('q'):
break


For a brief explanation about what "& 0xFF" is, see: What's 0xFF for in cv2.waitKey(1)?



It is basically a bit mask that takes the portion of 'waitKey' value(32 bit) that can be compared to ASCII (8 bit).






share|improve this answer




















  • I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
    – Palash Sharma
    Nov 10 at 19:29














up vote
0
down vote













Try this:



if cv2.waitKey(1) & 0xFF == ord('q'):
break


For a brief explanation about what "& 0xFF" is, see: What's 0xFF for in cv2.waitKey(1)?



It is basically a bit mask that takes the portion of 'waitKey' value(32 bit) that can be compared to ASCII (8 bit).






share|improve this answer




















  • I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
    – Palash Sharma
    Nov 10 at 19:29












up vote
0
down vote










up vote
0
down vote









Try this:



if cv2.waitKey(1) & 0xFF == ord('q'):
break


For a brief explanation about what "& 0xFF" is, see: What's 0xFF for in cv2.waitKey(1)?



It is basically a bit mask that takes the portion of 'waitKey' value(32 bit) that can be compared to ASCII (8 bit).






share|improve this answer












Try this:



if cv2.waitKey(1) & 0xFF == ord('q'):
break


For a brief explanation about what "& 0xFF" is, see: What's 0xFF for in cv2.waitKey(1)?



It is basically a bit mask that takes the portion of 'waitKey' value(32 bit) that can be compared to ASCII (8 bit).







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 10 at 6:39









user1269942

1,9601419




1,9601419











  • I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
    – Palash Sharma
    Nov 10 at 19:29
















  • I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
    – Palash Sharma
    Nov 10 at 19:29















I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
– Palash Sharma
Nov 10 at 19:29




I tried this code snippet but it did not work. Now I am not able to terminate the program by pressing 'q'.
– Palash Sharma
Nov 10 at 19:29

















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53236348%2fi-am-trying-to-build-motion-detector-using-opencv-and-python-but-display-window%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Darth Vader #20

How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

Ondo