Introduction
Computer vision has moved beyond expensive industrial setups. Microcontroller-based cameras like the OpenMV Cam (with OV2640 sensor) now bring real-time image capture and basic processing to edge devices at a fraction of the cost. However, turning raw frames into actionable decisions — object recognition, motion alerts, or QR-code logging — still requires significant coding and server infrastructure.
ASI Biont bridges this gap. Instead of writing complex pipelines from scratch, you connect your OpenMV or OV2640-based device to an AI agent that handles the heavy lifting: image analysis, event triggers, and even control of actuators (servos, relays, displays) through natural language commands. This article walks through a concrete use case — a smart surveillance camera — showing exactly how to integrate OpenMV with ASI Biont using MQTT and execute_python.
Why Connect a Camera to an AI Agent?
Standalone cameras can capture and store images, but they lack context-aware decision making. An AI agent like ASI Biont can:
- Analyze each frame for objects, faces, or text
- Trigger actions (email alerts, database logging, hardware control) based on visual events
- Adjust capture parameters (resolution, frame rate) dynamically based on scene complexity
- Provide a chat interface to query the camera: "What did you see in the last hour?"
This eliminates the need for a dedicated server running OpenCV or a cloud vision API — the AI agent orchestrates everything from a single conversation.
Connection Method: MQTT with execute_python
For an OpenMV camera, the most practical connection method is MQTT (Message Queuing Telemetry Transport). Here’s why:
| Method | Suitability | Reason |
|---|---|---|
| COM port (Hardware Bridge) | Low | OpenMV uses MicroPython USB serial, but bridge latency for image transfer is high |
| SSH | Low | OpenMV does not run Linux; no SSH server |
| MQTT | High | Lightweight, works over Wi-Fi, native MicroPython support (umqtt.simple) |
| Modbus/TCP | Low | Designed for registers, not image data |
| HTTP API / WebSocket | Medium | Possible but heavier than MQTT for frequent frame sends |
| OPC-UA | Low | Industrial protocol, overkill for embedded camera |
OpenMV Cam H7 Plus (with OV2640) supports Wi-Fi via an ESP8266/ESP32 co-processor or built-in Wi-Fi on some models. We’ll use MQTT to send JPEG frames to a broker (e.g., Mosquitto on a local Raspberry Pi or cloud). ASI Biont subscribes to the same topic, receives images, and processes them using execute_python.
Use Case: AI-Powered Motion-Triggered Surveillance
Scenario
A warehouse needs to detect unauthorized movement after hours. An OpenMV Cam H7 Plus captures frames, sends them via MQTT to ASI Biont. The AI agent analyzes each image for motion (using frame differencing or a lightweight CNN like MobileNet). If motion is detected, it sends a Telegram alert with the image and logs the event to a Google Sheet.
Step 1: Hardware Setup
- OpenMV Cam H7 Plus with OV2640 sensor
- ESP8266/ESP32 module (or built-in Wi-Fi on OpenMV Cam H7 Plus)
- MQTT broker (Mosquitto) running on a local server or cloud (e.g., HiveMQ Cloud free tier)
Step 2: OpenMV MicroPython Code (Camera Side)
import sensor, image, time
from mqtt import MQTTClient
import network
# Wi-Fi credentials
SSID = "YourWiFi"
PASSWORD = "YourPassword"
# MQTT broker settings
BROKER = "192.168.1.100" # local Mosquitto or cloud URL
TOPIC = "camera/frame"
# Initialize camera
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA) # 320x240 for speed
sensor.skip_frames(30)
# Connect to Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
time.sleep(1)
# Connect to MQTT broker
client = MQTTClient("openmv_cam", BROKER)
client.connect()
# Send frames every 2 seconds
while True:
img = sensor.snapshot()
# Compress to JPEG
jpeg = img.compress(quality=50)
client.publish(TOPIC, jpeg)
time.sleep(2)
Important: This code runs on the OpenMV device. It publishes raw JPEG bytes to the MQTT topic camera/frame.
Step 3: ASI Biont Integration (AI Side)
In the ASI Biont chat, the user describes their setup:
"Connect to MQTT broker at 192.168.1.100:1883, subscribe to topic 'camera/frame'. For each image received, detect motion using frame differencing. If motion is detected, send me a Telegram message with the image and log the event to Google Sheets."
ASI Biont’s AI agent generates and executes a Python script using execute_python. Here’s what the generated code looks like (simplified):
import paho.mqtt.client as mqtt
import numpy as np
import cv2
from PIL import Image
import io
import requests
import json
# Configuration
BROKER = "192.168.1.100"
TOPIC = "camera/frame"
TELEGRAM_TOKEN = "your_bot_token"
TELEGRAM_CHAT_ID = "your_chat_id"
GOOGLE_SHEETS_WEBHOOK = "https://script.google.com/macros/s/.../exec"
# Motion detection variables
prev_gray = None
THRESHOLD = 30 # pixel difference threshold
# MQTT callbacks
def on_message(client, userdata, msg):
global prev_gray
# Decode JPEG bytes
img_bytes = msg.payload
img = Image.open(io.BytesIO(img_bytes))
frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
if prev_gray is not None:
diff = cv2.absdiff(prev_gray, gray)
_, thresh = cv2.threshold(diff, THRESHOLD, 255, cv2.THRESH_BINARY)
motion_pixels = cv2.countNonZero(thresh)
if motion_pixels > 500: # motion threshold
# Send Telegram alert with image
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendPhoto"
files = {'photo': ('frame.jpg', img_bytes, 'image/jpeg')}
data = {'chat_id': TELEGRAM_CHAT_ID, 'caption': '🚨 Motion detected!'}
requests.post(url, files=files, data=data)
# Log to Google Sheets
payload = {'timestamp': time.strftime('%Y-%m-%d %H:%M:%S'), 'motion_pixels': motion_pixels}
requests.post(GOOGLE_SHEETS_WEBHOOK, json=payload)
prev_gray = gray
# Connect to broker
client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER, 1883, 60)
client.subscribe(TOPIC)
client.loop_forever() # runs until timeout (30 seconds sandbox limit)
Note: The sandbox has a 30-second timeout. For continuous operation, the user can ask the AI to run this script on a local server via SSH (e.g., on a Raspberry Pi) using paramiko.
Step 4: Continuous Deployment via SSH
To run the MQTT subscriber 24/7, the user can ask:
"Deploy this script to my Raspberry Pi at 192.168.1.50 via SSH, run it as a systemd service."
ASI Biont generates a paramiko script that:
1. SCPs the Python script to the Pi
2. Creates a systemd service file
3. Enables and starts the service
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.50', username='pi', password='raspberry')
# Transfer script
sftp = ssh.open_sftp()
sftp.put('motion_detector.py', '/home/pi/motion_detector.py')
sftp.close()
# Create systemd service
service_content = """[Unit]
Description=Motion Detector MQTT Subscriber
After=network.target
[Service]
ExecStart=/usr/bin/python3 /home/pi/motion_detector.py
WorkingDirectory=/home/pi
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
"""
stdin, stdout, stderr = ssh.exec_command(f"echo '{service_content}' | sudo tee /etc/systemd/system/motion_detector.service")
ssh.exec_command('sudo systemctl daemon-reload')
ssh.exec_command('sudo systemctl enable motion_detector')
ssh.exec_command('sudo systemctl start motion_detector')
ssh.close()
Advanced AI Models on Edge
While the OpenMV itself runs lightweight MicroPython, ASI Biont can leverage its sandbox to run more sophisticated models on received frames:
| Model | Task | Library |
|---|---|---|
| MobileNet V2 | Object classification (20 classes) | torch / onnxruntime |
| YOLOv5 (tiny) | Real-time object detection | onnxruntime |
| OpenCV Haar Cascades | Face detection | cv2 |
| Tesseract (pytesseract) | Optical character recognition (OCR) | pytesseract |
| Custom TensorFlow Lite | Any specific task | tflite-runtime |
The AI agent can chain multiple models: first detect a person with YOLO, then recognize their face with a Siamese network, then log the ID to a database.
Why This Approach Wins
- No coding required for integration: The user describes the setup in natural language, and ASI Biont generates all the glue code.
- Flexibility: Switch from MQTT to HTTP or SSH with a single chat command.
- Scalability: The same pattern works for hundreds of cameras — just change broker topics.
- Real-time interaction: Ask the AI "Send me the latest frame" or "All frames with a person in the last hour" and get an answer instantly.
Conclusion
Integrating an OpenMV camera with OV2640 sensor into ASI Biont turns a simple microcontroller into a smart surveillance node. By leveraging MQTT for lightweight image transfer and execute_python for AI analysis, you get a production-ready vision system without writing a single line of boilerplate code. The AI agent handles everything — from connecting to the broker to deploying scripts on remote servers.
Try it yourself: Connect your OpenMV camera to ASI Biont at asibiont.com. Describe your setup in the chat, and watch the AI agent build your custom computer vision automation in seconds.
Comments