Commit Graph

58 Commits

Author SHA1 Message Date
iabdalkader
e006e9b249 Allow sensors to override the default snapshot function. 2018-04-25 04:02:50 +02:00
Kwabena W. Agyeman
e0e112468e Argument Parsing Done Correctly
All of our argument parsing code has now been updated to handle
positional as well as keyword arguments in our python libraries.

Basically, python allows you to pass some number of positional arguments
to functions/methods followed by keyword arguments (you cannot have more
positional arguments after keyword arguments). Previously, our code
would only look for keyword arguments. Now, it works better and will
grab as many positional arguments as it can followed by processing
keyword arguments. Note: If the case of a positional argument value for
a parameter being passed followed by a keyword for that same parameter
the keyword value is taken (since it comes aftward).

Because arguments were passed in keyword form before this update has no
affect on current code. However, moving forward, argument positions are
now locked and cannot be moved around.
2018-03-05 00:49:36 -05:00
Kwabena W. Agyeman
7516d7699f Add Advanced Optical Flow scripts
Someone asked me about doing a field of receptors before. These scripts
show how to do that. Also, added example scripts for calling the linear
polar and log polar methods added previously which power
find_rotscale().
2018-01-08 00:10:55 -05:00
Kwabena W. Agyeman
213396d090 Complete Overhaul of phasecorrelation
Just doing one big commit/PR here since I noticed that breaking it up
causes issues.

Anyway, these fixes give us GOOD/WORKING/FAST optical flow now on the
OpenMV Cam M7. A number of changes were made to the optical flow
scripts. You have have absolute and differential estimation example
scripts. Additionally, you also have the ability to measure rotation and
scale changes too. Linear/Log Polar conversion was added for this. Users
may use the new code for generic image manipulation too. Finally, I
updated the power of 2 resolutions since you actually HAVE to use them
with optical flow for the phasecorrelation code to work correctly.

I have some more advanced scripts coming after this. But, This commit is
already getting kinda large so I'm stopping it here.
2018-01-07 17:48:07 -05:00
Kwabena W. Agyeman
30ecbdc4f8 Add white balance control.
You can now get white balance gains from the camera chip and set the
camera to then use these gains again in a new enviorment.
2017-12-31 19:56:02 -05:00
Kwabena W. Agyeman
139cdbdbc9 Add auto gain control ceiling value to be settable by the auto gain
method.

