v2.4.0

v2.4.0 skriver om find_lines() som en Hough-transformsdetektor, lägger till find_line_segments(), find_datamatrices() för avkodning av data-matriser, sensor.set_vsync_output(), läsning/skrivning av bildsegment och många nya skalade bildstorlekar för högre FPS. find_lines(), match_descriptor() och skip_frames() ändrades — läs de brytande ändringarna nedan.

Höjdpunkter

  • find_lines() — omskriven som en Hough-transformsbaserad linjedetektor som returnerar linjeobjekt (fungerar nu på RGB565, inte bara gråskala).

  • find_line_segments() — detektera ändliga linjesegment.

  • find_datamatrices() — avkodning av data-matriser.

  • sensor.set_vsync_output() — driv VSYNC på ett I/O-stift för kamerasynkronisering.

  • Fler bildstorlekar — många ytterligare skalade upplösningar för högre FPS.

  • Brytande: find_lines(), match_descriptor() och skip_frames() ändrades — se de brytande ändringarna.

Nya funktioner

  • image.find_line_segments() — hitta icke-oändliga linjesegment; linjeobjekt fick en .length()-accessor.

  • image.find_datamatrices() — avkodning av data-matriser, med exempelskript.

  • sensor.set_vsync_output(pin) — mata ut VSYNC-signalen på ett GPIO-stift för kamerasynkronisering (OpenMV 2 / OpenMV 3).

  • Bildsegment — bildindexering/buffertprotokollet stöder nu läsning och skrivning av segment av bilddatan.

  • Lade till många ytterligare kombinationer av skalad upplösning/bildstorlek för att stödja högre bildfrekvenser; clock.fps() återställer nu sina ackumulatorer var 2:e sekund så att den rapporterade FPS-siffran följer den senaste frekvensen.

Övriga ändringar och förbättringar

  • OV7725 fönstras till QVGA när upplösningen är ≤ VGA (färre tappade bildrutor vid höga fångsthastigheter) och dess PLL sattes till 6× med en sänkt extern klocka (OpenMV 2 48 MHz, OpenMV 3 54 MHz), vilket ändrar sensorns bildrutetiming.

Buggfixar

Bildbehandling:

  • Åtgärdade buffertstorleksfelet i compress_for_ide() (start-/slutmarkör), QR-avkodning (plus uppströmsfixar i quirc för indexering av cellbitmappar och gränser för justeringsmönster).

Sensor och anslutning:

  • Sänkte sensorklockan på OpenMV 2 för att fungera med den högre sensor-PLL:en (kamerainitiering/-synkronisering) och fick WINC socket.recvfrom() att returnera den faktiska mottagna storleken (genererar fel vid en icke-positiv storlek i stället för att returnera ett föråldrat värde).

Hårdvaru- och kortstöd

  • VSYNC-utgång på ett GPIO-stift (OpenMV 2 / OpenMV 3) som stöder sensor.set_vsync_output().

  • OpenMV 3 — aktiverade pyb.UART UART1.

Brytande API-ändringar

Användarsynliga API-brott mellan v2.3.0 och v2.4.0. Omfattning: Python-C-moduler i modules/ och Python-bibliotek i scripts/libraries/.

Varje ändring är märkt med sin påverkan:

  • major — påverkar de flesta skript som använde funktionen; du behöver porta kod.

  • minor — smalt API; påverkar endast skript som använde det.

  • behavior — samma API, andra resultat; kontrollera trimmade skript på nytt.

Ändringarna är grupperade efter påverkan i den ordningen. Om du bara vill porta din kod, hoppa till migreringschecklistan i slutet. Varje commit-hash länkar till sin diff på GitHub.

find_lines() omskriven som en Hough-detektor (major)

image.find_lines() skrevs om som en Hough-transformsdetektor. Den returnerar inte längre en lista med (x1, y1, x2, y2)-tupler — den returnerar linjeobjekt (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — och fungerar nu även på RGB565 (inte bara gråskala). Argumentet threshold ändrades från ett flyttal mellan 0,0 och 1,0 till en heltalssumma av kantmagnituder, line.magnitude är nu ett heltal, och nya nyckelord theta_margin / rho_margin lades till. Porta kod som packar upp tupler till linjeobjekten och trimma om threshold.

Commits: 31b7b5bf3, f4a9c6154

match_descriptor() returnerar ett matchningsobjekt (minor)

image.match_descriptor() (ORB) returnerar nu ett kptmatch-objekt med accessorerna .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() i stället för en vanlig 8-tupel. Objektet är fortfarande indexerbart/segmenterbart så positionsindexering fortsätter att fungera, men kod som använde isinstance(result, tuple) (eller använde tupelmetoder) måste använda de nya accessorerna.

Commits: e960546b6

sensor.skip_frames() är nu tidsbaserad (behavior)

sensor.skip_frames() omarbetades för att ta emot ett time=-nyckelord (standard ~300 ms) och är nu tidsbaserad som standard i stället för att köra ett fast antal bildrutor, och stoppar tidigt när tiden har gått. Skript som förlitade sig på ett exakt antal bildrutor bör skicka ett explicit antal och/eller ange time= därefter.

Commits: a039b5d1c

Migreringschecklista

För en ren portning till v2.4.0 är det typiska arbetet:

  1. Porta uppackning av tupler i find_lines() till linjeobjekten och trimma om heltalsvärdet threshold (omskrivningen av find_lines).

  2. Använd kptmatch-accessorerna i stället för att behandla resultaten från match_descriptor() som en tupel (ändringen av match_descriptor).

  3. Skicka ett explicit antal och/eller time= till sensor.skip_frames() om du förlitade dig på ett fast antal bildrutor (ändringen av skip_frames).

Alla andra skript körs oförändrade.