From 4198b20738178be38413a03180b771bfb0d6acc9 Mon Sep 17 00:00:00 2001 From: Austin Hsu <austinhsu1996@gmail.com> Date: Sun, 24 Jan 2016 09:48:42 -0800 Subject: [PATCH 1/2] updated from upstream --- Camera/RTSPCameraOne.py | 41 ++++++ Camera/RTSPCameraTwo.py | 41 ++++++ baseStationCode/Static Map API/00000006.png | Bin 0 -> 37600 bytes .../Static Map API/MercatorProjection.pyc | Bin 4029 -> 4029 bytes .../Static Map API/createCachedImage.py | 118 +++++++++++------- 5 files changed, 155 insertions(+), 45 deletions(-) create mode 100644 Camera/RTSPCameraOne.py create mode 100644 Camera/RTSPCameraTwo.py create mode 100644 baseStationCode/Static Map API/00000006.png diff --git a/Camera/RTSPCameraOne.py b/Camera/RTSPCameraOne.py new file mode 100644 index 0000000..4eac4ba --- /dev/null +++ b/Camera/RTSPCameraOne.py @@ -0,0 +1,41 @@ +import sys +import vlc +import pygame + +#IP Address of camera 1 +#Port 554 +stream = "rtsp://192.168.1.10:554/user=admin&password=&channel=1&stream=0.sdp" + +pygame.init() +screen = pygame.display.set_mode((640,360)) + +print "Using %s renderer" % pygame.display.get_driver() +print 'Playing: %s' % stream + +# Create instane of VLC and create reference to movie. +vlcInstance = vlc.Instance() +media = vlcInstance.media_new(stream, ":network-caching=300") + +# Create new instance of vlc player +player = vlcInstance.media_player_new() + +# Pass pygame window id to vlc player, so it can render its contents there. +win_id = pygame.display.get_wm_info()['window'] +if sys.platform == "linux2": # for Linux using the X Server + player.set_xwindow(win_id) +elif sys.platform == "win32": # for Windows + player.set_hwnd(win_id) + +# Load movie into vlc player instance +player.set_media(media) +player.video_set_format("RV32", 1280, 720, 0); + +# Start movie playback +player.play() + +while player.get_state() != vlc.State.Ended: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit(0) + + diff --git a/Camera/RTSPCameraTwo.py b/Camera/RTSPCameraTwo.py new file mode 100644 index 0000000..c31abdd --- /dev/null +++ b/Camera/RTSPCameraTwo.py @@ -0,0 +1,41 @@ +import sys +import vlc +import pygame + +#IP Address of camera 2 +#Port 554 +stream = "rtsp://192.168.1.11:554/user=admin&password=&channel=1&stream=0.sdp" + +pygame.init() +screen = pygame.display.set_mode((640,360)) + +print "Using %s renderer" % pygame.display.get_driver() +print 'Playing: %s' % stream + +# Create instane of VLC and create reference to movie. +vlcInstance = vlc.Instance() +media = vlcInstance.media_new(stream, ":network-caching=300") + +# Create new instance of vlc player +player = vlcInstance.media_player_new() + +# Pass pygame window id to vlc player, so it can render its contents there. +win_id = pygame.display.get_wm_info()['window'] +if sys.platform == "linux2": # for Linux using the X Server + player.set_xwindow(win_id) +elif sys.platform == "win32": # for Windows + player.set_hwnd(win_id) + +# Load movie into vlc player instance +player.set_media(media) +player.video_set_format("RV32", 1280, 720, 0); + +# Start movie playback +player.play() + +while player.get_state() != vlc.State.Ended: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit(0) + + diff --git a/baseStationCode/Static Map API/00000006.png b/baseStationCode/Static Map API/00000006.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd49d812d4601097f54c500b67df8f719a9b53f GIT binary patch literal 37600 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 literal 0 HcmV?d00001 diff --git a/baseStationCode/Static Map API/MercatorProjection.pyc b/baseStationCode/Static Map API/MercatorProjection.pyc index 202154569d4cd9a5f56479397ae457806bfc8e98..aa4daae49d1c8c253278584604818a376132c74a 100644 GIT binary patch delta 16 YcmdlhzgM1}`7<xq!Uu~tvTx%D05yCDZU6uP delta 16 XcmdlhzgM1}`7<w<Y|h+`?A!POFA4>4 diff --git a/baseStationCode/Static Map API/createCachedImage.py b/baseStationCode/Static Map API/createCachedImage.py index 8cd544d..e82a25a 100644 --- a/baseStationCode/Static Map API/createCachedImage.py +++ b/baseStationCode/Static Map API/createCachedImage.py @@ -2,6 +2,8 @@ import MercatorProjection import urllib import pygame as pg import io +import os +from math import ceil try: # Python2 from urllib2 import urlopen @@ -13,19 +15,6 @@ except ImportError: # initialize pygame pg.init() -# create url -# can change variables to center on certain locations -# size maxes out at 640x640 for free version -# -90 < latitude < 90 -180 < longitude < 180 -def getUrl(latitude, longitude, zoom, horizontal, vertical): - apikey = "AIzaSyA4it7lRdo5H0mhPlRMM4n2CltZpFnnF4s"; - query = "https://maps.googleapis.com/maps/api/staticmap?" - query += "center=%s,%s&" % (latitude,longitude) - query += "zoom=%s&" % zoom - query += "size=%sx%s&" % (horizontal,vertical) - query += apikey - return query - """ # on a webpage right click on the image you want and use Copy image URL image_url2 = getUrl(corners['S'], corners['E'], 15, 640, 640) @@ -40,47 +29,85 @@ urllib.urlretrieve(image_url4, "00000004.png") urllib.urlretrieve(image_url5, "00000005.png") """ -""" -# center is (x,y) -# scale is how big it is -> -# 1 = 1280x1280 -def createCache(longitude, latitude, scale): - whiteScreen(scale * 640, scale * 640) - for(i in range(scale)): - for(j in range(4)): - image = pg.image.load(str(i + j)) -""" +# create url +# can change variables to center on certain locations +# size maxes out at 640x640 for free version +# -90 < latitude < 90 -180 < longitude < 180 +def getUrl(latitude, longitude, zoom, horizontal, vertical): + apikey = "AIzaSyA4it7lRdo5H0mhPlRMM4n2CltZpFnnF4s"; + query = "https://maps.googleapis.com/maps/api/staticmap?" + query += "center=%s,%s&" % (latitude,longitude) + query += "zoom=%s&" % zoom + query += "size=%sx%s&" % (horizontal,vertical) + query += apikey + return query -# finds the coordinates of the edges -# can use these coordinates to find ratio of pixel to change in degrees -centerPoint = MercatorProjection.G_LatLng(40, -80) -corners = MercatorProjection.getCorners(centerPoint, 15, 640, 640) -cornersB = MercatorProjection.getCorners(centerPoint, 15, 1280, 1280) -print corners -print cornersB - -# create an 1920 by 1080 white screen and put the image on that screen -# (r, g, b) color tuple, values 0 to 255 -white = (255, 255, 255) -screen = pg.display.set_mode((1920,1080), pg.RESIZABLE ) -screen.fill(white) - -def draw(image_file,x,y): +# # center is (x,y) +# # scale is how big it is -> +# # 1 = 1280x1280 +# def createCache(longitude, latitude, scale): +# # horizontal, vertical = (scale+1)*640 +# # screen = whiteScreen(horizontal,vertical) +# for(i in range(scale)): +# for(j in range(4)): +# image = pg.image.load(str(i + j)) + +def draw(image_file,x,y,screen): # load the image from a file or stream image = pg.image.load(image_file) # draw image, position the image ulc at x=0, y=0 screen.blit(image, (x, y)) -draw("00000004.png", 640, 0) # northeast -draw("00000005.png", 0, 0) # northwest -draw("00000003.png", 0, 640) # southwest -draw("00000002.png", 640, 640) # southeast +# create centered fullscreen whitescreen image +def whiteScreen(): + os.environ['SDL_VIDEO_CENTERED'] = '1' + white = (255, 255, 255) + screen = pg.display.set_mode() + screen.fill(white) + return screen +# finds the coordinates of the edges +# can use these coordinates to find ratio of pixel to change in degrees +def findCorners(latitude, longitude, zoom, horizontal, vertical): + centerPoint = MercatorProjection.G_LatLng(latitude, longitude) + corners = MercatorProjection.getCorners(centerPoint, zoom, horizontal, vertical) + return corners + +# get the display information +info = pg.display.Info() +scale = ceil(max(info.current_w, info.current_h) / 640) +print scale +# print "horizontal = %s, vertical = %s" % (info.current_w, info.current_h) + +cornersB = findCorners(40,-80, 15, 1280, 1280) +screen = whiteScreen(); +# longitude = cornersB['W'] + (cornersB['E'] - cornersB['W']) * 5.0 / 4.0 +# longitude = cornersB['W'] + 1600 * (cornersB['E'] - cornersB['W']) / 1280 +# latitude = cornersB['N'] + (cornersB['N'] - cornersB['S']) / 4.0 +# latitude = cornersB['N'] + 320 * (cornersB['N'] - cornersB['S']) / 1280 +bleh = findCorners(40,-80,15,1920,640) +longitude = bleh['E'] +latitude = bleh['N'] +print longitude +print latitude +image_url6 = getUrl(latitude, longitude, 15, 640, 640) +urllib.urlretrieve(image_url6, "00000006.png") + + +draw("00000004.png", 640, 0,screen) # northeast +draw("00000005.png", 0, 0,screen) # northwest +draw("00000003.png", 0, 640,screen) # southwest +draw("00000002.png", 640, 640,screen) # southeast +draw("00000006.png",1280,0,screen) + +# saves the combined image +# might not be useful in the end # pg.image.save(screen, "combined.png") # nothing gets displayed until one updates the screen pg.display.flip() + while True: for event in pg.event.get(): if event.type == pg.QUIT: @@ -88,9 +115,10 @@ while True: raise SystemExit if event.type == pg.MOUSEBUTTONDOWN: pixCoord = pg.mouse.get_pos() # get_pos returns tuple - longitude = cornersB['N'] + pixCoord[1] * (cornersB['N'] - cornersB['S']) / 1280 - latitude = cornersB['E'] + pixCoord[0] * (cornersB['E'] - cornersB['W']) / 1280 - print "%s,%s" % (longitude,latitude) + print pixCoord[1] * (cornersB['N'] - cornersB['S']) / info.current_h + longitude = cornersB['W'] + pixCoord[0] * (cornersB['E'] - cornersB['W']) / 1280 + latitude = cornersB['N'] + pixCoord[1] * (cornersB['N'] - cornersB['S']) / 1280 + print "latitude = %s, longitude = %s" % (latitude, longitude) -- GitLab From ec8f52f1149912725a849a74023462ba5733dedc Mon Sep 17 00:00:00 2001 From: Austin Hsu <austinhsu1996@gmail.com> Date: Sun, 24 Jan 2016 09:50:43 -0800 Subject: [PATCH 2/2] added some comments and updated the stitching code --- baseStationCode/Static Map API/createCachedImage.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/baseStationCode/Static Map API/createCachedImage.py b/baseStationCode/Static Map API/createCachedImage.py index e82a25a..06d8722 100644 --- a/baseStationCode/Static Map API/createCachedImage.py +++ b/baseStationCode/Static Map API/createCachedImage.py @@ -79,12 +79,11 @@ scale = ceil(max(info.current_w, info.current_h) / 640) print scale # print "horizontal = %s, vertical = %s" % (info.current_w, info.current_h) +# can use this the corners with varying sizes to find lat and long for +# various pixel coordinates -> use those coords to query another segment of the map +# from the API. cornersB = findCorners(40,-80, 15, 1280, 1280) screen = whiteScreen(); -# longitude = cornersB['W'] + (cornersB['E'] - cornersB['W']) * 5.0 / 4.0 -# longitude = cornersB['W'] + 1600 * (cornersB['E'] - cornersB['W']) / 1280 -# latitude = cornersB['N'] + (cornersB['N'] - cornersB['S']) / 4.0 -# latitude = cornersB['N'] + 320 * (cornersB['N'] - cornersB['S']) / 1280 bleh = findCorners(40,-80,15,1920,640) longitude = bleh['E'] latitude = bleh['N'] -- GitLab