Things are in dB now too. Need to remove the previous settable method.
2017-12-30 23:54:19 -05:00
Kwabena W. Agyeman
aeb0238040 Added hmirror and vflip support to the MT9V034 and example scripts (#294)
* Added hmirror and vflip support to the MT9V034 and example scripts.

* Moved sensor example scripts to one place.

* Add delay to these script for register settling time.
2017-12-31 00:32:01 +02:00
Kwabena W. Agyeman
b906c5f192 Add auto gain control setting support (#293)
You can now get the auto gain setting in dBs and set the value in dBs.
Example scripts are included. Code was tested on the OV7725.
2017-12-30 23:18:35 +02:00
Kwabena W. Agyeman
7be0a7a182 Add exposure control for all sensors (#292)
* Textual register cleanup.

No functional changes.

* Add exposure control support.

You can now set the exposure for the camera in microseconds (versus an
opaque unknown value previously). First, we have a new method called
get_exposure_us() which will get the expsoure time in microseconds. This
let's you determine what the auto exposure algorithm set the exposure
time to. Second, the previously implmented set_auto_exposure() method
which allows you to turn aec off and on accepts a exposure_us keyword
argument when you turn aec off to manually control the exposure.

The next commit will add support for other sensor types.

* Cleanup register formatting.

No functional changes.

* Add exposure control support for the OV2640.

Register access for this chip is a PITA.

* Formatting Cleanup.

No functional changes.

* Add exposure control for ov9650.

Just doing it for all sensors.

* Add missing 2 factor.

* Added exposure control for the MT9V034.

* Add exposure control example.

Works well on the OV7725.
2017-12-30 15:56:11 +02:00
Kwabena W. Agyeman
27f5110ab7 Add extra frame buffer.
You can now allocate an extra frame buffer for storing images. However,
this takes memory from the main frame buffer. In particular this reduces
the RAM for many methods that do image processing making memory errors
more likely to happen. Note that you may allocate as many extra fb's as
you like. Dealloc happens in reverse order.

Anyway, you can use this method to now storage things like difference
images in RAM allowing for MUCH faster frame difference image
processing.

Moving on, to keep memory management sane... the second fb looks just
like an image and you can use all the image methods to load and update
it, etc. That said, if users deallocate the second FB they need to *NOT*
use the image pointer anymore. There's no way for me to delete the image
pointer in python right now so this is just something that has to be
manually managed (even if I did setup a deconstructor the second FB is
on a stack... so, things wouldn't work so easily with that).
2017-12-24 22:40:26 -05:00
iabdalkader
8160e9120e Add MT9V034 initial support. 2017-10-24 03:07:17 +02:00
iabdalkader
04a14a290f Rename SCCB/I2C driver to cambus. 2017-10-18 23:14:14 +02:00
iabdalkader
20c8b66789 Implement sensor soft sleep. 2017-10-05 01:25:49 +02:00
iabdalkader
9db426394f Update OMV Python modules for MP-1.9 2017-09-21 16:58:57 +02:00
iabdalkader
35ab0a26fc Remove invalid resolutions.
* Fix issue #261
2017-08-29 01:54:43 +02:00
iabdalkader
7d29104ed6 Add sensor.flush() 2017-06-25 16:48:17 +02:00
Kwabena W. Agyeman
343c4b9092 Add sensor width and height.
Should have added this a long time ago.
2017-06-04 21:49:07 -04:00
Kwabena W. Agyeman
a039b5d1c7 Change skip_frames() to use a 2 second timeout.
This was necessary due to the increase in the frame rate. The previous
method did not correlate to time.

All scripts updated.
2017-05-27 19:31:41 -04:00
Kwabena W. Agyeman
4d6612609e Add more resolution combinations.
With the new frame rate speed increase folks will be asking for smaller
resolutions to get 85 FPS or so when running an algorithm. This commit
adds all scaled modes of frame sizes we already support. We should be
good now on frame sizes for the present and future now.

Todo - skip frames does not run long enough anymore for auto white
balance and gain to stablize before they are turned off in some scripts.
This needs to be adjusted.
2017-05-26 20:09:59 -04:00
iabdalkader
8952962e3c Add function to set VSYNC I/O output pin. 2017-05-21 22:27:58 +02:00
iabdalkader
b94182dce4 Add new RAW/BAYER pixel format to support 2BPP VGA. 2017-03-12 03:29:49 +02:00
Kwabena W. Agyeman
02af722fe8 Fixed fb_alloc() with mark for recently re-worked code.
I also tested the firmware for about an hour to make sure there was no
stack leak.

Note that I prefer for fb_free() to still be called versus
fb_free_till_mark() doing that for you in the code.

For functions without this fix they will just free the entire fb_alloc
stack when an exception happens. For functions with this fix they will
only free up to and including the mark. Since there are no places in the
firmware where you could start building a second fb_alloc stack when one
is already in place this point is moot currently. But, if we do
something like that in the future the problem will have already been
solved.

Any new code or re-worked code should use the mark function.
2017-01-18 18:39:08 -05:00
Kwabena W. Agyeman
0e89b655bf Made set_windowing simpilier.
Tested with updated qr code example script.
2017-01-12 17:41:40 -05:00
iabdalkader
1b22a29612 Add set_gain/exposure/whitebalance functions.
* Add functions to disable auto functions control and set manual values.
2016-12-29 03:39:06 +02:00
iabdalkader
fd384bf1b0 Export OV7725's lens shading correction function. 2016-12-25 02:45:05 +02:00
iabdalkader
b655a54885 Remove frame size assertion in snapshot()
* Frame gets automatically cropped if it's bigger than the max raw frame.
2016-08-18 00:26:01 +02:00
iabdalkader
1cbcb7e434 Add M7 support 2016-08-12 22:43:50 +02:00
iabdalkader
02088a14e1 Rename set_binning to set_windowing. 2016-06-20 22:24:00 +02:00
iabdalkader
968bfde8f2 Add new smaller resolutions.
* Add 40x30, 64x32 and 64x64
2016-06-19 21:27:09 +02:00
iabdalkader
440c9dc8bc Implement binning. 2016-06-03 23:01:28 +02:00
iabdalkader
2e2c563227 Re-implement line filters with Python callbacks. 2016-05-16 14:22:30 +02:00
Kwabena W. Agyeman
80cb701d3b Add missing cam functionality
Added the ability to turn AGC off. Kinda will need the ability to restore
AGC settings back to user specified ones in the future... but, this will
do for now.

Added the ability to turn AEC off. Objectively this function probably
won't be used. But, in low light situations it can help.

Added get_fb() to allow you to get the last image snapshot returned.

There was some old exposure function in the code that was getting
optimized out. So, I deleted the used methods that didn't have any code
in them and commented out the only method that did.
2016-04-27 21:53:06 -04:00
Kwabena W. Agyeman
bc687ebf59 We seem to be doing this alot in the code.
So I'm just adding a function to do it cleanly and efficently. Call
skip_frames() after changing any camera settings to let it settle.

10 frames by default works fine. Tested it.
2016-03-28 22:59:59 -04:00
Kwabena W. Agyeman
2fa8227c7b Add AWB/HMirror/VFlip
Added setters for these camera settings. AWB is necessary for color
tracking to work correctly. AGC still runs, which causes lighting
shifts. It may need to be disabled too. Not sure... if I want to do that
or not however, because without it lightning won't get normalized to
remain at a certain level. So, turning AGC off may cause issues in other
ways.
2016-03-25 16:36:10 -04:00
iabdalkader
d1e782df3d Remove default sensor config.
* Not really needed.
2016-03-06 19:01:10 +02:00
iabdalkader
a4ea3e0e20 Add filter functions
* Filter functions bypass the default line processing in sensor.c, and pre-process lines.
* Processing is done on the fly, i.e. filters are called from after each line is received.
2016-02-20 03:58:40 +02:00
iabdalkader
d3d7e5dc39 Use typdef's for sensor enum and structs. 2016-02-17 19:46:45 +02:00
iabdalkader
f8bfbfabe9 Add sensor.get_id function to return PID. 2016-02-10 19:00:05 +02:00
iabdalkader
d4b13d21ce Add support for special effects. 2016-02-09 02:08:07 +02:00
iabdalkader
69cd07e923 Add sanity checks and meaningful error messages. 2016-02-07 02:34:47 +02:00
iabdalkader
07e0385bf0 Add HQVGA resolution. 2016-02-07 02:32:16 +02:00
iabdalkader
e0c5822c28 Raise exception if pixel format is not supported. 2016-02-05 02:15:22 +02:00
iabdalkader
5203fd8434 Pass slave address to SCCB_Read/Write
* Add slave address to sensor struct.
* Pass slave address to every SCCB_Read/Write function.
* Pass a pointer to the sensor struct to sensor functions.
2016-01-28 14:09:12 +02:00
iabdalkader
e3f41d674e Add sensor_snapshot timeout 2015-09-22 01:34:21 +02:00
iabdalkader
86a141e51a Add set color bar function 2015-07-29 22:32:05 +02:00
iabdalkader
f34b07f015 Update print function 2015-07-18 07:05:13 +02:00
iabdalkader
d38112fb3c Add set_saturation function 2015-05-05 14:02:44 +03:00
iabdalkader
54ae5ff425 Add new resolution for LCD 2015-05-05 13:39:16 +03:00
iabdalkader
ace7b976fb Remove init_modules
* init modules is not needed anymore.
2015-05-03 10:22:07 +03:00
iabdalkader
e4003e3e96 Enable UXGA 2014-10-06 17:37:51 +02:00