openmv4闪灯说明_OpenMV Cam
改了一下算法,大致是因为类型是float才输出不了的,将err_x转成int型就行了。但是Flag还是无法输出。
用write(Flag)也不行,改成数据用writechar(Flag)也不行
import sensor,time,pyb,math,time,utime,image
from pyb import Pin, Timer, UART
clock = time.clock() # Tracks FPS.
LINE_WIDTH = 10
THRESHOLD = 40
#屏幕尺寸
WIDTH = 160
HEIGHT = 120
ROI = (int((WIDTH-HEIGHT)/2),0,HEIGHT,HEIGHT)
XO = int((WIDTH-HEIGHT)/2)
CENTRAL_AREA = 20
#高度数据
highcnt = 0.0
high = 0
#xy平面误差数据
err_x = 0
err_y = 0
#超声波回调处理函数
def Ultrasound(line):
if(Echo.value()==1):
tim_count.init(prescaler=1799, period=1176)#打开定时器
if(Echo.value()==0):
global highcnt
tim_count.deinit()
highcnt = tim_count.counter()#计数
uart.writechar(0x55)
uart.writechar(0xAA)
uart.writechar(0x10)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(high>>8)
uart.writechar(high)
uart.writechar(err_x>>8)
uart.writechar(err_x)
uart.writechar(err_y>>8)
uart.writechar(err_y)
uart.writechar(Flag)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0xAA)
print(high)
#超声波发射端口配置
timpwm = Timer(4, freq=60) #超声波60赫兹发射频率
ch1 = timpwm.channel(1, Timer.PWM, pin=Pin("P7"), pulse_width=80) #100us发射角
#超声波接收端口配置
tim_count = pyb.Timer(1) #定时器计数
extint = pyb.ExtInt('P0', pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_DOWN,Ultrasound)#开启外部中断
Echo = Pin('P0', Pin.IN, Pin.PULL_DOWN)
#串口三配置
uart = UART(3, 115200)#115200
uart.init(115200, bits=8, parity=None, stop=1)
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)#设置灰度信息
sensor.set_framesize(sensor.QQVGA)#设置图像大小
#sensor.skip_frames(20)#相机自检几张图片
sensor.set_auto_whitebal(False)#关闭白平衡
while(True):
high = int(1.7*highcnt)
line_x1 = [0,0,0,0]
line_x2 = [0,0,0,0]
line_y1 = [0,0,0,0]
line_y2 = [0,0,0,0]
line_H = [0,0,0,0]
line_V = [0,0,0,0]
line_temp = [0,0,0,0]
line_num = 0
line_num_y = 0
line_num_x = 0
num_H = 0
num_V = 0
Flag = int(0)
weight = 0
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # Take a picture and return the image.
#print(img.height())
#检测图形
# img_2=img.binary([(0,127)],invert = 1)
#image.binary(thresholds, invert=False)此函数将在thresholds内的
#图像部分的全部像素变为1白,将在阈值外的部分全部像素变为0黑。invert将图像
#的0 1(黑 白)进行反转,默认为false不反转。
# img_2.median(1, percentile=0.5)
# img_2.erode(2)
for i in range(int(HEIGHT/3)):
for j in range(int(HEIGHT/3)):
if img.get_pixel(i*3+XO,j*3) < 127 :
weight += 1
#print(img.get_pixel(i,j))
print(weight)
#下面开始检测特征线数(可去?)
img.find_edges(image.EDGE_CANNY, threshold=(50, 80)) # Find edges
lines = img.find_lines(roi = ROI,threshold = THRESHOLD) # Find lines.
# lines = img.find_lines(threshold = THRESHOLD)
img.draw_rectangle(ROI)
#for l in lines: img.draw_line(l, color=(127)) # Draw lines
#print(lines) # Note: Your OpenMV Cam runs about half as fast while
if len(lines) != 0:
#print(len(lines),lines)
for i in range(len(lines)):
#print(i)
if lines[i][0] == 0: #为横线时
if line_x1 == [0,0,0,0]: #横一无值时
line_x1 = list(lines[i])
elif abs(line_x1[1]-lines[i][1]) < LINE_WIDTH: #为标准横一线时
for j in range(4):
line_x1[j] = (i * line_x1[j] + lines[i][j])/(i+1)
else: #不为标准横一线时
if line_x2 == [0,0,0,0]: #横二无值时
line_x2 = list(lines[i])
elif abs(line_x2[3]-lines[i][3]) < LINE_WIDTH: #为标准横二线时
for j in range(4):
line_x2[j] = (i * line_x2[j] + lines[i][j])/(i+1)
#为其他横线时舍弃
elif lines[i][1] == 0: #为竖线时
if line_y1 == [0,0,0,0]: #竖一无值时
line_y1 = list(lines[i])
elif abs(line_y1[0]-lines[i][0]) < LINE_WIDTH: #为标准竖一线时
for j in range(4):
line_y1[j] = (i * line_y1[j] + lines[i][j])/(i+1)
else: #不为标准竖一线时
if line_y2 == [0,0,0,0]: #竖二无值时
line_y2 = list(lines[i])
elif abs(line_y2[2]-lines[i][2]) < LINE_WIDTH: #为标准竖二线时
for j in range(4):
line_y2[j] = (i * line_y2[j] + lines[i][j])/(i+1) #为其他竖线时舍弃
#为其他线时舍弃
line_all = [line_x1,line_y1,line_x2,line_y2]
for k in range(len(line_all)):
if line_all[k][2] == 140:
line_num_x += 1
if line_all[k][3] == 120:
line_num_y += 1
line_num = line_num_y + line_num_x
if line_num == 2:
if (line_num_y == 2) or (line_num_x == 2):
Flag_0 = '-'
else:
Flag_0 = '+'
elif line_num < 2:
Flag_0 = '-'
else:
Flag_0 = '+'
print(line_num)
#line_all = [line_x1,line_y1,line_x2,line_y2]
#print(line_all)
#下面开始检测横纵中线
if len(lines) != 0:
for i in range(len(lines)):
#print(len(lines),lines)
if lines[i][0] == 0: #为横线时
if line_H == [0,0,0,0]: #横一无值时
line_H = list(lines[i])
num_H += 1
elif abs(line_H[1]-lines[i][1]) < 3*LINE_WIDTH and abs(line_H[3]-lines[i][3]) < 3*LINE_WIDTH:
for j in range(4):
line_H[j] = (num_H * line_H[j] + lines[i][j])/(num_H+1)
num_H += 1
elif lines[i][1] == 0: #为竖线时
if line_V == [0,0,0,0]: #横一无值时
line_V = list(lines[i])
num_V += 1
elif abs(line_V[0]-lines[i][0]) < 3*LINE_WIDTH and abs(line_V[2]-lines[i][2]) < 3*LINE_WIDTH:
for j in range(4):
line_V[j] = (num_V * line_V[j] + lines[i][j])/(num_V+1)
num_V += 1
#print(line_x1)
if line_H == [0,0,0,0]:
line_H = [0,HEIGHT/2,(WIDTH-XO),HEIGHT/2]
if line_V == [0,0,0,0]:
line_V = [(XO+HEIGHT/2),0,(XO+HEIGHT/2),HEIGHT]
line_H = [ int(x) for x in line_H ]
line_V = [ int(x) for x in line_V ]
img.draw_line(line_H,127)
img.draw_line(line_V,127)
print(line_H)
print(line_V)
#找直线的交点(已完成)
if line_V[2] != line_V[0]:
central_x = -(line_V[0]*HEIGHT/(line_V[2]-line_V[0])+line_H[1])/((line_H[3]-line_H[1])/(WIDTH-XO)-HEIGHT/(line_V[2]-line_V[0]))
else:
central_x = line_V[0]
central_y = (line_H[3]-line_H[1])/(WIDTH-XO)*central_x+line_H[1]
img.draw_cross(int(central_x),int(central_y),color=191)
print(central_x)
print(central_y)
err_x = int(central_x - WIDTH/2)
err_y = int(central_y - HEIGHT/2)
#接下来是FLAG
if (abs((central_y - (HEIGHT/2)) < CENTRAL_AREA) and (abs(central_x - (WIDTH/2)) < CENTRAL_AREA)):
if Flag_0 == '+' :
if weight > 300 :
Flag = 0xFF #T
else:
Flag = 0x7F #L
elif Flag_0 =='-' :
Flag = 0x3F #I
else:
Flag = 0x00 #D
print(Flag)
openmv4闪灯说明_OpenMV Cam相关推荐
- 带有频闪灯教程的Android Torch App
在本文中,我们要描述如何在Android中创建简单的割炬应用程序. 这是一个很好的示例,因为我们可以探索一些有关Android Camera的Android API. 我们将使用Android Stu ...
- 物致DIY:OpenMV4——比OpenMV3更快,更高,更强的图像识别DIY神器来了!
物致DIY:OpenMV4--比OpenMV3更快,更高,更强的图像识别DIY神器来了! 2018年10月26日 10:16:36 物致-皈依 阅读数:762 版权声明:本文为博主原创文章,未经博主允 ...
- 可视化卷积神经网络的过滤器_万字长文:深度卷积神经网络特征可视化技术(CAM)最新综述...
↑ 点击蓝字 关注极市平台作者丨皮特潘@知乎来源丨https://zhuanlan.zhihu.com/p/269702192编辑丨极市平台 极市导读 本文通过引用七篇论文来论述CAM技术,对CAM的 ...
- PCB 围绕CAM自动化,打造PCB规则引擎
AutoCAM自动化平台,前端管理订单,而后端执行任务,前端UIl界面有板厚,铜厚,板材,表面处理,层数等信息,而这些信息并不是后端最终所需要的信息后.拿钻孔补偿来说,后端需要的是钻孔补偿值,但前端并 ...
- 在CNN上增加一层CAM告诉你CNN到底关注什么
Cam(Class Activation Mapping)是一个很有意思的算法,他能够将神经网络到底在关注什么可视化的表现出来.但同时它的实现却又如此简介,相比NIN,googLenet这些使用GAP ...
- 计算机控制闪光灯,摄影技巧 闪灯篇 光圈控制主体 快门控制场景 闪光灯又该如何调整输出功率?...
先设定相机,后设定闪光灯.在离机闪领域,M 模式是应用上的大宗.在拍摄时,我们会面临两个问题,一个是闪光灯的出力(输出功率),另一个则是相机的测光.曝光设定.基本上,我们是先决定相机的设定值,再决定闪 ...
- Class Activation Mapping(CAM)
论文<Learning Deep Features for Discriminative Localization >(2016CVPR)主要介绍了两个核心技术: GAP(Global A ...
- 闪灯什么意思_开车碰见别人闪灯知道是什么意思吗?看不懂不要说自己会开车哦...
现在有车的人很多,慢慢的也会接触到很多车友届的暗语,有很多人不明白这些暗语的意思,还以为是开玩笑的,所以就不予理会,其实这里面的内涵还是很深的,真正懂得了这些才能向老司机迈进.以前有段友在开车会面的时 ...
- 简明代码介绍类激活图CAM, GradCAM, GradCAM++
类激活图(class activation map, CAM)能够显示输入图像各区域对于分类神经网络指定类别提供信息的多少,可以帮助我们更好的理解神经网络的工作过程.关于CAM网上讲的有不少,我这 ...
最新文章
- 采访与书评 —— 《BDD In Action》
- 一起学nRF51xx 12 - flash
- 如何让签到成为提升用户活跃度的利器
- 我的第一个Java程序 Hello World!
- 【数据库】SQL查询强化篇
- bash mysql count()_【MySQL】性能优化之 count(*) VS count(col)
- 《Python Cookbook 3rd》笔记汇总
- mysql8.0. linux二进制_linux下安装mysql8.0(二进制方式)
- oracle子接点与父节点上下级关系数据库查询语句,及联查询,
- 小数据、高准确率的文本分类:利用迁移学习创造通用语言模型
- ADC参数中的SNR、SNDR与SFDR的区别是什么
- Mtk Camera Hal到驱动的流程(2)
- 什么是CAS和AQS
- JSF集成Spring
- 【银河麒麟国产服务器安装mysql、nginx和docker遇到的问题】(回忆篇)
- 设置下载安装 桌面_滚动图标——手机图标随着手势滚动,让你的桌面动起来...
- css实现图片背景颜色变灰变白
- [codeforces 1333A] Little Artem 读懂题+找规律+多举例
- Pointproofs 学习笔记3——代码解析
- 怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格
热门文章
- 550 万华人在美人才现状:7 诺奖、300 院士,320 八大常春藤高校终身正教授......
- 如何欣赏一个深度学习框架?
- 本科4篇顶会!清华特奖高天宇干货分享:我是这样写论文、做实验、与导师相处...
- 用Python爬一爬那些年你硬盘存过的老师们,太方便啦!
- PS2019历史记录画笔工具、历史记录艺术画笔工具
- 个人中心数据接口的开发
- 按摩师-总预约时间最长
- 根据字符出现频率排序
- 怎样才可以过大学英语六级啊,有没有好点的方法?【转载】
- 防火墙 加密 专用虚拟网 安全隔离 必然会不断浓缩