curtiswest / pepi Goto Github PK
View Code? Open in Web Editor NEWAn extensible, Apache-Thrift-based, distributed camera system for photogrammetry instruments
Home Page: https://pepi.readthedocs.io/
License: Apache License 2.0
An extensible, Apache-Thrift-based, distributed camera system for photogrammetry instruments
Home Page: https://pepi.readthedocs.io/
License: Apache License 2.0
With the addition of multi-camera servers in v3.0 comes the ability to stream from these multi-camera servers.
The present implementation of the user interface only displays one of these streams (the first in the streams_url
reply from the server).
Ideally, there would be a way to display all of the cameras connected to a server in that servers panel. This shouldn't require any backend work -- after all, the stream URLs are already being accessed, but they're discarded before being used. Implementation will require modifying the Flask templates setup.html
to display these streams.
It seems there is some issue in capturing to an RGB array while PiCamera is also recording from the video port. This seems to stem from the use_video_port=
parameter or from using the resize=
parameter, causing an ENOMEM error when attempting to get a RGB capture.
Capturing to YUV and converting to RGB works perfectly (but is considerably slower than capturing to RGB directly), so capturing & recording simultaneously is clearly not an issue.
The PiCamera documentation mentions some issues about RGB captures that cause a memory error:
RGB captures from the still port do not work at the full resolution of the camera (they result in an out of memory error).
Either use YUV captures, or capture from the video port if you require full resolution.
However, it seems this bug still happens even when capturing from the video port as suggested, hence the possibility that the resizer component added when using resize=
throws a wrench in the mix somewhere?
The MJPEG stream implementation provided in the Server package occasionally refuses to display an image. It appears that this does not stem from any issue with the camera, as capturing a full-res image still works.
Pressing 'stop' in the browser displaying the stream tends to cause the last frame to appear, but of course stops the stream. Refreshing after this does not restart the stream. This means that it probably has something to do with how the images are streamed over the HTTP response.
The existing design of PEPI as of v3.0 has the requirement that servers and cameras (in Python, MetaServer
and MetaCamera
) be implemented in the same language. This requirement stems from the fact that the camera object's still()
method is called directly from the server.
This issue proposes that the MetaCamera
object be replaced with an Thrift service defined in pepi.thrift
.
Benefits:
still()
method to be called over Thrift, which would inherently provide cross-language support.Drawbacks:
The current implementation of PEPI does not support camera configuration.
If multiple cameras are used, it may be advantageous to be able to configure their parameters, e.g. white balance, exposure, ISO, etc. to achieve a consistent capture.
This enhancement proposes an extension of the CameraServer
defined in pepi.thrift
called ConfigurableCameraServer
. This would take the form of:
service ConfigurableCameraServer extends CameraServer {
i32 iso(1:i32 value),
i32 white_balance_temp(1:i32 value),
float shutter_speed(1:float value)
}
There will need to be some thoughtful consideration put into deciding which operations to include in this new extension. Additionally, will need to look into some mechanism whereby server access will fallback to a normal CameraServer
if ConfigurableCameraServer
is not implemented. Such a mechanism may already be available in Thrift?
The user interface will need to be updated to accept these configuration functions.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.