Шаг 3. Добавим в наш веб-сервер возможность “отдавать” файлы jpeg. Для этого нужно добавить новый тип Content-type = 'image/jpg', чтобы браузер “знал” что передаваемые данные это картинка jpg.
Готовый код показан ниже.
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import os, subprocess, signal
class Server(BaseHTTPRequestHandler):
def do_GET(self):
if "image.jpg" in self.path:
try:
self.send_response(200)
self.send_header('Content-type', 'image/jpg')
self.end_headers()
f = open('image.jpg', 'rb')
self.wfile.write(f.read())
f.close()
except:
pass
return
with open('index.html', 'r') as imgfile:
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
data = imgfile.read()
self.wfile.write(data)
if __name__ == "__main__":
# Start photos shooting
cmd = 'fswebcam -r 640x480 --loop 10 image.jpg'
photoThread = subprocess.Popen("exec " + cmd, stdout=subprocess.PIPE, shell=True)
# Start server
server_address = ('', 8000)
httpd = HTTPServer(server_address, Server)
print 'Starting httpd...'
try:
httpd.serve_forever()
except:
pass
# Close photo shooting
os.kill(photoThread.pid, signal.SIGINT)
Как можно видеть, все вполне просто. Если в строке запроса присутствует “image.jpg”, мы загружаем картинку, иначе “index.html”. Изменить частоту обновления изображений можно, поменяв параметр loop, там же можно поменять и разрешение.
Все готово - запускаем python web.py, и с любого браузера можем зайти на страницу http://192.168.0.104:8000 (адрес может быть другим) и увидеть картинку с камеры. Это можно будет сделать и удаленно, если настроить статический IP адрес и перенаправление порта 8000 на роутере.