6
0

video.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env python
  2. """video: Description."""
  3. from json import JSONEncoder
  4. import cv2
  5. from .errorable import Errorable
  6. class Video(Errorable, JSONEncoder):
  7. framecount = property(fget=lambda self: self._framecount)
  8. def get_frame(self, frame):
  9. self._cap.set(cv2.CAP_PROP_POS_FRAMES, frame)
  10. retval, image = self._cap.read()
  11. if not retval:
  12. self._report_error('OpenCV error prevents reading of frame!')
  13. return None
  14. else:
  15. rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  16. return rgb
  17. def __init__(self, filename):
  18. Errorable.__init__(self)
  19. self._filename = filename
  20. self._framecount = -1
  21. try:
  22. self._cap = cv2.VideoCapture(self._filename)
  23. if not self._cap.isOpened():
  24. raise Exception
  25. self._framecount = int(self._cap.get(cv2.CAP_PROP_FRAME_COUNT))
  26. except:
  27. self._report_error('Error opening %s' % filename)
  28. def close(self):
  29. self._cap.release()
  30. def default(self, o):
  31. return 'CAPTURE'