Search code examples
pythonnumpyopencvcamera

How to restrict a camera on capturing and not capturing images on python, opencv?


I have a camera that faces an LED sensor that I want to restrict on capturing images when the object is in sight otherwise not capturing. I will designate a point or region where the color pixels will change as an object arrives it will wait for 3sec and then capture. Thereafter it will not capture the same object if it still remains in the designated region. Here are my codes.

import cv2
import numpy as np
import os
os.chdir('C:/Users/Man/Desktop')
previous_flag = 0
current_flag = 0
a = 0
video = cv2.VideoCapture(0)
while True:
    ret, frame = video.read()
    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    cv2.imshow('Real Time', rgb)
    cv2.waitKey(1)
    if(rgb[400, 200, 0]>200): # selecting a point that will change in terms of pixel values
        current_flag = 0
        previous_flag = current_flag
        print('No object Detected')
    else: # object arrived
        current_flag = 1
        change_in_flags = current_flag - previous_flag
        if(change_in_flags==1):
            time.sleep(3)
            cv2.imwrite('.trial/cam+str(a).jpg', rgb)
            a += 1
            previous_flag = current_flag
video.release()
cv2.destroyAllWindows()

When I implement the above program, for the first case (if) it prints several lines of No object Detected.

How can I reduce those sequentially printed lines for No object Detected statement? So that the program can just print one line without repetition. I also tried to add a while loop to keep the current status true after a+=1 like:

while True:
    previous_flag = current_flag
    continue

It worked but the system became so slow is there any way to avoid such a while loop such that the system becomes faster? Any advice on that


Solution

  • import cv2
    import numpy as np
    import os
    os.chdir('C:/Users/Man/Desktop')
    state1=0
    a = 0
    video = cv2.VideoCapture(0)
    while True:
        ret, frame = video.read()
        rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        cv2.imshow('Real Time', rgb)
        cv2.waitKey(1)
        if(rgb[400, 200, 0]>200): # selecting a point that will change in terms of pixel values
            if(state1 == 0):
                print('No object Detected')
            state1=1
        else: # object arrived
            time.sleep(1)
            if(state1==1)
               print('Object is detected')
               cv2.imwrite('./trial/cam+str(a).jpg', rgb)
               a += 1
            state1=0
    video.release()
    cv2.destroyAllWindows()