Pull to refresh

Инженер с помощью ИИ автоматически сбрасывает панамы из окна на головы жителям Нью-Йорка

Reading time3 min
Views5.7K

Инженер из Нью-Йорка презентовал необычный проект DropofaHat.zone. Он применил ИИ, чтобы сбрасывать из окна своей квартиры панамы прямо на головы проходящих внизу пешеходов. 

По словам автора проекта, любой желающий может выбрать удобное ему время, оплатить панаму и задержаться на 3 секунды под его окном, чтобы получить товар. Головные уборы вылетают из окна с 5-минутным интервалом.

Энтузиаст использовал Raspberry Pi, двигатель Adafruit, а также онлайн-инструмент для маркировки изображений Roboflow. Он остановился на лёгких панамках с пропеллерами.

Чтобы механизм спуска панам через окно работал, пришлось использовать немного пряжи. Она обёрнута вокруг шагового двигателя.

Когда ИИ определяет, что кто-то стоит под окном, запускается отдельный файл Python «dropHat.py» на Raspberry Pi.

import time
    import board
    import digitalio

    enable_pin = digitalio.DigitalInOut(board.D18)
    coil_A_1_pin = digitalio.DigitalInOut(board.D4)
    coil_A_2_pin = digitalio.DigitalInOut(board.D17)
    coil_B_1_pin = digitalio.DigitalInOut(board.D23)
    coil_B_2_pin = digitalio.DigitalInOut(board.D24)

    enable_pin.direction = digitalio.Direction.OUTPUT
    coil_A_1_pin.direction = digitalio.Direction.OUTPUT
    coil_A_2_pin.direction = digitalio.Direction.OUTPUT
    coil_B_1_pin.direction = digitalio.Direction.OUTPUT
    coil_B_2_pin.direction = digitalio.Direction.OUTPUT

    enable_pin.value = True

    def forward(delay, steps):
        i = 0
        while i in range(0, steps):
            setStep(1, 0, 1, 0)
            time.sleep(delay)
            setStep(0, 1, 1, 0)
            time.sleep(delay)
            setStep(0, 1, 0, 1)
            time.sleep(delay)
            setStep(1, 0, 0, 1)
            time.sleep(delay)
            i += 1

    def setStep(w1, w2, w3, w4):
        coil_A_1_pin.value = w1
        coil_A_2_pin.value = w2
        coil_B_1_pin.value = w3
        coil_B_2_pin.value = w4

    # Run a full rotation (512 steps) with a 5 millsecond delay
    forward(5, int(512))
                

Отдельной задачей стало обучение ИИ. Энтузиаст записал на камеру несколько минут видео со своего окна, чтобы научить инструмент выявлять пешеходов без головных уборов. Он опубликовал обучающий датасет из 133 аннотированных изображений и уже работающую модель

Программа Python на компьютере распознаёт, когда кто-то стоит в обозначенном месте под окном 3 секунды подряд. Спустя этот период на Raspberry Pi запускается функция dropHat.py.

import cv2
import time
import paramiko

from inference_sdk import InferenceHTTPClient

CLIENT = InferenceHTTPClient(
    api_url="https://detect.roboflow.com",
    api_key="API_KEY"
)

def ssh_execute(host, port, username, password, command):
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.WarningPolicy)

    try:
        client.connect(host, port=port, username=username, password=password)
        stdin, stdout, stderr = client.exec_command(command)
        
        # Print command output
        print(stdout.read().decode().strip())
        
        if stderr.read().decode().strip():
            print('Error:', stderr)
    finally:
        client.close()

video = cv2.VideoCapture(0)  # 0 usually refers to the webcam

consec_detections = 0
while True:
    ret, frame = video.read()

    # Directly pass the frames to the Roboflow model
    result = CLIENT.infer(frame, model_id="drop-of-a-a-hat/2")

    # Check if a prediction is made
    if 'predictions' in result and len(result['predictions'])>0:
        consec_detections += 1
    else:
        consec_detections = 0

    # If there are three consecutive detections, perform an action (like printing a message)
    if consec_detections >= 3:
        # DROP THE HAT
        ssh_execute('raspberry.local', 22, 'pi', 'raspberry', 'python3 dropHat.py')
        # Reset counter
        consec_detections = 0

    # Delay before the next frame for 1 second
    time.sleep(1)

Tags:
Hubs:
Total votes 9: ↑7 and ↓2+8
Comments11

Other news