树莓派+pythonista实时监控系统

 

客户端(pythonista)

import ui
from PIL import Image
import socket, time, StringIO

global closeFlat
closeFlat = False

def btnStart_tapped(sender):
        global closeFlat
        closeFlat = True
        sender.hidden = True
        

v = ui.load_view()

btnStart = ui.Button(title='End')
btnStart.x = 20
btnStart.y = 250
btnStart.width = 100
btnStart.height = 40
btnStart.background_color = '#a3d6ef'
btnStart.action = btnStart_tapped
v.add_subview(btnStart)

iv = ui.ImageView()
iv.x = 0
iv.y = 0
iv.width = 320
iv.height = 240
v.add_subview(iv)

v.present('sheet')

host, port = '192.168.199.231', 9996
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

sock.sendall('next')

f = sock.makefile()

while True:
        msg = f.readline()
        if not msg:
                break
        #print len(msg), msg[-2]
        if closeFlat:
                sock.sendall('close')
                break
        else:
                sock.sendall('next')
        jpeg = msg.replace("\-n", "\n")
        buf = StringIO.StringIO(jpeg[0:-1])
        buf.seek(0)
        #imgg = Image.open(buf)
        #img = ui.Image.from_data(imgg.tostring())
        #imgg.save('1122.jpg')
        img = ui.Image.from_data(buf.getvalue())
        buf.close()
        #img = ui.Image('1122.jpg')
        #img = (ui.Image)imgg
        iv.image = img
        #time.sleep(1)

sock.close() 

 

服务器(树莓派)

import numpy as np
import cv2
import time, socket, StringIO
from PIL import Image

print 'Program start...'

capture = cv2.VideoCapture(0)
capture.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 320)
capture.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 240)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('192.168.199.231', 9996))
sock.listen(2)

dst, dst_addr = sock.accept()
print 'Destination connected by', dst_addr


while True:
    msg = dst.recv(1024)
    print msg
    if msg == 'next': 

        ret, img = capture.read()
        ret, img = capture.read()
        #print img.shape
    
        img[:, :, [0, 2]] = img[:, :, [2, 0]]   
    
        pi = Image.fromstring("RGB", (img.shape[1], img.shape[0]), img.tostring())
        buf = StringIO.StringIO()
        pi.save(buf, format='JPEG')
        jpeg = buf.getvalue()
        buf.close()
        transfer = jpeg.replace("\n", "\-n")
        print len(transfer), transfer[-1]
    
        try:
            dst.sendall(transfer + "\n")
            #print 'sendall complete'
        except Exception as ex:
            dst, dat_addr = sock.accept()
            print 'Destination connected again by', dst_addr
        except KeyboardInterrupt:
            print 'Interrupted'
            break

    elif msg == 'close':
        break
    else:
        print 'Error:The msg from socket is unknow'
        break


dst.close()
sock.close() 
capture.release()
print 'Program end----'

 

posted @ 2017-05-03 19:21  lulu47  阅读(1816)  评论(0编辑  收藏  举报