Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2018, 08:40   #1
nobody_32
 
Регистрация: 10.03.2018
Сообщений: 4
По умолчанию Сохранение изображения из порта

Здравствуйте.

В интернетах не нашел, пишу сюда просьбу помочь.

Есть плата Ардуино с подключенной камерой, которая пишет в последовательный порт поток символов. Мне как-то нужно преобразовать этот поток в видео или, на крайний случай, в ряд изображений.

Попробовал с одним изображением, но в следующем коде интерпретатор пишет "not enough image data":

Код:
import serial
from PIL import Image
from base64 import decodestring

r = serial.Serial('/dev/ttyACM0', 115200)
imagestr = r.read()

image = Image.frombytes('RGB',(320,200),decodestring(imagestr))
image.save("foo.png")
Наверное, это не то... Может, вот так? Но там всего 5 байт:

Код:
import serial
from PIL import Image
from base64 import decodestring

r = serial.Serial('/dev/ttyACM0', 115200)
imagestr = r.read()

with open("file.png", "wh") as f: 
 data = imagestr 
 de = data.encode("base64")
 f.write(de)

Последний раз редактировалось nobody_32; 13.03.2018 в 09:20.
nobody_32 вне форума Ответить с цитированием
Старый 09.04.2018, 07:56   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

1. вы подключились к устройству и ожидаете что оно сразу откинет вам данные?
Код:
r = serial.Serial('/dev/ttyACM0', 115200)
imagestr = r.read()
вы правда так думаете?
2. Вы думаете что за одну передачу Вам прилетит весь поток данных?
Код:
imagestr = r.read()

image = Image.frombytes('RGB',(320,200),decodestring(imagestr))
image.save("foo.png")
или это получили один пакет и думаете что это data?
Код:
with open("file.png", "wh") as f: 
 data = imagestr
Как минимум нужно сделать бесконечный цикл в котором будете принимать поток данных.

Код:
ser = serial.Serial('/dev/ttyS5', 19200, timeout=0)
  while True:
затем как минимум проверить что что-то сыпется
Код:
 out = ser.readline()
        if len(out) > 0:
и только после условия собирать пакет данных и сохранять в файл. причем нужно знать когда передача изображения окончена. для этого хорошо бы код с ардуины показать. потому как там по-любому должен быть флаг окончания передачи.

Если у Вас та камера о которой я думаю то код может быть следующим.

Код:
import binascii

count = 0

for count in range (0,4):

    f = open ("PIC%d.txt" % (count),"r")
    nf = open("IMAGE%d.jpg" % (count),"wb")

    #Read whole file into data
    while 1:
        c = f.readline()
        d = c.strip()
        #print (c)
        #print (d)
        if not c:
            break
        nf.write(binascii.a2b_hex(bytes(d, "ascii")))


    # Close the file
    f.close()
    nf.close()
Ссылки в помощь
1. https://github.com/oskarirauta/Adafr...Camera-Library
2. https://hkalasua.wordpress.com/2017/...70-arduino-sd/
3. https://gist.github.com/rogerclarkme...a34530e522be08
4. http://www.instructables.com/id/Send...ython-Via-USB/

Не знаю что Вам поможет. в случаи чего гуглите дальше.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение данных COM-порта в несколько файлов bedouin Общие вопросы C/C++ 37 01.07.2013 19:09
Сохранение изображения в БД shturman1387 БД в Delphi 5 21.12.2012 17:20
Tstrem сохранение изображения Fellics{новичок} Помощь студентам 0 28.12.2011 18:40
сохранение изображения ВалекFCRK Общие вопросы Delphi 9 26.09.2011 21:49
сохранение изображения dedyshka Свободное общение 2 21.11.2009 23:43