• 星瞳AI VISION软件内测!可以离线标注,训练,并生成OpenMV的模型。可以替代edge impulse https://forum.singtown.com/topic/8206
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • openmv脱机运行能正常发送数据,但是不能接收数据,这是为什么?



    • openmv在IDE运行时,串口接收和发送数据都是正常的,但是脱机运行时,能正常发送数据却不能正常接收数据,这是什么原因?

      import sensor, image, time, os, tf, math, uos, gc
      from pyb import UART, Timer, LED
      sensor.reset()
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.QQVGA)
      sensor.set_windowing((240, 240))
      sensor.skip_frames(time=2000)
      net = None
      labels = None
      min_confidence = 0.5
      try:
      	net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024)))
      except Exception as e:
      	raise Exception('Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')')
      try:
      	labels = [line.rstrip('\n') for line in open("labels.txt")]
      except Exception as e:
      	raise Exception('Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')')
      colors = [
      	(255,   0,   0),
      	(  0, 255,   0),
      	(255, 255,   0),
      	(  0,   0, 255),
      	(255,   0, 255),
      	(  0, 255, 255),
      	(255, 255, 255),
      ]
      clock = time.clock()
      global uart_r
      uart_r = [0xAA, 0xAF, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00]
      class Saveimage(object):
      	def __init__(self):
      		pass
      	def Recognize(self,img):
      		self.img = img
      		for i, detection_list in enumerate(net.detect(self.img, thresholds=[(math.ceil(min_confidence * 255), 255)])):
      			if (i == 0): continue
      			if (len(detection_list) == 0): continue
      			print("recognize to: "+labels[i])
      			if labels[i]=='lin':
      				sensor.snapshot().save("lin.jpg")
      				uart_bufl[6] = 0xAA
      				print("Save lin.")
      			elif labels[i]=='ke':
      				sensor.snapshot().save("ke.jpg")
      				uart_bufl[6] = 0xBB
      				print("Save ke.")
      			elif labels[i]=='da':
      				 sensor.snapshot().save("da.jpg")
      				 uart_bufl[6] = 0xCC
      				 print("Save da.")
      			sensor.snapshot().save("other.jpg")
      			print("Save other.")
      Saveimg=Saveimage()
      uart = UART(3,115200)
      uart.init(115200,8, parity=None, stop=1)
      def ReceiveB():
      	global uart_r
      	size = uart.any()
      	if size<=len(uart_r):
      		for i in range(0,size):
      			uart_r[i] = uart.readchar()
      	if uart_r[0]!=0xAA:
      		uart_r = [0xAA, 0xAF, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00]
      		LED(1).on()
      		LED(2).off()
      	elif uart_r[1]!=0xAF:
      		uart_r = [0xAA, 0xAF, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00]
      		LED(1).on()
      		LED(2).off()
      	elif uart_r[2]!=0x05:
      		uart_r = [0xAA, 0xAF, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00]
      		LED(1).on()
      		LED(2).off()
      	else:
      		LED(1).off()
      		LED(2).on()
      uart_bufl = bytearray([0xAA,0xFF, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
      def uartsend(timer):
      	uart.write(uart_bufl)
      def updatesend(custom, cx, cy, distance):
      	i=0
      	sum = 0
      	add = 0
      	uart_bufl[2] = custom;
      	uart_bufl[4] = cx;
      	uart_bufl[5] = cy;
      	uart_bufl[6] = distance;
      	uart_bufl[3] = len(uart_bufl)-6;
      	while i<(len(uart_bufl)-2):
      		sum = sum+uart_bufl[i]
      		add = add+sum
      		i+=1
      	uart_bufl[-2] = sum;
      	uart_bufl[-1] = add;
      tim = Timer(2, freq=20)
      tim.callback(uartsend)
      while(True):
      	clock.tick()
      	ReceiveB()
      	print(str(uart_r))
      	if uart_r[5]==0xDD:
      		img0 = sensor.snapshot()
      		Saveimg.Recognize(img0)
      		LED(3).on()
      		LED(1).off()
      		LED(2).off()
      		print("Saving......")
      	elif uart_r[5]==0xEE:
      		if uart_r[4]!=0x06:
      			print("Now is locking mode\r\n")
      			img1 = sensor.snapshot()
      			lockimg = ''
      			for i, detection_list in enumerate(net.detect(img1, thresholds=[(math.ceil(min_confidence * 255), 255)])):
      				if (i == 0): continue
      				if (len(detection_list) == 0): continue
      				lockimg = labels[i]
      				uart_bufl[7] = 0xCC
      				print('reading:'+lockimg)
      		else:
      			img2 = sensor.snapshot()
      			for k, detection_list in enumerate(net.detect(img2, thresholds=[(math.ceil(min_confidence * 255), 255)])):
      				if (k == 0): continue
      				if (len(detection_list) == 0): continue
      				if labels[k]==lockimg:
      					print(lockimg+labels[k]+'\r\n')
      					for d in detection_list:
      						[x, y, w, h] = d.rect()
      						center_x = math.floor(x + (w / 2))
      						center_y = math.floor(y + (h / 2))
      						distance = int((80-center_x)*100*0.0024/0.42)
      						uart_bufl[4] = center_x
      						uart_bufl[5] = center_y
      						uart_bufl[6] = distance
      						LED(3).on()
      						LED(1).off()
      						LED(2).off()
      						print('%d',distance)
      				else:
      					uart_bufl[6] = 0x3C
      					print("Don't get picture!")
      	else:
      		print("Wait enter a recognization mode!")
      	print(clock.fps(), "fps", end="\n\n")
      


    • 先用示波器看看波形,看看到底是否有数据。其他的说法都是瞎猜。