import sensor, image, time, os, tf, math, uos, gc
from pyb import UART,LED
import json
import ustruct
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((240, 240))
sensor.skip_frames(time=2000)
uart = UART(3,115200)
uart.init(115200, bits=8, parity=None, stop=1)
net = None
labels = None
min_confidence = 0.5
init_num=None
def sending_data(cx,cy,cw,ch):
global uart;
data = bytearray([0x2C,4,cx,cy,0x5B])
uart.write(data);
def recive_data():
global uart
if uart.any():
tmp_data = uart.readchar();
print(tmp_data)
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()
while(True):
clock.tick()
img = sensor.snapshot()
for i, detection_list in enumerate(net.detect(img, thresholds=[(math.ceil(min_confidence * 255), 255)])):
if (i == 0): continue
if (len(detection_list) == 0): continue
print("********** %s **********" % labels[i])
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))
print('x %d\ty %d' % (center_x, center_y))
# If the detected number is between 1 and 8, send the corresponding character 'A'-'H'.
if 1 <= i <= 8:
uart.write(chr(ord('A') + i - 1))
# If the detected number is the same as the initial number
if i == init_num:
# If the number is on the left half of the image, send 'L'.
if center_x < img.width() / 2:
uart.write('L')
# If the number is on the right half of the image, send 'R'.
elif center_x > img.width() / 2:
uart.write('R')
"""if center_x < img.width() / 2:
print('Object is on the left')
else:
print('Object is on the right')
print('x %d\ty %d' % (center_x, center_y))"""
img.draw_circle((center_x, center_y, 12), color=colors[i], thickness=2)
print(clock.fps(), "fps", end="\n\n")
U
uyvo 发布的帖子
-
修改了缩进之后错误没有解决,是有其他的语法问题吗?
-
RE: 代码出现invalid syntax的错误该怎么办呢?
LED_R = pyb.LED(1) LED_G = pyb.LED(2) LED_B = pyb.LED(3) LED_R.on() LED_G.on() LED_B.on() red_threshold_01 = ((2, 51, 11, 127, -128, 127)); sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(10) sensor.set_auto_gain(False) sensor.set_auto_whitebal(False) clock = time.clock() uart=UART(3,115200) uart.init(115200,bits=8,parity=None,stop=1) green_threshold = (0, 100, 35, 11, 67, -13) size_threshold = 2000 x_pid = PID(p=0.5, i=1, imax=100) h_pid = PID(p=0.05, i=0.1, imax=50) def find_max(blobs): max_size=0 for blob in blobs: if blob[2]*blob[3] > max_size: max_blob=blob max_size = blob[2]*blob[3] return max_blob def sending_data(cx,cy,cw,ch): global uart; data = bytearray([0x2C,4,cx,cy,0x5B]) uart.write(data); def receive_data(): global uart if uart.any(): tmp_data=uart.readchar(); print(tmp_data) while(True): clock.tick() img = sensor.snapshot() blobs = img.find_blobs([red_threshold_01]) if len(blobs) == 1: # Draw a rect around the blob. b = blobs[0] img.draw_rectangle(b[0:4]) # rect img.draw_cross(b[5], b[6]) # cx, cy Lm = (b[2]+b[3])/2 length = K/Lm print(length) #print(Lm) cx=0;cy=0; if blobs: max_blob = find_max(blobs) x_error = max_blob[5]-img.width()/2 h_error = max_blob[2]*max_blob[3]-size_threshold print("x error: ", x_error) img.draw_rectangle(max_blob[0:4]) img.draw_cross(max_blob[5], max_blob[6]) cx=max_blob[5]; cy=max_blob[6]; cw=max_blob[2]; ch=max_blob[3]; x_output=x_pid.get_pid(x_error,1) h_output=h_pid.get_pid(h_error,1) print("h_output",h_output) sending_data(cx,cy,cw,ch); sending_data(ch1.pulse_width_percent(int(abs(left_speed)))) sending_data(ch2.pulse_width_percent(int(abs(right_speed)))) receive_data(); car.run(-h_output-x_output,-h_output+x_output) else: car.run(18,-18)
-
代码出现invalid syntax的错误该怎么办呢?
import sensor, image, time,math,pyb from pyb import UART,LED import json import ustruct import car from pid import PID LED_R = pyb.LED(1) LED_G = pyb.LED(2) LED_B = pyb.LED(3) LED_R.on() LED_G.on() LED_B.on() red_threshold_01 = ((0, 100, 127, 16, 127, -28)); sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(10) sensor.set_auto_gain(False) sensor.set_auto_whitebal(False) clock = time.clock() uart=UART(3,115200) uart.init(115200,bits=8,parity=None,stop=1) green_threshold = (0, 100, 35, 11, 67, -13) size_threshold = 2000 x_pid = PID(p=0.5, i=1, imax=100) h_pid = PID(p=0.05, i=0.1, imax=50) K=510#the value should be measured def find_max(blobs): max_size=0 for blob in blobs: if blob[2]*blob[3] > max_size: max_blob=blob max_size = blob[2]*blob[3] return max_blob def sending_data(cx,cy,cw,ch): global uart; data = bytearray([0x2C,4,cx,cy,0x5B]) uart.write(data); def receive_data(): global uart if uart.any(): tmp_data=uart.readchar(); print(tmp_data) while(True): clock.tick() img = sensor.snapshot() blobs = img.find_blobs([red_threshold_01]) cx=0;cy=0; if blobs: max_blob = find_max(blobs) x_error = max_blob[5]-img.width()/2 h_error = max_blob[2]*max_blob[3]-size_threshold #print("x error: ", x_error) img.draw_rectangle(max_blob[0:4]) img.draw_cross(max_blob[5], max_blob[6]) pixel_size=max_blob[4] cx=max_blob[5]; cy=max_blob[6]; cw=max_blob[2]; ch=max_blob[3]; focal_length=2.8 actual_size=3.4 th =(actual_size*focal_length)/pixel_size x_output=x_pid.get_pid(x_error,1) h_output=h_pid.get_pid(h_error,1) #print("h_output",h_output) print("cx",cx,"cy",cy,"cz",th) sending_data(cx,cy,cw,ch); receive_data(); car.run(-h_output-x_output,-h_output+x_output) #else: #car.run(18,-18)