Обработка видео

Fedor video
Offline
Зарегистрирован: 31.07.2018

Всем доброго времени суток. Необходимо решение следующей задачи.

Изображение, снятое с видеокамеры, необходимо преобразовать в последовательность напряжений от 0 до 100 V с 160-ю градациями яркости.

На первом этапе необходимо 400 равномерно распределенных точек преобразования.

sadman41
Offline
Зарегистрирован: 19.10.2016

Камера-то в 4K поток выдает хотя бы?

Fedor video
Offline
Зарегистрирован: 31.07.2018

4К это что

 

Fedor video
Offline
Зарегистрирован: 31.07.2018

?

 

Fedor video
Offline
Зарегистрирован: 31.07.2018

Есть требования к потоку?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А есть пожелания насчет платформы?

Fedor video
Offline
Зарегистрирован: 31.07.2018

нет

Fedor video
Offline
Зарегистрирован: 31.07.2018

хотелось оценить принципиальную возможность, а уж потом если понадобиться, оптимизировать

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Сообщу вам на всякий случай, что тут один товарищ пытался JPG распаковать на ардуине - так и ушел ни с чем.

Fedor video
Offline
Зарегистрирован: 31.07.2018

уважаемый sadman41 я не специалист в этой предметной области (иначе сделал бы сам) я как мог формализовал задачу, в ньюансы , честно говоря, не вникал

magstar
Offline
Зарегистрирован: 13.01.2016

Это например 320*240 сжать до 20*20 с градацией яркости пикселя 160 уровней?

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

И что тут хитрого? Особенно если камера 4К выдаёт

Fedor video
Offline
Зарегистрирован: 31.07.2018

получапется, что это невозможно в принципе? тогда уменьшим градации яркости. Я уловил? Повторюсь, мне приходиться вникать на ходу

Fedor video
Offline
Зарегистрирован: 31.07.2018

Да хитрого ничего, надо сделать и все

 

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Почему невозможно?

Fedor video
Offline
Зарегистрирован: 31.07.2018

Если это возможно, сделайте, обозначив сроки и цену

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Ну неделя уйдёт.

Fedor video
Offline
Зарегистрирован: 31.07.2018

Да, именно так

Fedor video
Offline
Зарегистрирован: 31.07.2018

А по деньгам?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Неделя на обработку одного кадра кластером ардуин.

magstar
Offline
Зарегистрирован: 13.01.2016

Мне кажется, заказчик просит подкинуть ничего не писал,,,

magstar
Offline
Зарегистрирован: 13.01.2016

Про подкинуть ( автозамена итить)

magstar
Offline
Зарегистрирован: 13.01.2016

Про ардуину

sadman41
Offline
Зарегистрирован: 19.10.2016

Федор, ардуина (та, что в массовом сознании существует) - она не для того (вы же не просто так именно на этом форуме написали). Вам нужно, на мой взгляд, сразу смотреть на Orange Pi, как минимум. Потому как для анализа потока с камеры с приемлимой скоростью (а вам, поди, рилтайм нужен) нужно столько памяти и дури в процессоре, сколько у ардуин отродясь не было.

Fedor video
Offline
Зарегистрирован: 31.07.2018

magstar  все верно уловил, мне важен факт реализации задачи

Fedor video
Offline
Зарегистрирован: 31.07.2018

sadman41 спасибо за совет, я серьезно

sadman41
Offline
Зарегистрирован: 19.10.2016

magstar пишет:
Про ардуину

Он и про другие немаловажные параметры не пишет. На i7, например, это легко сделать. Но данный форум не про i7, верно? И этот факт заставляет делать определенные предположения о направлении мысли.

Или же это тот самый человек с непрпатченным KDE.

sadman41
Offline
Зарегистрирован: 19.10.2016

Fedor video пишет:

sadman41 спасибо за совет, я серьезно

Хорошо, что вы понимаете. Еще я скажу, что задача ваша описана крайне абстрактно. Ни формата потока, ни разрешения, ни интерфейса, ни того, куда эти 400 точек сливать - ничего нет. Соответственно - конкретной реализации в железе придумать нельзя.

magstar
Offline
Зарегистрирован: 13.01.2016

Про KDE смешно:)))

Fedor video
Offline
Зарегистрирован: 31.07.2018

