when i run the program, i frame is hanging and not responding. i am using imageAI package for video detection. what i want to do, is to show the video stream while the video detection is running.
and idea?
import cv2
from imageai.Detection import VideoObjectDetection
from matplotlib import pyplot as plt
camera = cv2.VideoCapture(0)
while (True):
_, frame = camera.read()
cv2.imshow("frame", frame)
plt.show()
k = cv2.waitKey(60) & 0xff
if k == 27:
break
detector = VideoObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath("yolo.h5")
detector.loadModel()
cv2.imshow("frame", frame)
plt.show()
video_path = detector.detectObjectsFromVideo(camera_input=camera,
output_file_path="traffic_detected"
, frames_per_second=20, log_progress=True, minimum_percentage_probability=30)
print(video_path)
# cv2.imshow('frame',frame)
camera.release()
cv2.destroyAllWindows()
Related
I am writing a Python script that records video from a usb webcam and stores the resulting file locally on a hard drive. Currently a 60 second file is 27mb.
Format is motion jpeg (MJPG) because the target being observed is in moving water. Moving water confuses video compression algorithms. I'd like to reduce the size of the overall file by lowering the quality of all of the individual JPEG images in the file. Can this be done in OpenCV? Below is what I have so far. Thanks in advance.
#!/usr/bin/env python3
import cv2
import numpy as np
import time
import imutils
cap = cv2.VideoCapture(0)
if (cap.isOpened() == False):
print("Unable to read camera feed")
capture_duration = 60
sleep_duration = 0
frame_width = int('320')
frame_height = int('240')
frame_per_sec = int('1')
out = cv2.VideoWriter('C:\\videoPy\\LZ\\outputvideo.avi',cv2.VideoWriter_fourcc('m','j','p','g'),frame_per_sec, (frame_width,frame_height))
start_time = time.time()
while( int(time.time() - start_time) < capture_duration ):
ret, frame = cap.read()
if ret==True:
frame = imutils.resize(frame, width=320)
out.write(frame)
time.sleep(sleep_duration)
cv2.imshow('frame',frame)
# Press Q on keyboard to stop recording
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
When I try to run a video using opencv, the video keeps rotating so that the wide side of the video is displayed on horizon. I wonder how I can set the original video to display correctly....
import sys
import numpy as np
import cv2
cap = cv2.VideoCapture('/Users/junsuk/Desktop/python/ch13/testbar.mp4')
if not cap.isOpened():
print('Video open failed!')
sys.exit()
tracker = cv2.TrackerCSRT_create()
ret, frame = cap.read()
cv2.imwrite('/Users/junsuk/Desktop/python/ch10/photo.jpg', frame)
if not ret:
print('Frame read failed!')
sys.exit()
newdraw=cv2.imread('/Users/junsuk/Desktop/python/ch10/photo.jpg')
cv2.line(newdraw, (50, 50), (200, 50), (0, 0, 255), 5)
cv2.imwrite('/Users/junsuk/Desktop/python/ch10/photo.jpg', newdraw)
rc = cv2.selectROI('frame', frame)
print(rc)
tracker.init(frame, rc)
while True:
ret, frame = cap.read()
if not ret:
print('Frame read failed!')
sys.exit()
ret, rc = tracker.update(frame)
rc = tuple([int(_) for _ in rc])
cv2.rectangle(frame, rc, (0, 0, 255), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(25) == 45:
break
cv2.destroyAllWindows()
I wrote this and it works. but the last function (hog.detectMultiScale) doesn't return any thing. I don't know why.
'''
import numpy as np
import cv2
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
cv2.startWindowThread()
# open video stream
cap = cv2.VideoCapture("E:\\3.mp4")
# the output will be written to output.avi
out = cv2.VideoWriter('output.avi',cv2.VideoWriter_fourcc(*'MJPG'),15.,
(640, 480))
while (True):
# Capture frame-by-frame
ret, frame = cap.read()
# resizing for faster detection
frame = cv2.resize(frame, (640, 480))
returns the bounding boxes for the detected objects
(boxes, weights) = hog.detectMultiScale(frame)
'''
This is my code. I'm trying to capture the video and write it in to my memory.But it's wrong.
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('ouput.avi',fourcc,20.0,(640,480))
while(1):
ret,frame=cap.read()
if ret==True:
frame = cv2.flip(frame,0)
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF ==ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
the windows show the video is reversed.how could i turn it back?
thanks!
Dont use flip command.
frame = cv2.flip(frame, 0)
Check flip docs.
How can we fix foreground using mog background subtractor in opencv-python? I'm trying to have a more stable foreground that can keep showing foreground once it could correctly subtract foreground from background (for example fix foreground for about 5 seconds)
here is my code:
cap = cv2.VideoCapture(0)
history = 500 # or whatever you want it to be
accelerate = 5
fgbg = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=20, detectShadows=True)
count=0
while(1):
for i in (1, accelerate):
ret, frame = cap.read()
fgmask = fgbg.apply(frame, learningRate=1.0/history)
imageproc(fgmask,count)
# time.sleep(5)
k = cv2.waitKey(0) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
import numpy as np
import cv2
import time
cap = cv2.VideoCapture('video.avi')
fgbg = cv2.createBackgroundSubtractorMOG()
while(1):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
cv2.imshow('frame',fgmask)
time.sleep(5)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()