-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebcam.py
executable file
·70 lines (57 loc) · 1.89 KB
/
webcam.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/python
import time
from picamera import PiCamera
import BaseHTTPServer
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30
#camera.start_preview()
#camera warm-up time
time.sleep(2)
# hosting
HOST_NAME = "pi-noir-camera.local"
PORT_NUMBER = 8000 # Magic number. Can't bind under 1024 on normal user accounts; port 80 is the normal HTTP port
WEBCAM_FILENAME = "webcam.jpg"
class SimpleCloudFileServer(BaseHTTPServer.BaseHTTPRequestHandler):
def sendHeader(self, response=200, contentType="image/jpeg"):
self.send_response(response)
self.send_header("Content-type", contentType)
self.end_headers()
def contentTypeFrom(self, filename):
if filename.endswith("html"):
return "text/html"
elif filename.endswith("css"):
return "text/css"
elif filename.endswith("jpg") or filename.endswith("jpeg"):
return "image/jpeg"
elif filename.endswith("png"):
return "image/png"
elif filename.endswith("svg"):
return "image/svg+xml"
def do_HEAD(self):
self.sendHeader()
def do_GET(self):
filename = (self.path[1:]).split("?")[0]
if (filename==WEBCAM_FILENAME):
camera.capture(WEBCAM_FILENAME)
try:
with open(filename, "rb") as in_file:
data = in_file.read()
self.sendHeader(contentType=self.contentTypeFrom(filename))
self.wfile.write(data)
except:
printServerMessage("File not found: " + filename)
self.sendHeader(response=404, contentType="text/plain")
self.wfile.write("404 file not found")
def printServerMessage(customMessage):
print customMessage, "(Time: %s, Host: %s, port: %s)" % (time.asctime(), HOST_NAME, PORT_NUMBER)
if __name__ == '__main__':
server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), SimpleCloudFileServer)
printServerMessage("Server startup")
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
printServerMessage("Server stop")