клас TVDisplay – Драйвер TV Shield#

Клас TVDisplay керує OpenMV TV Shield, який перетворює кадровий буфер RGB565 на композитний відеосигнал NTSC (352x240, 60 полів/с із прогресивним скануванням), придатний для будь-якого телевізора або аналогового відеомонітора.

Підтримуються два варіанти шилда:

  • Дротовий TV Shield, який виводить композитний сигнал на один роз’єм RCA.

  • Wireless TV Shield, який подає той самий сигнал на аналоговий відеопередавач 2,4 ГГц. Канал приймача (1–8) вибирається під час виконання через ioctl() з display.IOCTL_CHANNEL; до цього виклику канал не вибрано.

Роздільна здатність та кадрування фіксовані — TVDisplay не приймає аргумент framesize. Кадри відображаються шляхом передачі image.Image до write(), який внутрішньо виконує масштабування, ROI, перетворення палітри та орієнтації.

Приклад використання:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF)              # 352x240, matches the TV output

tv = display.TVDisplay()

while True:
    tv.write(csi0.snapshot())

Конструктори#

class display.TVDisplay(triple_buffer: bool = True)#

triple_buffer Якщо True, оновлення екрана стає неблокуючим за рахунок витрат 3X розміру дисплея в RAM. Значення за замовчуванням залежить від плати.

deinit() None#

Звільняє виводи та RAM, що використовуються класом. Викликається автоматично при знищенні об’єкта.

width() int#

Повертає ширину екрана (352).

height() int#

Повертає висоту екрана (240).

refresh() int#

Повертає частоту оновлення (60).

triple_buffer() bool#

Повертає інформацію про те, чи увімкнено потрійну буферизацію.

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 256, color_palette: int | 'image.Image' | None = None, alpha_palette: 'image.Image' | None = None, hint: int = 0) None#

Відображає image, лівий верхній кут якого починається у точці x, y.

x_scale визначає масштабування відображуваного зображення по осі x (число з плаваючою точкою). Від’ємне значення горизонтально відображає зображення.

y_scale визначає масштабування відображуваного зображення по осі y (число з плаваючою точкою). Від’ємне значення вертикально перевертає зображення.

roi — кортеж прямокутника області інтересу (x, y, w, h) зображення для відображення.

rgb_channel — канал RGB (0=R, G=1, B=2) для витягнення з зображення RGB565 та відображення на дисплеї.

alpha визначає непрозорість зображення. Значення 256 відображає непрозоре зображення, значення менше 256 дає чорне прозоре зображення. 0 дає повністю чорне зображення.

color_palette якщо не -1, може бути переліком кольорової палітри або 256-піксельним зображенням RGB565 для використання як таблиці відповідності кольорів за значенням відтінків сірого вхідного зображення.

alpha_palette якщо не -1, може бути 256-піксельним зображенням GRAYSCALE для використання як палітри альфа-каналу, що модулює значення alpha вхідного зображення на рівні кожного пікселя.

hint — логічне АБО прапорців:

  • image.AREA: Використовувати масштабування по площі при зменшенні.

  • image.BILINEAR: Використовувати білінійне масштабування.

  • image.BICUBIC: Використовувати бікубічне масштабування.

  • image.CENTER: Центрувати зображення на дисплеї (після масштабування).

  • image.HMIRROR: Горизонтально відобразити зображення.

  • image.VFLIP: Вертикально перевернути зображення.

  • image.TRANSPOSE: Транспонувати зображення (поміняти x/y).

  • image.EXTRACT_RGB_CHANNEL_FIRST: Застосувати витягнення rgb_channel перед масштабуванням.

  • image.APPLY_COLOR_PALETTE_FIRST: Застосувати color_palette перед масштабуванням.

  • image.SCALE_ASPECT_KEEP: Масштабувати з вписуванням у дисплей.

  • image.SCALE_ASPECT_EXPAND: Масштабувати для заповнення дисплея (з обрізанням).

  • image.SCALE_ASPECT_IGNORE: Масштабувати для заповнення дисплея (з розтягуванням).

  • image.ROTATE_90: Повернути на 90 градусів (VFLIP | TRANSPOSE).

  • image.ROTATE_180: Повернути на 180 градусів (HMIRROR | VFLIP).

  • image.ROTATE_270: Повернути на 270 градусів (HMIRROR | TRANSPOSE).

clear(display_off: bool = False) None#

Очищує екран до чорного кольору.

display_off приймається для сумісності API з іншими класами дисплеїв та ігнорується.

ioctl(cmd: int, *args) object#

Загальна точка входу ioctl.

Передайте display.IOCTL_CHANNEL як cmd, щоб встановити або отримати канал трансляції бездротового TV Shield. З другим аргументом (1-8) канал встановлюється; без другого аргументу повертається поточний канал. Канал не вибирається до першого виклику встановлення.