This commit is contained in:
NikolajDanger
2022-09-21 11:46:43 +02:00
parent aac4cab563
commit 14c78e2023

View File

@ -1,9 +1,40 @@
# Arlo Robot Controller # Arlo Robot Controller
import ctypes
import io
import os
import sys
import tempfile
from contextlib import contextmanager
from time import sleep from time import sleep
import serial import serial
import cv2 import cv2
libc = ctypes.CDLL(None)
c_stderr = ctypes.c_void_p.in_dll(libc, 'stderr')
@contextmanager
def stderr_redirector(stream):
original_stderr_fd = sys.stderr.fileno()
def _redirect_stderr(to_fd):
libc.fflush(c_stderr)
sys.stderr.close()
os.dup2(to_fd, original_stderr_fd)
sys.stderr = io.TextIOWrapper(os.fdopen(original_stderr_fd, 'wb'))
saved_stderr_fd = os.dup(original_stderr_fd)
try:
tfile = tempfile.TemporaryFile(mode='w+b')
_redirect_stderr(tfile.fileno())
yield
_redirect_stderr(saved_stderr_fd)
tfile.flush()
tfile.seek(0, io.SEEK_SET)
stream.write(tfile.read().decode())
finally:
tfile.close()
os.close(saved_stderr_fd)
class Robot(object): class Robot(object):
""" """
Defines the Arlo robot API Defines the Arlo robot API
@ -77,7 +108,8 @@ class Robot(object):
) )
def take_photo(self): def take_photo(self):
cap = self._init_camera() with stderr_redirector(io.StringIO()):
cap = self._init_camera()
_, photo = cap.read() _, photo = cap.read()
cap.release() cap.release()
return photo return photo