Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Беспроводная передача данных удаленному приемнику↑ ⇐ ПредыдущаяСтр 5 из 5 Содержание книги
Поиск на нашем сайте
Так же для соединения нескольких устройств, можно прибегнуть к беспроводному каналу связи, который может увеличить мобильность нашей системы. Самыми распространенными системами беспроводной передачи данных на данный момент являются: · Zigbee · Bluetooth · Wi-fi Технология передачи данных Bluetooth (стандарт IEEE 802.15) – технология, которая позволяет создать беспроводную передачу данных. Передача данных идет на частоте 2.4 ГГц, которая является не лицензируемой, и на расстоянии от 10 до 100 метров. Даная технология позволяет общаться мобильному телефон, персональному компьютеру и другим устройствам, не имея прямой видимость. Существует несколько топологий соединения данной системы: · Точка – точка · Точка – многоточек Рисунок 32 – Разные вариант топологии сети a) один подчиненный б) несколько подчиненных в) распределенная сеть Обозначения: M – основное (master) S – подчиненное (slave) Данный тип связи можно отнести к централизованному типу, так как в одной сети не может находиться два основных устройства (master). Скорость передачи данных может достигать 1 Мб/сек. Максимальной количество устройств в одной сети может быть не более 7. ZigBee является технологией беспроводной передачи данных, работающий по стандарту IEEE 802.15.4. Возможны три варианта топологи в сети ZigBee: a. Звезда b. Каждое с каждым c. Кластерное дерево Рисунок 33 – Пример топологии сети ZigBee Существую два типа устройства данного тип: с ограниченным (RFD) и полным (FFD) функционалом. Данное разделение сделано для уменьшения стоимости устройств. RFD устройство может использоваться только в топологии «звезда», так же оно не может выступать в роли маршрутизатора сети, обмен данными возможен только с координатором, как правило питание производится через пальчиковые батарейки. FFD устройства могут использоваться в трех вариантах топологии сети (звезда, каждое с каждым, кластерное дерево), имеет возможность быть координатором и выполнять маршрутизацию данных, как правило питается от внешнего источника питания. Имеется три варианта передачи данных по сети ZigBee: · Периодическая посылка информации · Прерывистая посылка информации · Повторяющаяся посылка информации Периодическая посылка информации характерна для счетчиков или беспроводных датчиков. Большую часть времени данное устройство находится в состоянии сна. В некоторый момент времени устройство выходит и сна, производит поиск сигнала маяка, найдя его, осуществляет передачу данных и засыпает. Это способствует очень низкому энергопотреблению, что позволяет устройству питаться от батарейки. ZigBee работает на частоте 2.4-2.483 ГГц, скорость передачи данных составляет 250 кбит/с, время непрерывной работы от батареи достигает до 1000 дней, максимальное количество устройств в одной сети может достигать 65535 устройств. Wi-fi является самым распространённым основным стандартом создания беспроводных сетей, работящая по стандарту IEEE 802.11. Основное назначение данных типов сетей является доступов в интернет. Существует несколько основных индексов, пользующиеся наибольшей популярностью у производителей: a, b, g и i. Остальные же буквенные обозначения представляют собой усовершенствования, исправления и дополнения уже существующих технических решений. Распространение данной технологии можно связать с её высокой пропускной способность, огромным количеством устройств в одной сети и хорошими показателями дальности связи. Технологии типа a,b,g,n отличаются скоростью передачей данных, которое составляет 54, 11, 54, 750 Мб/с соответственно. Расстояние передачи данных в помещении достигает 50-100 метров, что является очень хорошим показателем. Такие технологии, как Bluetooth и ZigBee, не могу похвастаться такими хорошими показателями дальности передачи сигналов.
Таблица 5 – Сравнительная характеристика стандартов технологии Wi-Fi
Для решения поставленной задачи по передачи данных так же можно воспользоваться и беспроводным способом передачи данных. Проведя обзор существующих решений по передачи данных была собрана таблица 6.
Таблица 6 – Сравнительная характеристика беспроводных технологий передачи данных.
Для решения поставленной задачи подходит технология беспроводной передачи данных Wi-fi. Она обладает хорошими показателями: скорость передачи, диапазон действия. Так же данная технология имеет высокий показатель использования, что позволит без труда найти устройство, подходящее под Raspberry pi 2. Так же не придется писать драйверов для работы с данным адаптером, что сэкономит временные затраты. Далее необходимо будет разобраться с протоколом передачи данных, которых существует огромное количество. Так для беспроводной и проводной передачи данных существуют общие протоколы, которые работаю при разных способах передачи данных. Протокол передачи данных IP Межсетевой протокол IP (Internet Protocol) – является протоколом, соединивший различные компьютерные сети в сеть Интернет. IP – адрес является основной частью данного протокола. Данные протокол не гарантирует доставки пакета до места назначения. Информация может прийти не в том порядке, что была отправлена. Так же она может быть повреждена и может быть продублирована или же не прийти. Для гарантии безошибочной доставки информации необходимо обратиться к протоколам более высокого уровня, например TCP или UDP. Существует четыре уровня протоколов: · Прикладного уровня (Application layer), например: HTTP, DNS, FTP · Транспортного уровня (Transport layer), например: UDP, TCP · Сетевого уровня (Internet layer), например: IP · Канального уровня (Link layer), например: IEEE 802.11, Ethernet
TCP (Transmission Control Protocol) является набором сетевых протоколов передачи информации, включая Интернет. Данный протокол работает над протоколом IP. Обмен данными осуществляется с использованием протокола 4 уровня. Так же производится проверка поступивших данных. Если информация доставлена в не полном размере или же искажена, производится повторная посылка данных. Для начала посылки сообщений необходимо, что бы было открыто соединение между клиентом и сервером. После соединения двух устройств, сервер отсылает синхронизирующий порядковый номер, который идентифицирует соединение, и подтверждение. После этого осуществляется общения между двумя устройствами. После каждого полученного сообщения в ответ всегда отправляется подтверждение о получении. Таблица 7 – Заголовки TCP Основным преимуществом данного протокола является его гарантия о доставки сообщений. Данная гарантия порой требует большую временную затрату. Так же существует более быстрый протокол посылки данных UDP (User Datagram Protocol). В данном протоколе имеется только самый необходимый набор механизмом для передачи данных. Получая быстродействие, данный протокол имеет некоторые недостатки: · Поступление сообщений может осуществляется в любом порядке. Таки образом первое отосланное сообщением может оказаться последним. · Нет гарантии доставки Плюсами являются: · Быстрая посылка · Не требует открытия соединения · Моментальная посылка данных. Существует два способа посылки сообщений в сеть: однонаправленное и широковещательная передача. Первая характеризуется посылкой из одного узла в другой. Второй же способ отправляет всем узлам сети или рассылка идет в выбранную группу узлов. Чаще всего при отсылки широковещательных или групповых сообщений потребность в подтверждении о получении отпадает. Хорошим примером является · Просмотр онлайн трансляций · Служба времени Если при посылки данной информации было необходимо получать подтверждение о поставки информации, то нагрузка на сервер бы возросла в несколько раз. Таблица 8 – Заголовки UDP Для решение поставленной задачи был выбран протокол передачи данных UDP. Это связано с тем что данный протокол обладает быстрой передачей информации. Так как в нашей задаче планируется скорость посылки информации от 20 пакетов в секунду, то нам необходима быстрая посылка информации, без лишних подсоединений к серверу и получения подтверждения о доставки. Использованные источники 1. http://webspecial.volkswagen.de/innovative-technologies/ новаторские технологии группы Volkswagen AG 2. http://www.irobot.ru/roomba980/ описание режима работы и возможностей робота-пылесоса Roomba 980 3. Магистерская диссертация на тему «Исследование и разработка многопараметрического классификатора минеральных объектов.»/ Шитов Д.Д., Коротаев В.В. 4. Принцип работы и устройство активно-пиксельных датчиков / Овчинников А.М., Ильин А.А., Овчинников М.Ю. 5. http://www.keldysh.ru/papers/2003/prep85/prep2003_85.html / Устройство активно-пиксельных датчиков
Приложение А Технические характеристики Raspberry Pi 2 model B Приложение Б Листинг программы. opencv_capture_dialog.py: # -*- coding: utf-8 -*- import sys import getopt import os import algorithms import image import video from Tkinter import * from tkFileDialog import askopenfilename
CAM_NUMBER = 0 CAPTURE_RES = (320,240) SHOW_IMAGE = True CONTINUES_IMAGE = True
ALGORITHM = algorithms.shipFounder ALG_ARGS = 180
def main(): root = Tk() root.withdraw() arg = askopenfilename() videoCapture = len(arg) == 0 if videoCapture: obj = video.RaspPiCapture(CAPTURE_RES,SHOW_IMAGE) obj.setAlgorithm(ALGORITHM,ALG_ARGS) obj.run() else: imageInput = (arg[-3:] == 'jpg' or arg[-3:] == 'png' or arg[-4:] == 'jpeg') videoInput = (arg[-3:] == 'avi' or arg[-3:] == 'mpg') if imageInput: obj = image.Image(arg,SHOW_IMAGE) obj.setAlgorithm(ALGORITHM,ALG_ARGS) if CONTINUES_IMAGE: obj.runContinues() else: obj.run() if videoInput: obj = video.VideoPlayer(arg,SHOW_IMAGE) obj.setAlgorithm(ALGORITHM,ALG_ARGS) obj.run() os.system("pause") obj.closeAll() return if __name__ == "__main__": main() image.py: import cv2 import sys import time import numpy
class Image(): def __init__(self,fileName,showImage): self.fileName = fileName self.font = cv2.FONT_HERSHEY_SIMPLEX self.showImage = showImage self.algorithmHandler = None self.algArgs = None def run(self): start = time.time() frame = cv2.imread(self.fileName) if self.algorithmHandler!= None: frame = self.algorithmHandler(frame,self.algArgs) if self.showImage: cv2.namedWindow(self.fileName, cv2.WINDOW_AUTOSIZE) totalTime = time.time() - start self.drawNumber(frame,totalTime,2) print 'Time: ' + str(round(totalTime,2)) + 's' asp = frame.shape[0]/frame.shape[1] cv2.imshow(self.fileName,frame) self.waitForAkey() self.closeAll()
else: totalTime = time.time() - start print 'Time: ' + str(round(totalTime,2)) + 's' return def runContinues(self): start = time.time() frameNumber = 0 frame = cv2.imread(self.fileName) while True: if self.algorithmHandler!= None: imProccesed = self.algorithmHandler(frame,self.algArgs)
if self.showImage: cv2.namedWindow(self.fileName, cv2.WINDOW_AUTOSIZE) totalTime = time.time() - start self.drawNumber(imProccesed,totalTime,2) cv2.imshow(self.fileName,imProccesed) if cv2.waitKey(10) & 0xFF == ord('q'): break else: if frameNumber == 100: break
frameNumber += 1
totalTime = time.time() - start avrgFps = frameNumber/totalTime print 'Frames: ' + str(int(frameNumber)) print 'Time: ' + str(round(totalTime,2)) + 's' print 'FPS: ' + str(int(avrgFps)) return def closeAll(self): cv2.destroyAllWindows() def setAlgorithm(self,algorithm,args): self.algorithmHandler = algorithm self.algArgs = args def waitForAkey(self): while True: if cv2.waitKey(10) & 0xFF == ord('q'): return def drawNumber(self,frame,number,roundNum): string = 'Time: ' + str(round(number,roundNum)) + 's' scale = 0.3 white = (255,255,255) black = (0,0,0) pts = numpy.array([[0,0],[100,0],[100,30],[0,30]])
cv2.fillPoly(frame, [pts], black) cv2.putText(frame,string,(10,10),self.font,scale,white) return ##obj = Image('test.jpg',True) ##obj.runContinues()
video.py: import cv2 import sys import time import os import numpy import io import picamera
class RaspPiCapture(): def __init__(self,resolution,showImage): print 'init' self.resolution = resolution
self.font = cv2.FONT_HERSHEY_SIMPLEX self.showImage = showImage self.algorithmHandler = None self.algArgs = None return def outputs(self): stream = io.BytesIO() fps = 0
while True: start = time.time()
yield stream stream.seek(0) data = numpy.fromstring(stream.getvalue(), dtype=numpy.uint8) frame = cv2.imdecode(data, 1) if self.algorithmHandler!= None: frame = self.algorithmHandler(frame,self.algArgs)
if self.showImage: cv2.namedWindow("Raspberri Pi Camera Capture", cv2.WINDOW_AUTOSIZE) self.drawNumber(frame,fps,0) cv2.imshow('Raspberri Pi Camera Capture', frame)
if cv2.waitKey(10) & 0xFF == ord('q'): self.closeAll() break else: if self.frameNumber == 30000: break
stream.seek(0) stream.truncate() fps = 1.0/(time.time() - start) self.frameNumber += 1
return
def run(self): print 'run' totalStart = time.time() self.frameNumber = 0 with picamera.PiCamera() as camera: camera.resolution = self.resolution camera.framerate = 90 camera.video_stabilization = False camera.exposure_mode = 'off' #'spotlight'#'auto' #camera.shutter_speed = int(2500)
time.sleep(2) start = time.time() camera.capture_sequence( self.outputs(), format='jpeg', use_video_port=True)
totalTime = time.time() - start self.closeAll() avrgFps = self.frameNumber /totalTime print 'Resolution: ' + str(self.resolution) print 'Frames: ' + str(int(self.frameNumber)) print 'Time: ' + str(round(totalTime,2)) + ' s' print 'FPS: ' + str(round(avrgFps,1)) return def closeAll(self): cv2.destroyAllWindows() return def setAlgorithm(self,algorithm,args): print 'algo' self.algorithmHandler = algorithm self.algArgs = args return def drawNumber(self,frame,number,roundNum): string = 'Fps: ' + str(round(number,roundNum)) + 's' scale = 0.3 white = (255,255,255) black = (0,0,0) pts = numpy.array([[0,0],[100,0],[100,30],[0,30]])
cv2.fillPoly(frame, [pts], black) cv2.putText(frame,string,(10,10),self.font,scale,white) return class VideoCapture(): def __init__(self,camNumber,resolution,showImage): self.cap = cv2.VideoCapture(camNumber) self.cap.set(3,resolution[0]) self.cap.set(4,resolution[1]) self.cap.set(cv2.CAP_PROP_FPS,100) self.cap.set(cv2.CAP_PROP_CONVERT_RGB,True) self.font = cv2.FONT_HERSHEY_SIMPLEX self.showImage = showImage self.algorithmHandler = None self.algArgs = None return def run(self): totalStart = time.time() frame = 0 fps = 0
while True: start = time.time() ret, self.frame = self.cap.read() if not ret: break if self.algorithmHandler!= None: self.frame = self.algorithmHandler(self.frame,self.algArgs)
if self.showImage: cv2.namedWindow("Camera Capture", cv2.WINDOW_AUTOSIZE) self.drawNumber(self.frame,fps,0) cv2.imshow('Camera Capture', self.frame) else: cv2.namedWindow("Camera Capture", cv2.WINDOW_AUTOSIZE) if cv2.waitKey(10) & 0xFF == ord('q'): break
frame += 1 fps = 1.0/(time.time() - start) totalTime = time.time() - totalStart avrgFps = frame/totalTime print 'Frames: ' + str(int(frame)) print 'Time: ' + str(round(totalTime,2)) + 's' print 'FPS: ' + str(int(avrgFps)) return def closeAll(self): self.cap.release() cv2.destroyAllWindows() return def setAlgorithm(self,algorithm,args): self.algorithmHandler = algorithm self.algArgs = args return def drawNumber(self,frame,number,roundNum): string = 'Fps: ' + str(round(number,roundNum)) + 's' scale = 0.3 white = (255,255,255) black = (0,0,0) pts = numpy.array([[0,0],[100,0],[100,30],[0,30]])
cv2.fillPoly(frame, [pts], black) cv2.putText(frame,string,(10,10),self.font,scale,white) return class VideoPlayer(): def __init__(self,fileName,showImage): self.cap = cv2.VideoCapture(fileName) self.font = cv2.FONT_HERSHEY_SIMPLEX self.showImage = showImage self.algorithmHandler = None self.algArgs = None self.fileName = fileName return def run(self): totalStart = time.time() frame = 0 fps = 0
while True: start = time.time() ret, self.frame = self.cap.read() if not ret: break if self.algorithmHandler!= None: self.frame = self.algorithmHandler(self.frame,self.algArgs)
if self.showImage: cv2.namedWindow(self.fileName, cv2.WND_PROP_FULLSCREEN) self.drawNumber(self.frame,fps,0) cv2.imshow(self.fileName, self.frame) if cv2.waitKey(10) & 0xFF == ord('q'): break
frame += 1 fps = 1.0/(time.time() - start) totalTime = time.time() - totalStart avrgFps = frame/totalTime print 'Frames: ' + str(int(frame)) print 'Time: ' + str(round(totalTime,2)) + 's' print 'FPS: ' + str(int(avrgFps))
self.waitForAkey() self.closeAll() return def closeAll(self): self.cap.release() cv2.destroyAllWindows() return def setAlgorithm(self,algorithm,args): self.algorithmHandler = algorithm self.algArgs = args return
def waitForAkey(self): while True: if cv2.waitKey(10) & 0xFF == ord('q'): return def drawNumber(self,frame,number,roundNum): string = 'FPS: ' + str(round(number,roundNum)) + 's' scale = 0.3 white = (255,255,255) black = (0,0,0) pts = numpy.array([[0,0],[100,0],[100,30],[0,30]])
cv2.fillPoly(frame, [pts], black) cv2.putText(frame,string,(10,10),self.font,scale,white) return raspberry_pi_capture: # -*- coding: utf-8 -*- import algorithms import image import video import socket CAPTURE_RES = (480,320) SHOW_IMAGE = False ALGORITHM = algorithms.shipFounder ALG_ARGS = 140 def main():
obj = video.RaspPiCapture(CAPTURE_RES,SHOW_IMAGE) obj.setAlgorithm(ALGORITHM,ALG_ARGS) obj.run() return if __name__ == "__main__": main() algorithms.py: import cv2 import image import numpy as np import socket import time TCP_IP = "192.168.1.101" TCP_PORT = 5005 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((TCP_IP, TCP_PORT)) def threshold(img,threshold): _,thresh = cv2.threshold(img[:,:,2],threshold,255,cv2.THRESH_BINARY) return thresh def shipFounder(img,threshold):
radius = max(img.shape[0]/256+1,3) img = cv2.blur(img,(radius,radius)) _,thresh = cv2.threshold(img[:,:,1],threshold,255,cv2.THRESH_BINARY) _,contours, hierarchy = cv2.findContours( thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE) if len(contours) > 0: contours = sorted(contours, key=len,reverse=True)
rect = cv2.minAreaRect(contours[0]) box = np.int0(cv2.boxPoints(rect))
cv2.drawContours(img,[box],0,(0,255,0),1) middle = (box[0]+box[2])/2 cv2.circle(img, (middle[0],middle[1]), 2, (255,0,0),-1) cv2.drawContours(img,contours,-1,(0,0,255),1)
mes=middle s.listen(1) conn, addr = s.accept() print(mes) data=np.array(mes[0],dtype=np.int32) print('1') x = data.tostring() try: conn.send(x) except socket.error: conn.close()
return img ##obj = image.Image('test.jpg',True) ##obj.setAlgorithm(shipFounder,200) ##obj.run()
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-26; просмотров: 213; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.172.250 (0.01 с.) |