serves images from the specified port and camera device (USB cam).
I added an ImageServer class and some code to __main__
class ImageServer(Req uestHandler):
def __init__(self, conn, addr, server):
asynchat.async_ chat.__init__(s elf,conn)
self.client_add ress = addr
self.connection = conn
self.server = server
self.set_termin ator ('\r\n\r\n')
self.incoming = deque()
self.outgoing = deque()
self.rfile = None
self.wfile = writewrapper(se lf.outgoing,
-self.use_buffer or self.blocksize)
self.found_term inator = self.handle_req uest_line
self.request_ve rsion = "HTTP/1.1"
self.code = None
def send_head(self) :
buff, width, height = cam.dev.getbuff er()
imPIL = (Image.frombuff er("RGB", (width, height), buff,
"raw", "BGR", 0, -1) )
imPIL.save(PILF ile, "JPEG")
self.send_respo nse(200)
self.send_heade r("Content-type", "image/jpeg")
self.send_heade r("Content-Length: ", str(PILFile.len ))
self.end_header s()
self.wfile.writ e(PILFile.getva lue())
return
in __main__
....
parser.add_opti on('-3', dest='server',
help='Run the server for only cam images',
action='store_c onst', const=3)
....
if options.server= =3:
from StringIO import StringIO
from PIL import Image
if sys.platform == 'win32':
import VideoCapture
try:
del(cam)
gc.collect()
print "deleted old cam instance"
except: pass
cam = VideoCapture.De vice(devnum=opt ions.devNum,
showVideoWindow =0)
print cam
buff, width, height = cam.dev.getbuff er()
PILFile = StringIO()
else:
pass
else:
if options.root is None:
parser.error("N eed root path to start server")
if not os.path.isdir(o ptions.root):
parser.error("R oot path does not exist")
os.chdir(option s.root)
I run it with:
>python SimpleAsyncHTTP Server.py -p8888 -3I'll be trying implementing some streaming next.
Question, though: how can I unblock asyncore.loop() , or at least be
able to interrupt it? To kill this server I need to hit CNTRL-C and
then attempt to GET an image from Firefox, Python then throws
KetboardInterru pt.
Note that I haven't tried it on *NIX so the sys.platform bit needs
more implementing as well.
Other suggestions?
Ray