Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
# 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
Ejemplo n.º 3
0
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():
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
    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', 
Ejemplo n.º 6
0
import sensor

sensor.run()
Ejemplo n.º 7
0
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 ランプを消す