Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

FLiR Dev Kit を試す その5

せっかくなので、ストリーミングしたい。

f:id:pongsuke:20171211181007p:plain

そこで、今までは Mjepg-streamer などを使ってきましたが、自分でゴリゴリいじるので、Python で実装しているサンプルを探したところ、有った!

Simple Python Motion Jpeg (mjpeg server) from webcam. Using: OpenCV,BaseHTTPServer · GitHub

まずは、USBカメラなどをさして、ストリームのチェックを行う。

おっけー

f:id:pongsuke:20171211175152p:plain

Lepton 向けに改変する

これは、 Mr Igor のスクリプトを書き換えています。

Simple Python Motion Jpeg (mjpeg server) from webcam. Using: OpenCV,BaseHTTPServer · GitHub

これね。

#!/usr/bin/python
from pylepton import Lepton

import cv2
import numpy as np
from PIL import Image
import threading
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from SocketServer import ThreadingMixIn
import StringIO
import time

class CamHandler(BaseHTTPRequestHandler):
        def do_GET(self):
                if self.path.endswith('.mjpg'):
                        self.send_response(200)
                        self.send_header('Content-type','multipart/x-mixed-replace; boundary=--jpgboundary')
                        self.end_headers()
                        try:
                                with Lepton() as l:
                                        while True:
                                                data_buffer, rc = l.capture()
                                                if not rc:
                                                        continue

                                                cv2.normalize(data_buffer, data_buffer, 0, 255, cv2.NORM_MINMAX)
                                                img = cv2.cvtColor(data_buffer, cv2.COLOR_GRAY2BGR)
                                                img[:, :, 0:2] = 0
                                                img = cv2.resize(img, (320,240))

                                                imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
                                                jpg = Image.fromarray(np.uint8(np.asarray(imgRGB)))
                                                tmpFile = StringIO.StringIO()
                                                jpg.save(tmpFile,'JPEG')
                                                self.wfile.write("--jpgboundary")
                                                self.send_header('Content-type','image/jpeg')
                                                self.send_header('Content-length',str(tmpFile.len))
                                                self.end_headers()
                                                jpg.save(self.wfile,'JPEG')
                                                time.sleep(0.2)

                        except Exception as e:
                                print('Exception', e.args);
                                brak

                if self.path.endswith('.html'):
                        self.send_response(200)
                        self.send_header('Content-type','text/html')
                        self.end_headers()
                        self.wfile.write('<html><head></head><body>')
                        self.wfile.write('<img src="http://127.0.0.1:8080/cam.mjpg"/>')
                        self.wfile.write('</body></html>')
                        return


class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
        """Handle requests in a separate thread."""

def main():
        global img
        try:
                server = ThreadedHTTPServer(('localhost', 8080), CamHandler)
                print "server started"
                server.serve_forever()
        except KeyboardInterrupt:
                server.socket.close()

if __name__ == '__main__':
        main()

結果

f:id:pongsuke:20171211181007p:plain