sadman41 я формализую завтра более конкретно. Процесс то итерационный. А вдруг и при такой степени формализации задачи навалились бы толпы исполнителей ))))

magstar
Offline
Зарегистрирован: 13.01.2016

Кстати, про kde- а есть спецфорум по видео+ minihard (любой)+ сжатие+ вывод в ккда-нитт?

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

sadman41 пишет:

Неделя на обработку одного кадра кластером ардуин.

Ну да. Я это и имел ввиду

Fedor video
Offline
Зарегистрирован: 31.07.2018

Доброго времени суток. С учетом предыдущих замечаний хочу представить второй вариант ТЗ.

Необходимо преобразовать видеопоток  от камеры в последовательность импульсов, кодирующих местоположение и яркость пикселя. При этом не надо передавать  всю матрицу, а только 400 точек, равномерно распределенных по ней.

  1. Формат потока M-JPEG (формат не принципиален, на этапе тестирования можно подобрать камеру с форматом, который проще всего конвертировать).
  2. Разрешение 320*240 преобразовать 20*20 с градацией 10.
  3. Передача в устройство- последовательно по пикселю- 1-й в 1-й строке, 2-й в 1й строке..... 20-й в 20-й строке, так как порядок четко обозначен передаем только яркость пикселя , между кадрами - инфопосылку конца и начала кадра. Яркость - по параллельному шлейфу
skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Ну это уже проще. 

А чем раскодировать M-JPEG ? Неужто Ардуиной? Да ещё 30 кадров за секунду. Она хоть бы с BMP справилась.

negavoid
Offline
Зарегистрирован: 09.07.2016

Я сделал вашу задачу за 5 минут и из двух модулей, но... :)

ffmpeg -f dshow -i video="Logitech HD Webcam C270" -vframes 1 -y camera.jpg
<?php
const IMG = "camera.jpg";
const WIDTH = 20;
const HEIGHT = 20;

$src = imagecreatefromjpeg(IMG);
$dst = imagecreatetruecolor(WIDTH, HEIGHT);

list($width, $height) = getimagesize(IMG);
imagecopyresampled($dst, $src, 0, 0, 0, 0, WIDTH, HEIGHT, $width, $height);

// imagefilter($dst, IMG_FILTER_GRAYSCALE);
imagetruecolortopalette($dst, false, 160);

// $com_port = new \PhpSerial("COM42");
// $com_port->send_line("BEGIN_FRAME");

for ($x = 0 ; $x < WIDTH; $x++){
	for ($y = 0 ; $y < HEIGHT; $y++){	
		$color = imagecolorat($dst, $x, $y);
		
		echo $color . "\r\n";
		// $com_port->send_line( $color );
	}
}

// $com_port->send_line("END_FRAME");

 

Fedor video
Offline
Зарегистрирован: 31.07.2018

Но?

negavoid
Offline
Зарегистрирован: 09.07.2016

Но под i7 под управлением Windows :) Впрочем, на raspberry тоже будет работать, только захватывать кадр надо не через directshow.

sadman41
Offline
Зарегистрирован: 19.10.2016

Использование шаблонизатора для обработки видео... этого я еще не видел в своей практике ))

Fedor video
Offline
Зарегистрирован: 31.07.2018

Все бывает в первый раз ;-) а если серьезно беру тайм аут возможно на этапе тестирования и этот вариант подойдет

negavoid
Offline
Зарегистрирован: 09.07.2016

Этот вариант, как бы так помягче, не совсем для продакшен применения. Но может, и вправду подойдёт :D

sadman41, ну давайте на баше обработаем картинку, imagemagick там блаблабла convert --palette 160... Или на бейсике, да хоть на тикле, прототипу-то какая разница? Или нужен только расово верный чистый си?

PS А-а, вот оно что, блин, я не заметил, что это "ищу исполнителя". Не-не, я не исполнитель, не хочу и не буду.

Patison
Offline
Зарегистрирован: 20.05.2015

Fedor video пишет:
 Необходимо решение следующей задачи.

У меня есть решение на одной Arduino Nano и модуле камеры OV7670:

https://drive.google.com/open?id=1OtIjjz2YZCVbKnZHk8kyYKoTer5mWsYE

Такой вариант не подойдет?

Fedor video
Offline
Зарегистрирован: 31.07.2018

Сколько стоит ваше решение?

