roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 09:22

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 10:35 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
Решил создать тему именно на этом форуме потому, что тут всегда можно получить ответ. Всегда найдутся люди которые помогут.
Делаю робота на основе мобильно телефона (Nokia 5530). Компьютер будет в роли сервера. Обмен данными производится через вайфай. Под телефон пишу на JavaME. Написал первое приложение для обмена сообщениями с телефона на комп и обратно, все работает на ура. Программа-сервер ПОКА написана на Делфи. Перешел ко второму этапу разработки ПО для телефона. Нужно передавать кадры с камеры на комп через вайфай 2 раза в секунду. И тут начался кошмар, с JavaME знаком только пару недель. Я пока пытаюсь отослать 1 кадр на комп. И проблема в том что кадр удается получить, даже отправляет, но когда я пытаюсь сохранить полученный кадр, то открыть эту картинку для просмотра не получается, говорит что файл поврежден. Ниже код отправки этого самого кадра
Код:
public void SendIm()
      {
          try
          {
              System.out.println("Get snapshot");
              byte[] raw = videoControl.getSnapshot("encoding=png"); // получаем png картинку с камеры
              int size;
              size = raw.length; // получаем ее размер
              String s;
              s = "file"+Integer.toString(size)+"/";  // сообщение о том что это файл и его размер           
              byte[] d = s.getBytes(); // переводим s в массив байт
              System.out.println(s);
            try
              {       
                  outputStream.write(d); // отправляем на сервер размер файла
                  outputStream.flush();
                  dataOutputStream.write(raw);// отправляем на сервер сам файл
                  dataOutputStream.flush();
              }catch(IOException ioe){}
          }catch(MediaException me){}
      }


На делфи прием файла сделан так:
Код:
rocedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
const
  MAX_BUF_SIZE = $4095;  //Константа буффера
var
sd:integer;
buf: TByteArr;
b: array [0..1] of byte;
str:string;
I,c: integer;
S,RText: String;
Letra: char;
MemoryStream: TMemoryStream;  //Переменная потока памяти
  Buffer: array [0..MAX_BUF_SIZE] of Char;  //Переменная буффера
  pc: PChar;
begin
Timer1.Enabled := true;
RText := Socket.ReceiveText;
if Receive=true then // если сервер в режиме приема файла
  begin
    Writing(RText); // принимаем файл
  end
    else   
  begin
    if copy(RText, 1,4)='file' then // если первое слово в пришедшем пакете file то переводим сервер в режим приема
      begin
        MS := TMemoryStream.Create();
        Delete(RText,1,4); // удаляем из сообщения file
        size := StrToInt(copy(RText,1,pos('/',RText)-1)); // получаем размер файла
        Delete(RText,1,POS('/',RText));
        Receive := true; // переводим серевер в режим приема
if RText <>'' then
        Writing(RText); // принимаем файл
      end;
  end;


procedure TForm1.Writing(TextS: string);
begin
  if MS.Size < size then // если размер буфера меньше  размера файла
  begin
    MS.Write(Texts,Length(Texts)); // пишем в память принятый кусок файла
    //  sMemo1.Lines.Add('Write');
    sProgressBar1.Position := MS.Size*100 div size;
     sStatusBar1.SimpleText := 'Принято '+IntToStr(MS.Size)+' из '+IntToStr(Size);
     end;
     if MS.Size = size then // если приняли все то
     begin
      Receive := true;
      MS.Position := 0;
      MS.SaveToFile('C:\Stream.png'); сохраняем файл на диск
  // Image4.Picture.Bitmap.LoadFromStream(MS);
    //  sMemo1.Lines.LoadFromStream(ms);
      MS.Free;

      sStatusBar1.SimpleText := 'Файл принят';
     end;
end;


И тут проблема, файл в конце оказывается битым. Подскажите что тут не так. Где ошибка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 10:51 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
а какой размер файла получается ? если больше 1500 байт , тогда он бьется на несколько частей и их нужно склеивать на приеме ИМХО

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 10:57 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
Если пересылать картинку в png, то размер около 300кб если bmp, то 900кб, все остальные форматы где-то посредине. Я так и пытаюсь склеивать эти пакеты. А может быть такое что во врема отправки или приема кодировка меняется? И поэтому файлы битые получаются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 11:13 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
zloy_molo4nik писал(а):
Под телефон пишу на JavaME.

Зря. Скорее всего, будут наисерьезнейшие проблемы с производительностью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
Ну что тогда предложите. Нужно передавать видео с камеры на комп.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 11:16 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
zloy_molo4nik писал(а):
RText := Socket.ReceiveText;

Здесь происходит перевод байтов в текст с искажением или потерей некоторых символов, т.к. они не текстовые или трактуются как "не в той кодировке"
Цитата:
MS.Write(Texts,Length(Texts)); // пишем в память принятый кусок файла

Здесь происходит обратное преобразование, но данные уже искажены.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 11:19 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
Тоесть проблемы с самим приемом картинки? Если я правильно понял) Значит нужно пересмотреть прием


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 11:52 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Думаю, да


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 11:57 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
Спасибо за совет. Извиняюсь за наглость, а есть примеры как можно принять эти байты правильно, без искажений. Просто запутался куда читать или MemoryStream или Buffer (socket.ReceiveBuf).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 12:00 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
У меня - нету. Я последний раз видел дельфи сто лет назад.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 13:41 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
elmot, а что бы ты посоветовал использовать для корректного приема картинки, мне ее надо будет обрабатывать библиотеками OpenCV


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 14:50 
Не в сети

Зарегистрирован: 23 май 2006, 23:14
Сообщения: 62
Откуда: Kostroma
Используй ReceiveBuf, принимай в TByteArray а потом в MemoryStream или сразу FileStream


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 15:27 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
Все, разобрался, спасибо. Хотел бы задать вопрос по J2ME. Передаю картинку с камеры телефона, исслользую getSnapshot(), но после этой функции задержка, и картинка долго приходит где-то секунду 1,5. Есть ли способы как-то быстрей сделать снимок с камеры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 16:00 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
шли в бмп или raw

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: wi-fi передача изображений камеры на комп
СообщениеДобавлено: 08 окт 2012, 16:13 
Не в сети
Аватара пользователя

Зарегистрирован: 29 июн 2012, 21:04
Сообщения: 19
Skype: zloy_molo4nik
raw? Где можно почитать про рав?

Добавлено спустя 9 минут 27 секунд:
Все разобрался, спасибо


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO