Better controller code
This commit is contained in:
		@@ -2,15 +2,15 @@ FROM alpine:3.20.1
 | 
			
		||||
 | 
			
		||||
RUN apk add --no-cache git meson alpine-sdk cmake linux-headers python3 python3-dev \
 | 
			
		||||
    py3-yaml py3-jinja2 py3-ply py3-pybind11 py3-pybind11-dev py3-paho-mqtt
 | 
			
		||||
#RUN apk add --no-cache libcamera libcamera-tools libcamera-v4l2 python3 python3-dev \
 | 
			
		||||
#    cython py3-setuptools alpine-sdk ffmpeg ffmpeg-dev
 | 
			
		||||
 | 
			
		||||
WORKDIR /libcamera
 | 
			
		||||
ADD libcamera /libcamera
 | 
			
		||||
RUN meson setup --prefix /usr build && ninja -C build install
 | 
			
		||||
 | 
			
		||||
RUN apk add --no-cache py3-pillow
 | 
			
		||||
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
COPY mfb.py /app
 | 
			
		||||
COPY spider-cam.py /app
 | 
			
		||||
 | 
			
		||||
CMD ["python3", "spider-cam.py"]
 | 
			
		||||
CMD ["python3", "spider-cam.py"]
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,12 @@ import paho.mqtt.client as mqtt
 | 
			
		||||
import selectors
 | 
			
		||||
import sys
 | 
			
		||||
import time
 | 
			
		||||
import io
 | 
			
		||||
from PIL import Image
 | 
			
		||||
 | 
			
		||||
import mfb
 | 
			
		||||
 | 
			
		||||
image_count = 0
 | 
			
		||||
image_count = 9999
 | 
			
		||||
 | 
			
		||||
def camera_name(camera):
 | 
			
		||||
	return camera.id
 | 
			
		||||
@@ -16,12 +18,18 @@ def handle_camera_event(cm):
 | 
			
		||||
	for req in reqs:
 | 
			
		||||
		process_request(req)
 | 
			
		||||
 | 
			
		||||
def sendImage(plane):
 | 
			
		||||
	image = Image.frombytes("RGBA", (800, 600), plane.tobytes())
 | 
			
		||||
	pngBytes = io.BytesIO()
 | 
			
		||||
	image.save(pngBytes, "png")
 | 
			
		||||
	mqttc.publish("spider/telemetry/camfeed", pngBytes.getvalue())
 | 
			
		||||
 | 
			
		||||
def process_request(request):
 | 
			
		||||
	global camera, image_count
 | 
			
		||||
	global mqttc
 | 
			
		||||
 | 
			
		||||
	image_count += 1
 | 
			
		||||
	if image_count > 50:
 | 
			
		||||
	if image_count > 30:
 | 
			
		||||
		image_count = 0
 | 
			
		||||
		print(f'Request completed: {request}')
 | 
			
		||||
 | 
			
		||||
@@ -37,7 +45,7 @@ def process_request(request):
 | 
			
		||||
				'/'.join([str(p.bytes_used) for p in metadata.planes]))
 | 
			
		||||
			with mfb.MappedFrameBuffer(buffer) as mappedBuffer:
 | 
			
		||||
				for plane in mappedBuffer.planes:
 | 
			
		||||
					mqttc.publish("spider/telemetry/camfeed", plane[0:256000].tobytes())
 | 
			
		||||
					sendImage(plane)
 | 
			
		||||
 | 
			
		||||
	request.reuse()
 | 
			
		||||
	camera.queue_request(request)
 | 
			
		||||
@@ -111,4 +119,4 @@ def main():
 | 
			
		||||
	mqttc.disconnect()
 | 
			
		||||
	mqttc.loop_stop()
 | 
			
		||||
 | 
			
		||||
sys.exit(main())
 | 
			
		||||
sys.exit(main())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user