目录
前言
各位小伙伴大家好,今天我来分享一下我所使用的工创视觉代码。openmv做视觉是非常方便的,因为他有各种集成好的API,功能都已经封装好了,我们要使用什么功能就直接调用对应的API就可以了,并且只要我们了解API的参数的含义,就可以调整到我们想要的效果(openmv官网有对API参数的解释 )。openmv对于视觉小白们来说,还是容易上手的。下面我就使用openmv来实现工创视觉任务。本人学识尚浅,如有不对的地方,还望各位大佬批评指正,谢谢。
阅读推荐:
有一些基础的小伙伴们可以先大体看一遍代码,然后在继续随便看看本人的浅见。
没有基础或者没了解过openmv的小伙伴。可以直接使用我提供的代码去运行,整体代码我也调节测试过了。
一、效果展示
色环
二、完整代码展示
在代码中我已经标注了详细的注释,如果还有不理解的参数,可以去openmv的文档看一下。
#视觉部分代码
#整体以状态机方式运行
import sensor, image
import time,json
import struct
from machine import UART
from pyb import UART
import pyb
uart=UART(3,9600) #初始化串口3
#状态机初始状态
flag=0x02
ACK=0x00
#默认为0x00无色,0x01为红色,0x02为蓝色,0x03为绿色
colour=0x01
#工作变量次数
ACK_num=0
#发送数据包
def send_data(x,y):
#包头 数据位 状态机状态 目标级别 x坐标 y坐标 包尾
UART_Date=bytearray([
0XFF,
0x04,
flag,
colour,
x,
y,
0XFE])
print(UART_Date)
uart.write(UART_TXDATA)
#应答数据包
def send_ACK():
#包头 数据位 应答位 包尾
UART_Date=bytearray([
0XFF,
0x01,
0x11,
0XFE])
print(UART_Date)
uart.write(UART_TXDATA)
#接收数据包
def RX_date():
if len(data) >= 5:
if data[0] == 0x00 and data[1] == 0x02 and data[4]==0x11:
data1 = data[2]
data2 = data[3]
print("数据1:", data1, "数据2:", data2)
else:
data1=0x00
data2=0x00
print("数据格式错误")
else:
data1=0x00
data2=0x00
print("接收到的数据长度不足")
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.set_auto_whitebal(False)
sensor.skip_frames(30)
sensor.set_auto_gain(False)
#色环阈值#红、蓝、绿
ring_colour=[(40, 71, 11, 40, -1, 69),
(28,