from fpioa_manager import fm from machine import UART lcd.init(freq=15000000) sensor.reset(dual_buff=1) sensor.set_pixformat( sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE) sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240) sensor.skip_frames(time=2000) # Wait for settings take effect. sensor.set_auto_whitebal(False) # close auto whitebal sensor.set_hmirror(1) sensor.set_vflip(1) sensor.set_windowing((224, 224)) sensor.set_brightness(0) # 设置亮度 sensor.set_auto_gain(0) sensor.run(1) # run automatically, call sensor.run(0) to stop #串口初始化 fm.register(10, fm.fpioa.UART2_TX) fm.register(11, fm.fpioa.UART2_RX) uart_1 = UART(UART.UART1, 115200, 8, None, 1, timeout=1000, read_buf_len=4096) clock = time.clock() # Create a clock object to track the FPS. #发送打包函数 def send_data_packet(rho_err, theta_err): #距离左边的距离rho_err范围0—210,角度theta_err范围0-180 checkout = (rho_err + theta_err) #校验位,为x坐标+y坐标 的低八位 data = bytearray([0xAA, 0x55, rho_err, theta_err, checkout, 0x54]) #转成16进制 uart_1.write(data) #通过串口发送给stm32
# Edge detection with Canny: # # This example demonstrates the Canny edge detector. import sensor, image, time sensor.reset() # Initialize the camera sensor. sensor.set_pixformat(sensor.GRAYSCALE) # or sensor.RGB565 sensor.set_framesize(sensor.QQVGA) # or sensor.QVGA (or others) sensor.skip_frames(time=2000) # Let new settings take affect. sensor.set_gainceiling(8) sensor.run(1) clock = time.clock() # Tracks FPS. while (True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot() # Take a picture and return the image. # Use Canny edge detector #img.find_edges(image.EDGE_CANNY, threshold=(50, 80)) # Faster simpler edge detection img.find_edges(image.EDGE_SIMPLE, threshold=(100, 255)) print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
def set_key_state(*_): global start_processing start_processing = True utime.sleep_ms(BOUNCE_PROTECTION) key_gpio.irq(set_key_state, GPIO.IRQ_RISING, GPIO.WAKEUP_NOT_SUPPORT) lcd.init() # 初始化lcd lcd.rotation(2) sensor.reset() #初始化sensor 摄像头 sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.set_hmirror(1) #设置摄像头镜像 sensor.set_vflip(1) #设置摄像头翻转 sensor.run(1) #使能摄像头 anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) #anchor for face detect 用于人脸检测的Anchor dst_point = [ (44, 59), (84, 59), (64, 82), (47, 105), (81, 105) ] #standard face key point position 标准正脸的5关键点坐标 分别为 左眼 右眼 鼻子 左嘴角 右嘴角 a = kpu.init_yolo2(task_fd, 0.5, 0.3, 5, anchor) #初始化人脸检测模型 img_lcd = image.Image() # 设置显示buf img_face = image.Image(size=(128, 128)) #设置 128 * 128 人脸图片buf a = img_face.pix_to_ai() # 将图片转为kpu接受的格式 record_ftr = [] #空列表 用于存储当前196维特征 record_ftrs = [] #空列表 用于存储按键记录下人脸特征,可以将特征以txt等文件形式保存到sd卡后,读取到此列表,即可实现人脸断电存储。 record_names = [] #空列表 用于存储按键记录下人脸名字,顺序与record_ftrs相一致。 #names = ['Mr.1', 'Mr.2', 'Mr.3', 'Mr.4', 'Mr.5', 'Mr.6', 'Mr.7', 'Mr.8', 'Mr.9' , 'Mr.10'] # 人名标签,与上面列表特征值一一对应。 if "names.txt" in os.listdir():
class Maix_dock_device: TOF10120_addr = 0x52 VL53L0X_addr = 0x29 memaddr = 0xc2 nbytes = 1 VL53L0X_REG_IDENTIFICATION_MODEL_ID = 0xc0 VL53L0X_REG_IDENTIFICATION_REVISION_ID = 0xc2 VL53L0X_REG_RESULT_INTERRUPT_STATUS = 0x13 VL53L0X_REG_RESULT_RANGE_STATUS = 0x14 VL53L0X_REG_SYSRANGE_START = 0x00 pcf8591_addr = 0x48 #pcf8591_addr = 0x4f fm.register(1, fm.fpioa.GPIO0) fm.register(2, fm.fpioa.GPIO1) fm.register(3, fm.fpioa.GPIO2) fm.register(13, fm.fpioa.GPIO3) fm.register(14, fm.fpioa.GPIO4) fm.register(15, fm.fpioa.GPIOHS1) fm.register(17, fm.fpioa.GPIOHS2) UVC = GPIO(GPIO.GPIO0, GPIO.OUT) LED_dis = GPIO(GPIO.GPIO1, GPIO.OUT) BEE = GPIO(GPIO.GPIO2, GPIO.OUT) TEMP_1 = GPIO(GPIO.GPIO3, GPIO.OUT) TEMP_2 = GPIO(GPIO.GPIO4, GPIO.OUT) KEY_start = GPIO(GPIO.GPIOHS1, GPIO.IN, GPIO.IRQ_FALLING) #key = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_NONE) KEY_lock = GPIO(GPIO.GPIOHS2, GPIO.IN, GPIO.PULL_NONE) tempBorder_times = 0 lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) task = kpu.load( 0x300000 ) # you need put model(face.kfpkg) in flash at address 0x300000 # task = kpu.load("/sd/face.kmodel") anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) i2c = I2C(I2C.I2C0, mode=I2C.MODE_MASTER, freq=100000, scl=9, sda=10) # software i2c i2c_extend = I2C(I2C.I2C1, mode=I2C.MODE_MASTER, freq=100000, scl=11, sda=12) # software i2c def __init__(self): print("Maix_dock_device class") self.infrared_range_left = 0 self.infrared_range_right = 0 self.temperature_sensor_left = 0 self.temperature_sensor_right = 0 self.ad48v = 0 self.face_detection = 0 self.readAdd_times = 0 def set_face_detection(self): img = sensor.snapshot() code = kpu.run_yolo2(self.task, img) if code: for i in code: #print(i) #a = img.draw_rectangle(i.rect()) print("find face") self.face_detection = 1 else: print("no face") self.face_detection = 0 def get_face_detection(self): return self.face_detection def get_infrared_range_left(self): return self.infrared_range_left def get_infrared_range_right(self): return self.infrared_range_right def get_ad48v(self): return self.ad48v def get_temperature_sensor_left(self): return self.temperature_sensor_left def get_temperature_sensor_left(self): return self.temperature_sensor_left def set_UVC_OUT(self, value): self.UVC.value(value) def set_led(self, value): self.LED_dis.value(value) def get_temperature_sensor_left(self): return 20.1 def get_keyValue_start(self): if (self.KEY_start.value() == 1): time.sleep_ms(10) if (self.KEY_start.value() == 1): #print("KEY_start close") return 1 else: #print("KEY_start open") return 0 def show_deviceAddr(self): devices = self.i2c.scan() print(devices) devices2 = self.i2c_extend.scan() print(devices2) def set_infrared_range_left(self): try: self.i2c.writeto_mem(0x29, 0x00, chr(1)) time.sleep_ms(10) #time.sleep_ms(40) data_i2c = self.i2c.readfrom_mem(0x29, 0x1e, 2) data_i2c = data_i2c[0] << 8 | data_i2c[1] if data_i2c != 20: self.infrared_range_left = data_i2c return data_i2c else: print("data_i2c == 20") return None except OSError as err: if err.args[0] == errno.EIO: print("i2c1 dis errno.EIO") return None else: print("i2c1 abnormal") return None def set_infrared_range_right(self): try: self.i2c_extend.writeto_mem(0x29, 0x00, chr(1)) time.sleep_ms(10) #time.sleep_ms(40) data_i2c = self.i2c_extend.readfrom_mem(0x29, 0x1e, 2) data_i2c = data_i2c[0] << 8 | data_i2c[1] if data_i2c != 20: self.infrared_range_right = data_i2c return data_i2c else: print("data_i2c == 20") return None except OSError as err: if err.args[0] == errno.EIO: print("i2c2 errno.EIO") return None else: print("i2c2 abnormal") return None def set_ad48v_chl(self, chn): try: if chn == 0: self.i2c.writeto(self.pcf8591_addr, chr(0x40)) if chn == 1: self.i2c.writeto(self.pcf8591_addr, chr(0x41)) if chn == 2: self.i2c.writeto(self.pcf8591_addr, chr(0x42)) if chn == 3: self.i2c.writeto(self.pcf8591_addr, chr(0x43)) self.i2c.readfrom(self.pcf8591_addr, 1) ad_value = self.i2c.readfrom(self.pcf8591_addr, 1) ad_value = ad_value[0] * 58 / 255 self.ad48v = ad_value - 1.2 return ad_value except OSError as err: if err.args[0] == errno.EIO: print("i2c1 ad errno.EIO") def set_ad48v(self): self.set_ad48v_chl(0) def set_tof10120_left(self): try: data_i2c = self.i2c.readfrom_mem(self.TOF10120_addr, 0x00, 2) dis_left = data_i2c[0] * 256 + data_i2c[1] print("dis_left", '%d' % dis_left) except OSError as err: if err.args[0] == errno.EIO: print("i2c1 tof10120_left errno.EIO") def set_tof10120_right(self): try: data_i2c = self.i2c.readfrom_mem(self.TOF10120_addr + 1, 0x00, 2) dis_right = data_i2c[0] * 256 + data_i2c[1] print("dis_left", '%d' % dis_right) except OSError as err: if err.args[0] == errno.EIO: print("i2c1 tof10120_right errno.EIO") def uvc_autoControl(self): tempBorder_times = 0 if self.readAdd_times == 0: self.readAdd_times += 1 self.show_deviceAddr() self.set_infrared_range_left() utime.sleep_ms(200) self.set_ad48v() utime.sleep_ms(200) self.set_infrared_range_right() utime.sleep_ms(200) self.set_face_detection() if self.get_keyValue_start(): if ((self.get_face_detection() == 0) and (self.get_ad48v() > 36)): if ((tempBorder_times <= 3) and ((self.get_infrared_range_left() < 500) or (self.get_infrared_range_right() < 500))): self.set_UVC_OUT(1) self.set_led(1) print("uvc_out: 1") else: self.set_UVC_OUT(0) self.set_led(0) print("uvc_out: 0") print("key_start_down!") else: print("key_start_up!") self.set_UVC_OUT(0) self.set_led(0) print("infrared_range_left = ", self.get_infrared_range_left()) print("infrared_range_right = ", self.get_infrared_range_right()) print("ad48v = ", self.get_ad48v()) print("face_detection = ", self.get_face_detection())
global key_pressed val=key_gpio.value() if last_key_state == 1 and val == 0: key_pressed=1 else: key_pressed=0 last_key_state = val lcd.init() #LCD初期化 lcd.rotation(0) #センサーカメラを初期化する sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.set_hmirror(1) #カメラミラーリングの設定 sensor.set_vflip(1) #カメラのフリップを設定する sensor.run(1) #カメラを有効にする anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) #顔検出用アンカー #顔の5つのキーポイント座標、左目、右目、鼻、左口の角、右口の角 dst_point = [(44,59),(84,59),(64,82),(47,105),(81,105)] a = kpu.init_yolo2(task_fd, 0.5, 0.3, 5, anchor) #顔検出モデルを初期化する img_lcd=image.Image() #表示バッファを設定 img_face=image.Image(size=(128,128)) #顔画像バッファを設定 a=img_face.pix_to_ai() #画像をkpuの形式に変換 record_ftr=[] #196次元の特徴ベクトル保存用のリスト record_ftrs=[] #顔の特徴の主要な特徴を保存する names = ['Mr.1', 'Mr.2', 'Mr.3', 'Mr.4', 'Mr.5', 'Mr.6', 'Mr.7',
import sensor sensor.run()
from modules import ws2812 WIDTH = 320 HEIGHT = 240 INTERVAL_MS = 2000 lcd.init(freq=15000000) sensor.reset() # sensor.set_pixformat(sensor.GRAYSCALE) sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.set_windowing((WIDTH, HEIGHT)) sensor.set_vflip(True) sensor.set_hmirror(True) sensor.run(True) sensor.skip_frames() # UnitV の Grove ポートを通してシリアル通信する fm.register(35, fm.fpioa.UART1_TX, force=True) fm.register(34, fm.fpioa.UART1_RX, force=True) uart = UART(UART.UART1, 1152000, 8, 0, 0, timeout=2000, read_buf_len=4096) enabled = False # UnitV のボタンイベントを捕捉できるようにする fm.register(18, fm.fpioa.GPIO1) button_a = GPIO(GPIO.GPIO1, GPIO.IN, GPIO.PULL_DOWN) fm.register(19, fm.fpioa.GPIO2) button_b = GPIO(GPIO.GPIO2, GPIO.IN, GPIO.PULL_DOWN) # LED ランプを消す