当前位置:   article > 正文

无人机视觉 | 搭载MaixPy开发板-K210进行循迹+识别_k210巡线程序

k210巡线程序

前言:基于spieed出品的MaixPy-Dock开发板(K210芯片)进行实践。编译运用MicroPython语言,其是基于 Python3 的语法做的一款解析器,包含了 Python3 的大多数基础语法,主要运行在性能和内存有限的嵌入式芯片上。

        计算机视觉为无人机的导航提供了不可估量的作用,本文实现无人机对基础图形颜色的识别与视觉循迹功能(视觉算法部分  不包括串口通信)

  1. import sensor, image, time, lcd
  2. sensor.reset()
  3. sensor.set_pixformat(sensor.RGB565) # 灰度更快
  4. sensor.set_framesize(sensor.QQVGA)
  5. sensor.skip_frames(time = 2000)
  6. lcd.init()
  7. clock = time.clock()
  8. #----颜色参数选择----#
  9. color_a = (20, 52, -13, 70, 2, 65)
  10. #---------------------------------功能函数--------------------------------------#
  11. #----------圆形图像识别---------#
  12. def fcircle():
  13. img = sensor.snapshot().lens_corr(1.8)
  14. img.laplacian(1, sharpen=True)
  15. #lcd.display(img)
  16. for c in img.find_circles(threshold = 5000, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 1, r_max = 80, r_step = 2):
  17. a=img.draw_circle(c.x(), c.y(), c.r(), color = (0, 255, 0))
  18. #lcd.display(a)
  19. print(c)
  20. #----------矩形图像识别---------#
  21. def frectangle():
  22. img = sensor.snapshot().lens_corr(1.8)
  23. img.laplacian(1, sharpen=True)
  24. for r in img.find_rects(threshold = 10000):
  25. img.draw_rectangle(r.rect(), color = (255, 0, 0))
  26. for p in r.corners(): img.draw_circle(p[0], p[1], 5, color = (0, 255, 0))
  27. print(r)
  28. #----------特定颜色识别---------#
  29. def find_max_blob(blobs):
  30. maxsize = 0
  31. for blob in blobs:
  32. if blob[2]*blob[3] > maxsize:
  33. mmax_blob = blob
  34. maxsize = blob[2]*blob[3]
  35. return mmax_blob
  36. def fcolors(color):
  37. img = sensor.snapshot() # 拍一张照片并返回图像。
  38. blobs = img.find_blobs([color])
  39. if blobs:
  40. b = find_max_blob(blobs)
  41. if b[2] > 15 and b[3] > 15:
  42. img.draw_rectangle(b[0:4])
  43. img.draw_cross(b[5], b[6])
  44. print(b[5], b[6])
  45. else:
  46. print('No')
  47. else:
  48. print('NO')
  49. #-----------循迹----------#
  50. def tracing(colors):
  51. # 拍摄一张图片并按阈值二值化
  52. img = sensor.snapshot()
  53. # 使用kpu加速的锐化进行边缘增强
  54. #img.conv3(con_sharpen)
  55. # 对于图像进行kpu加速的高斯模糊,使图像中心化平滑
  56. img.conv3(con_gauss)
  57. img = img.binary(line_color_union)
  58. # 对二值化的图片进行线性回归得到直线
  59. line = img.get_regression([(100,100,0,0,0,0)], roi = (2,2,img.width()-4,img.height()-4))
  60. img.draw_rectangle((2,2,img.width()-4,img.height()-4))
  61. if line and line.magnitude() > 3:
  62. # 在图片上画线
  63. img.draw_line(line.line(), color = 110, thickness = 5)
  64. # 计算横滚误差
  65. erho = abs(line.rho())-img.width()/2
  66. # 计算偏航误差
  67. if line.theta() > 90:
  68. etheta = line.theta()-180
  69. else:
  70. etheta = line.theta()
  71. # 误差归一化
  72. res_erho = erho/(img.width()/2)
  73. res_etheta = etheta/90
  74. # 误差输出
  75. print('tt',int(res_erho*1000), int(res_etheta*1000))
  76. else:
  77. # 定义误差只能小于1000,若输出无效值则寻迹无效
  78. print('tt',1001, 1001)
  79. # 显示图片
  80. lcd.display(img)
  81. #------------------------------------主函数-------------------------------------#
  82. while True:
  83. clock.tick()
  84. #fcircle()
  85. #frectangle()
  86. #fcolors(color_a)
  87. #tracing(color_a)
  88. print("FPS %f" % clock.fps())

###大家可根据自身需求对代码进行更改参数、恢复注释

参考资料:

MaixPy 文档简介 - Sipeed Wiki

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/693639
推荐阅读
相关标签
  

闽ICP备14008679号