Просмотри видео на сканере штрихкодов


    «Из всех искусств для нас важнейшими являются кино и цирк»
    — В.И. Ленин


    Просмотр видео — одно из любимых развлечений в современном мире, фильмы сейчас смотрят практически на всех устройствах, даже на холодильниках. К сожалению, рядом не оказалось подходящего холодильника, и я решил просмотреть фильм на сканере штрихкодов. Под рукой оказался сканер Cipher Lab 8001. Технические характеристики плеера сканера:
    • 16-битный CMOS процессор
    • 1 Мб памяти для программ
    • 1 Мб SRAM для данных
    • FSTN дисплей с LED подсветкой разрешением 100×64


    1 Мб памяти должно было хватить для хранения ролика, но это бы лишило плеер интерактивности, и усложнило процесс разработки. Поэтому выводить на экран будем данные, которые поступают непосредственно с инфракрасного порта. Также для простоты не используются крайние 4 столбца экрана. Итоговое разрешение картинки 96×64 (количество точек в строке кратно размеру байта).

    Прошивка сканера


    В прошивке нет ничего сложного:
    1. Считываем данные с инфракрасного порта;
    2. выводим на экран;
    3. посылаем компьютеру запрос на следующий кадр.

    Единственное, на что следует обратить внимание — размер входящего буфера ограничен 256 байтам. А так как размер целого кадра 96×64/8 = 768 байт, нам придется разбить кадр на 4 блока по 16 строчек. Да, данные влезли бы в 3 блока по 256 байт, но хотелось, чтобы номер блока передавался как первый байт входного буфера.

    int PlaceFromCom(void) {
        long timer;
        int position;
        char c, picture[BLOCK_SIZE];
        unsigned char blockId, loaded;
        
        SendRequest();

        timer = sys_msec;
        loaded = 0;
        position = 0;
        while (sys_msec <= timer + TIMEOUT_MSEC) {
            if (read_com(COM_PORT_NUM, &c)){
                picture[position] = c;
                position++;
                if (position == BLOCK_SIZE){
                    loaded = 1;
                    break;
                }
            }
        }
        if (!loaded){
            printf("Comm error\r\n");
            return 1;
        }
        blockId = (picture[0] % 4);
        show_image (0, blockId * BLOCK_H, IMAGE_WIDTH, BLOCK_H, &(picture[1]));
        return 0;
    }

    Программа вывода


    Программа для вывода видео в COM выглядит еще проще, чем прошивка:
    1. Делаем скриншот экрана;
    2. меняем его размер и конвертируем в двухцветное изображение;
    3. разбиваем на блоки и конвертируем в поток байтов;
    4. ждем запроса от сканера, возвращаем буфер.

    По какой-то причине снятие скриншота в Питоне занимает очень много времени, поэтому в программе это действие вынесено в отдельный поток. Остальной код тривиален. Например, цикл вывода:
    while True:
        data = ser.read(9999)
        if len(data) > 0:
            if data[0] == "V":
                ser.write(chr(currentBlock))
                ser.write(desktop.strings[currentBlock])
                currentBlock = (currentBlock + 1) % blockCount

    Результат работы




    Исходники программ можно скачать тут.
    Поделиться публикацией
    Комментарии 71
      +7
      круть
        +63
        Автор знает толк)
          0
          Ага, гурман
          +8
          С ума сойти
            +1
            2 раза.
            +20
            Музыка тоже через него играет? :-)
              +22
              Это тема следующего топика. Частотный диапазон устройства 1—6 кГц, длительность ноты от 1/100 секунды.
                +2
                Отлично, будем ждать :-)
                  0
                  Я подумал, что это невозможно, но смотреть видео на сканере штрих кодов тоже.
                  0
                  Не исключено что, в сканере есть спикер, но в ролике явно звук при обработке добавлен или воспроизводится параллельно с записью видео. Да и процессор не вовремя с обновлением кадров справляется, какой уж тут звук. :-)
                  –19
                  Не мне одному показался ролик больно знакомым?
                  • НЛО прилетело и опубликовало эту надпись здесь
                      –2
                      Это клип Benny Benassi — Satisfaction, ваш самизнаетекто.
                      +3
                      Обожемой. Satisfaction тут как нельзя кстати.
                        +1
                        Это супер!
                          +3
                          Отличный пятничный JFF-пост =)
                          • НЛО прилетело и опубликовало эту надпись здесь
                            –2
                            MaaadMan!!!
                              +4
                              Один из немногих случаев, когда я смотрел видео «плохого» качества задержав дыхание.
                                +6
                                У меня где-то завалялись исходники, исполняющие мелодию из «Бумера» на фискальном регистраторе, но ваш experience недостижим. Браво!
                                  +27
                                  Женские журналы проигрывают видео, сканеры штрих-кодов…
                                  Расскажи это футурологам прошлого — в дурку посадят.
                                    +3
                                    Фулл ЭйчДи прям ))
                                      +1
                                      Маньяк))
                                        0
                                        Чем дальше в будущее, тем оно страшнее.
                                        А что вообще должно было делать это устройство, зачем в нем дисплей и клавиатура?
                                          +7
                                          Это не совсем сканер штрихкодов, это — терминал сбора данных, используется в основном на складах. Он может хранить базу товаров, считать их количество, записывать приходы, расходы, а позже синхронизировать все с компьютером.
                                            0
                                            — Что ты сделал с моим сканером?
                                            — А ты пожалуйся начальству, что я заставил твой сканер клипы показывать, посмотрим, кому больше поверят.
                                          0
                                          Блин) не сдержусь на работе таких много проскакивает )
                                            +6
                                            Офигеть до чего додуматься можно! Класс!

                                            В последнее время все больше появляется подобных нестандартных «изобретений». Можно пофантазировать о том, что могут придумать (если еще нет :-):

                                            Проецирование фильма на какую-нибудь плоскость (например, стену) с помощью фар автомобиля — что-то вроде мобильного кинотеатра;
                                            Или фонарик с таким же принципом;
                                            Или, например, видео на PHP — автоматически обновляемый скриптик, который отображает по порядку автоматически генерированные картинки.

                                            Много чего придумать можно :-)
                                              0
                                              Я думаю проецировать экран через фары не сложно. Надо всего лишь вместо стекла фары поставить ЖК-матрицу :) А так как фары две, то можно проецировать стерео-картинку.
                                              +5
                                              Примерно как я смотрю аниме через libcaca. Через ssh. На воге.
                                                –18
                                                Безусловно круто, но…



                                                  +11
                                                  Вам безусловно стало легче, при публикации этой неновой картинки, значит свою функцию она выполнила.

                                                  Просто поразмышляйте на досуге, что где-то существуют люди которые просто могут делать необычные вещи и им (затраты времени, денег, ума) это почти ничего не стоит, в отличии от.
                                                    –6
                                                    Картинка не нова. И я не сомневаюсь, что её видели все кто только мог. Смысл заложенный в ней от этого не меняется.

                                                    Автор поста, безусловно — талантище. Но столько трудов… искусство ради искусства.

                                                    Наверное я слишком прагматичен чтобы оценить это.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                        0
                                                        Но столько трудов… искусство ради искусства.
                                                        Наверное я слишком прагматичен чтобы оценить это.

                                                        А ради чего тогда, если не ради самого себя существует искусство?
                                                          0
                                                          Все, что делается не дари искусства, называется ремеслом.
                                                      –1
                                                      Респект, что цитату привели целиком. А то ее обычно пафосно произносят, без последнего слова.
                                                      P.S. Кино — безусловно великое искусство, но вырывание из контекста меняет смысл кординально.
                                                        +19
                                                        Полностью она звучит так: "Пока народ безграмотен, из всех искусств для нас важнейшими являются кино и цирк". (Полное собрание сочинений. 5-е изд., Т. 44., с. 579)
                                                          0
                                                          Что-то мне кажется, что в массе своей народ всегда будет безграмотным, особенно в свете последних тенденции…
                                                          Простите, понесло.
                                                            +1
                                                            Респект, однако. Думал — вы изучали труды этого товарища в институте, т.к. это было неотъемлемой частью программы. А вы оказывается моложе меня :) (А я о неполности цитаты сужу, можно сказать, — по наслышке).
                                                              0
                                                              Мне недавно попадалась интересная ссылка — «Фразы, не дослушанные до конца».
                                                                0
                                                                А еще помница такое было: "… путешествие в тысячу ли начинается с одного шага. Кто действует — потерпит неудачу."
                                                          0
                                                          А что там со скриншотами на питоне не так? ImageGrub из PIL достаточно быстро работает вроде
                                                            0
                                                            У меня получалось 1/4 секунды на скриншот. Если в этот момент ничего не выводить на сканер, то это очень заметно.
                                                            0
                                                            Когда-то давно для примитивного Siemens C55 была такая программка, которая показывала видео. Это было завораживающе. Так вот, эта программка умела показывать 4 градации серого, имитируя это мерцанием.
                                                              +3
                                                              Этот сканер хоть остался сканером?? или дорога в один конец?)
                                                                +1
                                                                Остался сканером, там прошивка тоже заливается через ИК порт.
                                                                +1
                                                                Будет чем заняться на работе в понедельник. Как раз новую задачу с Cipher'ом поставили…
                                                                  0
                                                                  Прикольно :) На более старших Сайферах есть поддержка радиосвязи. В программировании ничего хитрого тоже.
                                                                    0
                                                                    А для сабжа есть SDK какой-то? А то не очень понятно, чем компилить и как шить. И что такое «8000lib.h» например. Не очень понятно так же, что все-таки там за процессор, моделька не указана. Какая частота например?
                                                                    А так все супер, улыбнули с утра.
                                                                      0
                                                                      Там родной SDK именно для этих сканеров, и компилятор от Тошибы (почему?). Прошивается загрузчиком который идет в комплекте со сканером.
                                                                      0
                                                                      А если на устройстве сделать буфер хотя бы для 2х-3х кадров, то возможно видео не будет так подтормаживать?
                                                                        0
                                                                        Возможно, я не проверял. В связке может быть три бутылочных горлышка:
                                                                        1. Снятие скриншота (см. выше).
                                                                        2. Передача данных (по ИК порту удалось получить только 38400 кБит/с)
                                                                        3. Непосредственно вывод
                                                                        Надо комбинировать и искать самый оптимальный вариант, но это выходит за рамки пятничного поста)
                                                                        0
                                                                        Автор, а какой там процессор стоит? Вы пользовались родным SDK?
                                                                          0
                                                                          Какой процессор не знаю, SDK родной.
                                                                            0
                                                                            Вы крут!
                                                                            0
                                                                            а еще такое предложение: возможно ли было передавать только изменяющиеся области экрана? тогда бы скорость прорисовки на статических сценах увеличилась, впрочем вы и сами это понимаете.
                                                                              –1
                                                                              Тогда уж видеопоток гнать напрямую %)
                                                                              +1
                                                                              Обалдеть! Я уже и забыл, что в своё время змейку забацал на точно таком же. =)
                                                                              Приятные воспоминания…
                                                                                +1
                                                                                LioL > задали написать софт для штрихкод-сканера, чтоб с нашей левой базой не глючил… осталось ровно 32кб памяти
                                                                                LioL > ну я и написал змейку… управляется через последнюю цифру штрихкода
                                                                                LiOL > сегодня прихожу на склад… грузчики наклеили на лист бумаги по четыре штрихкода и играют… ВСЕ…
                                                                                вы?
                                                                                  0
                                                                                  Не, не моё =)
                                                                                  С клавиш управлялось, но аппарат здоровский!
                                                                                0
                                                                                Стимбой аднака ))
                                                                                  0
                                                                                  Круто! А я прочитал заголовок и подумал, что уже и там стали ставить такое железо, которое видео тянет, а все хитрее оказалось. Кстати, а ИК порт еще где-то сохранился в устройствах или приходится какой-то внешний вариант использовать?
                                                                                    0
                                                                                    Классный пост, из области Artisan Crafts в IT. Честь вам и хвала, автор! Невольно вспоминается Code Pilot, девайс из продвинутых старых наборов LEGO Technic, он с помощью штрихкодов управлял моторчиками и музыкой, и даже одним-двумя концевиками. Особой прелестью была автоматическая генерация условий в получавшейся программе. Помнится, я даже спроектировал на основе набора довольно функциональную автоматическую линию… Жаль, фото не сохранилось.
                                                                                      0
                                                                                      Лишь эпиграф в этой статье надо бы поправить.
                                                                                      Ленин никогда не произносил части этой фразы «и цирк». По крайней мере источников пока не обнаружено.
                                                                                        0
                                                                                        Интересно, можно ли управлять считывателем штрих-кодов так, чтобы он свой красный луч с определённой частотой включал-отключал? Можно было бы на стенах картинки рисовать ) А ещё у нас есть такой девайс, как «дисплей покупателя» — тоже, наверное, можно было бы интересного напрограммировать…
                                                                                          0
                                                                                          торт

                                                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                          Самое читаемое