|
| 1 | +.. _changelog_v1_1_0: |
| 2 | + |
| 3 | +v1.1.0 |
| 4 | +====== |
| 5 | + |
| 6 | +v1.1.0 is the foundational architecture release: it drops the early custom |
| 7 | +peripheral modules in favor of standard **MicroPython built-ins**, moves the |
| 8 | +imaging API into the **``image``** module and the frame-rate clock into |
| 9 | +**``time``**, and adds built-in Haar cascades, ``get_pixel()`` / ``set_pixel()``, |
| 10 | +OpenMV 2 board support, and USB-CDC debugging. It is a heavily breaking, |
| 11 | +API-defining release — read the breaking changes below. |
| 12 | + |
| 13 | +.. contents:: On this page |
| 14 | + :local: |
| 15 | + :depth: 1 |
| 16 | + |
| 17 | +Highlights |
| 18 | +---------- |
| 19 | + |
| 20 | +- **MicroPython built-ins** — the custom ``gpio`` / ``led`` / ``spi`` / |
| 21 | + ``socket`` / ``wlan`` / ``uart`` / ``file`` / ``select`` modules were |
| 22 | + removed in favor of MicroPython's ``pyb`` / ``machine``. |
| 23 | +- **``image`` module** — ``Image()`` / ``HaarCascade()`` / descriptors are |
| 24 | + now in the ``image`` module. |
| 25 | +- **``time.clock()``** — the frame-rate clock moved into the ``time`` module. |
| 26 | +- **Built-in Haar cascades** — ``HaarCascade("frontalface")`` / |
| 27 | + ``HaarCascade("eye")`` (no file needed). |
| 28 | +- **OpenMV 2** board support and USB-CDC debugging. |
| 29 | +- **Breaking:** the module structure was redefined — see the breaking |
| 30 | + changes. |
| 31 | + |
| 32 | +New features |
| 33 | +------------ |
| 34 | + |
| 35 | +- **Image** — added ``Image.get_pixel(x, y)`` / ``set_pixel()`` and ``img[i]`` |
| 36 | + subscript pixel access; built-in flash Haar cascades |
| 37 | + (``HaarCascade("frontalface")`` / ``HaarCascade("eye")``) and a ``stages=`` |
| 38 | + keyword to limit cascade stages; ``draw_string()`` works on grayscale |
| 39 | + images. |
| 40 | +- **Sensor** — added ``sensor.set_colorbar()``, ``sensor.set_saturation()``, |
| 41 | + and the ``QQVGA2`` framesize. |
| 42 | +- **``mlx``** — ``mlx.read(type)`` with ``mlx.RAINBOW`` / ``mlx.GRAYSCALE`` |
| 43 | + output. |
| 44 | +- **Debugging** — implemented debugging over USB CDC, a firmware |
| 45 | + ``fw_version()`` query, per-board firmware (OpenMV 1 / OpenMV 2), and |
| 46 | + self-test / colorbar scripts; fatal/parse errors are logged to flash. |
| 47 | + |
| 48 | +Other changes and improvements |
| 49 | +------------------------------ |
| 50 | + |
| 51 | +- Out-of-memory now raises ``MemoryError`` instead of ``OSError``; scripts |
| 52 | + run with exception re-raise so errors print instead of crashing; the serial |
| 53 | + baud rate is configurable (default 921600); a larger flash filesystem; the |
| 54 | + sensor pixel clock was lowered to 54 MHz for capture stability; |
| 55 | + ``sensor.reset()`` relies on a sensor soft reset only. |
| 56 | + |
| 57 | +Bug fixes |
| 58 | +--------- |
| 59 | + |
| 60 | +- Fixed template matching, ``find_features()`` repeating the first object, |
| 61 | + SCCB/I2C atomic register access, SD-card chip detect, soft-I2C pin mapping, |
| 62 | + ``fast_cbrtf`` / LAB color accuracy, and integral-image / median-filter |
| 63 | + memory use on the OpenMV 1 / 2. |
| 64 | + |
| 65 | +Hardware and board support |
| 66 | +-------------------------- |
| 67 | + |
| 68 | +- **OpenMV 2** (STM32F427) board support (and OpenMV 3 hardware design); MCO |
| 69 | + used as the sensor clock on the OpenMV 2. |
| 70 | + |
| 71 | +Breaking API changes |
| 72 | +-------------------- |
| 73 | + |
| 74 | +User-visible API breaks between v1.0.3-beta and v1.1.0. Scope: Python |
| 75 | +C-modules in ``modules/`` and Python libraries in ``scripts/libraries/``. |
| 76 | + |
| 77 | +Each change is tagged with its impact: |
| 78 | + |
| 79 | +- *major* — affects most scripts that used the feature; you will need to port |
| 80 | + code. |
| 81 | +- *behavior* — same API, different results; re-check tuned scripts. |
| 82 | + |
| 83 | +Changes are grouped by impact in that order. If you just want to port your |
| 84 | +code, jump to the :ref:`migration checklist <v1_1_0_migration>` at the end. |
| 85 | +Each commit hash links to its diff on GitHub. |
| 86 | + |
| 87 | +.. _v1_1_0_custommodules: |
| 88 | + |
| 89 | +Custom peripheral modules removed *(major)* |
| 90 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 91 | + |
| 92 | +The early custom ``clock`` / ``file`` / ``gpio`` / ``led`` / ``select`` / |
| 93 | +``socket`` / ``spi`` / ``wlan`` / ``uart`` modules were removed in favor of |
| 94 | +MicroPython's built-in ``pyb`` / ``machine`` peripherals. Port scripts to the |
| 95 | +standard MicroPython equivalents (e.g. ``pyb.Pin`` / ``pyb.LED`` / ``pyb.SPI`` |
| 96 | +/ ``pyb.UART``). |
| 97 | + |
| 98 | +*Commits:* `6d2fafa94 <https://github.com/openmv/openmv/commit/6d2fafa94>`__ |
| 99 | + |
| 100 | +.. _v1_1_0_image: |
| 101 | + |
| 102 | +Imaging API moved into the ``image`` module *(major)* |
| 103 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 104 | + |
| 105 | +``Image()``, ``HaarCascade()``, and the descriptor save/load functions are no |
| 106 | +longer bare builtins — they live in the new ``image`` module. Scripts must |
| 107 | +``import image`` and use ``image.Image()`` / ``image.HaarCascade()``. |
| 108 | + |
| 109 | +*Commits:* `54288c535 <https://github.com/openmv/openmv/commit/54288c535>`__ |
| 110 | + |
| 111 | +.. _v1_1_0_clock: |
| 112 | + |
| 113 | +Frame-rate clock moved into ``time`` *(major)* |
| 114 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 115 | + |
| 116 | +The standalone ``clock`` module was removed; the frame-rate clock now lives |
| 117 | +in ``time``. Use ``import time`` and ``clock = time.clock()`` — the returned |
| 118 | +object still provides ``.tick()`` / ``.fps()`` / ``.avg()`` / ``.reset()``. |
| 119 | + |
| 120 | +*Commits:* `a8928ca3b <https://github.com/openmv/openmv/commit/a8928ca3b>`__ |
| 121 | + |
| 122 | +.. _v1_1_0_syspath: |
| 123 | + |
| 124 | +``/flash`` and ``/sd`` no longer added to ``sys.path`` *(behavior)* |
| 125 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 126 | + |
| 127 | +The volume labels / root directory were fixed and ``/flash`` and ``/sd`` are |
| 128 | +no longer auto-appended to ``sys.path``. Scripts that imported helper modules |
| 129 | +by bare name from those locations must add the path explicitly (or place |
| 130 | +modules where they are found). |
| 131 | + |
| 132 | +*Commits:* `09e77b5da <https://github.com/openmv/openmv/commit/09e77b5da>`__ |
| 133 | + |
| 134 | +.. _v1_1_0_migration: |
| 135 | + |
| 136 | +Migration checklist |
| 137 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 138 | + |
| 139 | +For a clean port to v1.1.0 the typical work is: |
| 140 | + |
| 141 | +#. Replace the custom ``gpio`` / ``led`` / ``spi`` / ``uart`` / ``socket`` / |
| 142 | + ``wlan`` / ``file`` / ``select`` modules with MicroPython ``pyb`` / |
| 143 | + ``machine`` (:ref:`the custom-module removal <v1_1_0_custommodules>`). |
| 144 | +#. ``import image`` and prefix ``Image()`` / ``HaarCascade()`` with |
| 145 | + ``image.`` (:ref:`the image module move <v1_1_0_image>`). |
| 146 | +#. Use ``import time`` and ``clock = time.clock()`` |
| 147 | + (:ref:`the clock move <v1_1_0_clock>`). |
| 148 | +#. Add ``/flash`` / ``/sd`` to ``sys.path`` explicitly if you imported helper |
| 149 | + modules by bare name (:ref:`the sys.path change <v1_1_0_syspath>`). |
| 150 | + |
| 151 | +All other scripts run unchanged. |
0 commit comments