
Product
Introducing Module Reachability: Focus on the Vulnerabilities That Matter
Module Reachability filters out unreachable CVEs so you can focus on vulnerabilities that actually matter to your application.
A library for managing concurrent socketio, cv2, and pyserial processes. Useful for making robots or devices with Arduinos and Raspberry Pi.
Supply Chain Security
Vulnerability
Quality
Maintenance
License
REMIO is a library for managing concurrent socketio, cv2, and pyserial processes. Useful for making robots or devices with Arduinos and Raspberry Pi. It was born in the context of remote laboratories, hence its name, where I used and developed several prototypes where the code began to redound. That's where I extracted the modules from this library. The hardware architecture that I used to employ was the following:
So I programmed the following architecture
First you need to create a virtualenv:
python3 -m venv venv
Then you should active it:
source venv/bin/activate
After choose an option for install remio, for example using pip:
# Pypi source
pip install remio
# Github source
pip install "git+https://github.com/Hikki12/remio"
Or if you prefer, clone the repository:
git clone https://github.com/Hikki12/remio
cd remio
pip install .
If you are a devolper, install the library as follows:
pip install -e .
import time
import cv2
from remio import Cameras
# Define devices
devices = {
"webcam1": {
"src": 0,
"size": [400, 300],
"fps": None,
"reconnectDelay": 5,
"backgroundIsEnabled": True,
"emitterIsEnabled": False,
},
"webcam2": {
"src": "http://192.168.100.70:3000/video/mjpeg",
"size": [400, 300],
"fps": None,
"reconnectDelay": 5,
"backgroundIsEnabled": True,
"emitterIsEnabled": False,
},
}
# Intialize Serial manager
camera = Cameras(devices=devices)
# Start device(s) connection on background
camera.startAll()
# Set a FPS speed to display image(s)
FPS = 20
T = 1 / FPS
while True:
t0 = time.time()
webcam1, webcam2 = camera.read(asDict=False)
camera.clearAllFrames() # to avoid repeated frames
if webcam1 is not None:
cv2.imshow("webcam1", webcam1)
if webcam2 is not None:
cv2.imshow("webcam2", webcam2)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
t1 = time.time()
# Get a fixed delay value (t1 - t0) + delay = T
delay = abs(T - (t1 - t0))
time.sleep(delay)
# Close all Windows
cv2.destroyAllWindows()
# Stop all Running devices
camera.stopAll()
"""Multiple serial devices management."""
import time
from remio import Serials
# Define devices
devices = {
"arduino1": {
"port": "/dev/cu.usbserial-1440",
"baudrate": 9600,
"emitterIsEnabled": True, # Enable on/emit callbacks
"reconnectDelay": 5,
},
"arduino2": {
"port": "COM2",
"baudrate": 9600,
"emitterIsEnabled": True,
"reconnectDelay": 5,
},
}
# Intialize Serial manager
serial = Serials(devices=devices)
# Configure callbacks
serial.on("connection", lambda status: print(f"serial connected: {status}"))
# Start device(s) connection on background
serial.startAll()
while True:
print("Doing some tasks...")
time.sleep(1)
REMIO uses simplejpeg library for encode camera images. You could used its API as follows:
import time
from remio import Camera
# Initialize camera device
camera = Camera(src=0, fps=15, size=[800, 600], flipX=True)
while True:
jpeg = camera.jpeg()
time.sleep(1/10)
You could server your camera image with the MJPEG server, with a few lines:
"""A simple MJPEG."""
from remio import Camera, MJPEGServer
encoderParams = {
"quality": 90,
"colorspace": "bgr",
"colorsubsampling": "422",
"fastdct": True,
}
# Initialize camera device
camera = Camera(src=0, fps=15, size=[800, 600], flipX=True, encoderParams=encoderParams)
# Configure MJPEG Server
server = MJPEGServer(
camera=camera, ip="0.0.0.0", port=8080, endpoint="/video/mjpeg", fps=15
)
try:
server.run(display_url=True, start_camera=True)
except KeyboardInterrupt:
server.stop(stop_camera=True)
# The video must be accessible through the generated link
>> MJPEG server running on http://0.0.0.0:8080/video/mjpeg
You could see more examples here.
Copyright (c) hikki12 2022
This library is released under the Apache 2.0 License.
FAQs
A library for managing concurrent socketio, cv2, and pyserial processes. Useful for making robots or devices with Arduinos and Raspberry Pi.
We found that remio demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Module Reachability filters out unreachable CVEs so you can focus on vulnerabilities that actually matter to your application.
Company News
Socket is bringing best-in-class reachability analysis into the platform — cutting false positives, accelerating triage, and cementing our place as the leader in software supply chain security.
Product
Socket is introducing a new way to organize repositories and apply repository-specific security policies.