Fedor video
Offline
Зарегистрирован: 31.07.2018

А пока поговорим о raspberry. Решение будет таким же оперативным?

Fedor video
Offline
Зарегистрирован: 31.07.2018

Решение на Arduino Nano, какова стоимость?

Patison
Offline
Зарегистрирован: 20.05.2015

Fedor video пишет:

Сколько стоит ваше решение?

Ваши предложения?

Нужно учесть, что ранее я на это решение потратил некоторое время и силы. И еще к моему работающему варианту нужно дописать вывод в требуемом для вас формате. У меня каждый кадр изображения с камеры в сжатом виде сохраняется в Ардуине в сжатом виде в кадровом буфере, а затем передается в PC через стандартный USB UART после программной бинаризации внутри Ардуино. Из-за низкой пропускной способности этого канала связи получился невысокий FPS. Однако сама Ардуино может обрабатывать от 15 до 30 кадров в секунду. Естественно, с не очень большим разрешением. Но для вашей задачи этого должно быть достаточно.

https://drive.google.com/open?id=1vRlfcfsfFkFucDQCJQfwDvnIRXBKDFTr

Fedor video
Offline
Зарегистрирован: 31.07.2018

А что изображено на камере? Можете прислать такой же рисунок  ну например кружки? Мне это нужно для оценки разрешения 

__Alexander
Offline
Зарегистрирован: 24.10.2012

Patison пишет:

Однако сама Ардуино может обрабатывать от 15 до 30 кадров в секунду. 

Не может. Она может перенаправить поток куда либо еще, но никак не обработать. Для этого у авр недостаточно ОЗУ.

Patison
Offline
Зарегистрирован: 20.05.2015

__Alexander пишет:

Не может. Она может перенаправить поток куда либо еще, но никак не обработать. Для этого у авр недостаточно ОЗУ.

В Ардуино, как я писал выше, я нашел место в ОЗУ под кадровый буфер в специальном формате. Ардуино в потоке сжимает каждую строку с камеры и помещает результат в кадровый буфер.

Не обязательно 30 FPS использовать. В Ардуино есть еще место для размещения простой нейросетки. Если хотя бы один раз в секунду или две секунды Ардуино будет распознавать хотя бы простые предметы перед камерой, будет весьма забавно. Я хотел доделать этот ардуиновский проект до такой стадии, но пока занят другими более сложными нейросетевыми и онтологическими проектами. Кстати, у меня есть работающий проект с такой же камерой на одной FPGA. Не предлагаю его только из-за высокой цены применяемой FPGA. Но там уже все может работать в полный рост.

__Alexander
Offline
Зарегистрирован: 24.10.2012

Вот плис да, идеальный вариант. Но можно и попроще, тот-же стм. Он хоть 24 нужных мегагерца может дать на камеру, а не как авр, всего 8, которые ниже нижних документированных 10-ти. А это уже не готовый продукт, а херня.

Мне больше интересно, что за девас у ТС, которому надо кормить от 0 до 100 вольт? Я надеюсь последовательно, или 400 транзситоров надо?

 

 

Patison
Offline
Зарегистрирован: 20.05.2015

Fedor video пишет:

А что изображено на камере? Можете прислать такой же рисунок  ну например кружки? Мне это нужно для оценки разрешения 

Камере я предъявлял лист бумаги с шахматным полем, которое обычно использую для калибровки алгоритмов стереозрения.

Кружочки прямо сейчас не могу отослать, т.к. нужно активировать проект. На это уйдет некоторое время, которого у меня сейчас в обрез.

Скажу лишь, что в Ардуино поступает цветное изображение формата QVGA (320х240) пикселов. Ардуино программно анализирует каждый пиксел , а затем преобразует в бинарное изображение в 80х60 пикселов, для того, чтобы сохранить в кадровом буфере внутри себя. Это бинарное изображение вы и видите в скриншоте с экрана PC.

Для вашей задачи я могу написать другой постпроцессор для Ардуины. И тогда каждый из (320х240) пикселов может быть обработан другим способом. В таком случае с кружочками вряд ли будут какие-то проблемы.

Fedor video
Offline
Зарегистрирован: 31.07.2018

Вас понял. Называйте стоимость с учётом модуля вывода в нужном мне формате. Вы исполнитель, вы и определяйте стоимость работы. Я могу назвать только с потолка