mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
* Added the ability to control the quality on JPEG functions... However, due to our JPEG implementation this doesn't seem to help. 90% JPEG quality images and regular images should be about equal. But, you can see heavy degredation with 90% still. E.g. text is unreabable. Not exactly sure why this is happening but it can be fixed later. * Changed the compress() function to compressed(). Also, it now compresses using FB_Alloc to prevent realloc issues when compressing. * Added new compress() function. This function compresses an image in place and if that image is the frame bufffer then it will update the frame buffer bpp value to reflect the image was compressed. Users can use this function to basically finalize the frame buffer and then pass the FB to functions that need to send image bytes. The benefit of using this function is that it should allow higher quality JPEGs and let everything run at a faster speed while connected to the IDE. I made this function to speed up WiFi. However, I encountered a bug with the winc.send() method. It appears to zero the bytes it sends. I didn't debug further except to verify that the image data became zero after calling send.
72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
# MJPEG Streaming
|
|
#
|
|
# This example shows off how to do MJPEG streaming to a FIREFOX webrowser
|
|
# (IE and Chrome do not work). Just input your network SSID and KEY and then
|
|
# connect to the IP address/port printed out from ifconfig.
|
|
|
|
import sensor, image, time, network, usocket
|
|
|
|
SSID='' # Network SSID
|
|
KEY='' # Network key
|
|
HOST = '' # Use first available interface
|
|
PORT = 8000 # Arbitrary non-privileged port
|
|
|
|
# Reset sensor
|
|
sensor.reset()
|
|
|
|
# Set sensor settings
|
|
sensor.set_contrast(1)
|
|
sensor.set_brightness(1)
|
|
sensor.set_saturation(1)
|
|
sensor.set_gainceiling(16)
|
|
sensor.set_framesize(sensor.QVGA)
|
|
sensor.set_pixformat(sensor.GRAYSCALE)
|
|
|
|
# Init wlan module and connect to network
|
|
print("Trying to connect... (may take a while)...")
|
|
wlan = network.WINC()
|
|
wlan.connect(SSID, key=KEY, security=wlan.WPA_PSK)
|
|
|
|
# We should have a valid IP now via DHCP
|
|
print(wlan.ifconfig())
|
|
|
|
# Create server socket
|
|
s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
|
|
|
|
# Bind and listen
|
|
s.bind([HOST, PORT])
|
|
s.listen(5)
|
|
|
|
# Set timeout to 1s
|
|
s.settimeout(1.0)
|
|
|
|
print ('Waiting for connections..')
|
|
client, addr = s.accept()
|
|
print ('Connected to ' + addr[0] + ':' + str(addr[1]))
|
|
|
|
# Read request from client
|
|
data = client.recv(1024)
|
|
|
|
# Should parse client request here
|
|
|
|
# Send multipart header
|
|
client.send("HTTP/1.1 200 OK\r\n" \
|
|
"Server: OpenMV\r\n" \
|
|
"Content-Type: multipart/x-mixed-replace;boundary=openmv\r\n" \
|
|
"Cache-Control: no-cache\r\n" \
|
|
"Pragma: no-cache\r\n\r\n")
|
|
|
|
# FPS clock
|
|
clock = time.clock()
|
|
# Start streaming images
|
|
while (True):
|
|
clock.tick() # Track elapsed milliseconds between snapshots().
|
|
frame = sensor.snapshot()
|
|
cframe = frame.compressed(quality=90)
|
|
client.send("\r\n--openmv\r\n" \
|
|
"Content-Type: image/jpeg\r\n"\
|
|
"Content-Length:"+str(cframe.size())+"\r\n\r\n")
|
|
client.send(cframe)
|
|
print(clock.fps())
|
|
client.close()
|