Example: 08-RPC-Library/34-Remote-Control/popular_features_as_the_remote_device.py
import image
import math
import rpc
import sensor
import struct
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
interface = rpc.rpc_uart_slave(baudrate=115200)
def draw_detections(img, dects):
for d in dects:
c = d.corners()
l = len(c)
for i in range(l):
img.draw_line(c[(i + 0) % l] + c[(i + 1) % l], color=(0, 255, 0))
img.draw_rectangle(d.rect(), color=(255, 0, 0))
def face_detection(data):
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
faces = (
sensor.snapshot()
.gamma_corr(contrast=1.5)
.find_features(image.HaarCascade("frontalface"))
)
if not faces:
return bytes()
for f in faces:
sensor.get_fb().draw_rectangle(f, color=(255, 255, 255))
out_face = max(faces, key=lambda f: f[2] * f[3])
return struct.pack("<HHHH", out_face[0], out_face[1], out_face[2], out_face[3])
def qrcode_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((320, 240))
codes = sensor.snapshot().find_qrcodes()
if not codes:
return bytes()
draw_detections(sensor.get_fb(), codes)
return max(codes, key=lambda c: c.w() * c.h()).payload().encode()
def all_qrcode_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((320, 240))
codes = sensor.snapshot().find_qrcodes()
if not codes:
return bytes()
draw_detections(sensor.get_fb(), codes)
return str(codes).encode()
def apriltag_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
tags = sensor.snapshot().find_apriltags()
if not tags:
return bytes()
draw_detections(sensor.get_fb(), tags)
output_tag = max(tags, key=lambda t: t.w * t.h)
return struct.pack(
"<HHHH",
output_tag.cx,
output_tag.cy,
output_tag.id,
int(math.degrees(output_tag.rotation)),
)
def all_apriltag_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
tags = sensor.snapshot().find_apriltags()
if not tags:
return bytes()
draw_detections(sensor.get_fb(), tags)
return str(tags).encode()
def datamatrix_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((320, 240))
codes = sensor.snapshot().find_datamatrices()
if not codes:
return bytes()
draw_detections(sensor.get_fb(), codes)
return max(codes, key=lambda c: c.w() * c.h()).payload().encode()
def all_datamatrix_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((320, 240))
codes = sensor.snapshot().find_datamatrices()
if not codes:
return bytes()
draw_detections(sensor.get_fb(), codes)
return str(codes).encode()
def barcode_detection(data):
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((sensor.width(), sensor.height() // 8))
codes = sensor.snapshot().find_barcodes()
if not codes:
return bytes()
return max(codes, key=lambda c: c.w() * c.h()).payload().encode()
def all_barcode_detection(data):
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((sensor.width(), sensor.height() // 8))
codes = sensor.snapshot().find_barcodes()
if not codes:
return bytes()
return str(codes).encode()
def color_detection(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
thresholds = struct.unpack("<bbbbbb", data)
blobs = sensor.snapshot().find_blobs(
[thresholds], pixels_threshold=500, area_threshold=500, merge=True, margin=20
)
if not blobs:
return bytes()
for b in blobs:
sensor.get_fb().draw_rectangle(b.rect(), color=(255, 0, 0))
sensor.get_fb().draw_cross(b.cx(), b.cy(), color=(0, 255, 0))
out_blob = max(blobs, key=lambda b: b.density())
return struct.pack("<HH", out_blob.cx(), out_blob.cy())
def jpeg_snapshot(data):
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
img = sensor.snapshot()
img.to_jpeg(quality=90)
return img.bytearray()
interface.register_callback(face_detection)
interface.register_callback(qrcode_detection)
interface.register_callback(all_qrcode_detection)
interface.register_callback(apriltag_detection)
interface.register_callback(all_apriltag_detection)
interface.register_callback(datamatrix_detection)
interface.register_callback(all_datamatrix_detection)
interface.register_callback(barcode_detection)
interface.register_callback(all_barcode_detection)
interface.register_callback(color_detection)
interface.register_callback(jpeg_snapshot)
interface.loop()