Прошивку можно разрабатывать, не имея самой камеры
Наш эмулятор перерос своё название. Кроме HiSilicon в нём теперь Xiongmai,
Goke, Anyka, SigmaStar и Novatek — 69 машин, — и проект переименован из
qemu-hisilicon в qemu-bench. Он
поднимает неизменённую прошивку, и нашу и заводскую, до полноценного Linux.
За эту неделю эмулируемый Novatek дошёл до того, что считает родные нейросети вендора. Классификатор называет, что видит на картинке; штатные детекторы находят людей, машины и лица; отдельная сеть находит кошку и собаку; а распознавание лиц верно разложило по людям стандартный набор снимков, на котором это проверяют все. Там же появились настоящий звук, вывод на панели MIPI DSI и видео H.264 и H.265 на NT98332. А на новой машине SigmaStar SSC375 запускается дамп камеры Dahua и отдаёт видео на свой же RTSP-сервер.
Вендоры ничего этого не публиковали, всё отреверсено. Ради этого мы и делаем цифровых двойников: модель обязана совпадать с живой камерой кадр в кадр, и это сверяется автоматически на каждый коммит, а не обещается в отчёте.
Новый проект: vigil, для видеорегистраторов
OpenIPC теперь не только про камеры. vigil — открытый софт для видеорегистраторов на дешёвом железе. Он показывает камеры на HDMI сеткой два на два и пишет их на диск: сетевые камеры по RTSP или по NETIP, H.264 и H.265, запись без перекодирования, а картинку для показа разбирает железо там, где на плате есть декодер. На регистраторах с аналоговыми входами эти входы тоже видны и пишутся. Запись идёт кусками, каждый играется сам по себе, а когда диск кончается, самые старые удаляются.
Hi3536DV100 проверен на живом железе, RK3588 поддержан, Hi3520DV200 пока опытный, а записывать умеет любой Linux.
Камера умеет читать показания счётчиков
Наведите её на водяной, газовый или электрический счётчик, покажите, где на картинке стоят цифры, — и камера начнёт отдавать не фотографию, а само число. Барабанчики с цифрами читает маленькая нейросеть прямо на процессоре камеры: наружу ничего не уходит, облако не участвует. Красные стрелочные шкалы, которые на водяных счётчиках показывают литры, камера считывает по направлению стрелки и добавляет младшие разряды.
Показания лежат на /metrics и /api/v1/meters и обновляются раз в минуту,
так что любая система мониторинга, которая и так опрашивает камеру, сразу умеет
рисовать расход и поднимать тревогу при утечке. Если камеру сдвинули, она это
замечает и говорит об этом, а не продолжает честно читать кусок стены.
Электронные табло пока не читает.
Камера умеет сама находить пыль на стекле сенсора
Соринка лежит чуть впереди плоскости фокуса, поэтому выглядит не точкой, а мягким пятном в несколько десятков пикселей: она всё время отъедает одну и ту же долю света и не двигается вместе со сценой. Обычно её не замечают годами, пока картинку чем-нибудь не растянут — сильным подавлением дымки, контрастом, серым небом.
Теперь камера ищет такие пятна сама, по живой сцене, без мишеней и без человека перед объективом. Она умеет и отличить пыль на инфракрасном фильтре от пыли на защитном стекле: двигает фильтр и смотрит, что поехало вместе с ним. И отвечает на главный вопрос после чистки — грязь ушла или вы её просто размазали.
Ядро и файловая система переехали в один раздел
Раньше во флеше под них были жёсткие слоты, и каждый образ должен был влезть в свой, даже если у соседа место простаивало. Теперь они лежат встык, и помещаться должна только их сумма.
Что это даёт на Goke V300, по сегодняшней сборке. На камере с 8 МБ флеша система в сборке lite занимает 5099 КиБ при слоте в 5 МиБ — до потолка остался 21 КиБ. Ещё один пакет, и сборка просто перестала бы влезать. В новой разметке этого потолка нет вовсе, а место под настройки заодно выросло с 704 КиБ до 832.
На камере с 16 МБ разница крупнее. В сборке ultimate система занимает 6775 КиБ, а слот под неё — 10 МиБ: 3,4 МиБ лежали мёртвым грузом, потому что отдать их было некуда. Теперь они уходят под настройки — было 3776 КиБ, стало 7360, почти вдвое больше.
И образ получился такой, что его грузит любой U-Boot, включая заводской, — то есть поставить OpenIPC можно, не трогая загрузчик.
Ещё
- Novatek. На этих чипах заработали снимки,
/mjpegи/video.mp4, а поток перестал умирать от перезагрузки настроек. И мы написали пошаговую инструкцию, как поставить прошивку в первый раз из заводского загрузчика. - Подсчёт людей доехал до самой камеры. Неделю назад это была страница в веб-интерфейсе, теперь линии, зоны, время пребывания и почасовая история считаются в самой прошивке.
- У каждой платы в каталоге появилась своя страница, на неё можно дать ссылку: /cameras/boards. А искать плату теперь можно и по названию её прошивки — удобно, когда на руках только файл, снятый с камеры.
- Клуб считает звёзды по камерам, а не по отчётам. Прислали пять отчётов про одну и ту же камеру — это одна камера, а не пять.
- Мы выпустили отдельным релизом детектор людей и машин для камер подсчёта, в xmnpu-models.
- Мы открыли кодировщик Xiongmai. На XM530 видео H.264 жмётся без единой вендорской библиотеки: свой драйвер к Hantro 8290 повторяет ABI заводского модуля вызов в вызов, так что прошивка подмены не замечает. Всё лежит в openxiongmai.
- Доводим до ума поддержку Xiongmai. На XM510 инфракрасным фильтром теперь управляет блок самого процессора, а не ночной код majestic; сторожевой таймер работает как у всех остальных чипов; а страница выводов рисуется по таблице площадок из ipctool и не предлагает то, что уже занято ядром.
- На Goke-платах появился режим экономии памяти для главного потока, а снимки перестали резервировать под себя кадр. Широкие сенсоры теперь влезают в платы с 64 МБ.