Embedded_game/002_B_Car/主程序/红绿灯/红绿灯模型.py
2025-01-02 12:48:11 +08:00

110 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
# @Time : 2024/7/6 下午12:23
# @Author : len
# @File : 红绿灯模型.py
# @Software: PyCharm
# @Comment :
import math
import sensor, image, time, lcd
import KPU as kpu
import gc, sys
import binascii
from Maix import GPIO
from machine import Timer, PWM, UART, Timer
from fpioa_manager import fm
input_size = (224, 224)
labels = ['green', 'yellow', 'red']
anchors = [1.25, 1.19, 1.41, 1.31, 1.12, 1.09, 1.47, 1.47, 1.62, 1.5]
QR_num = 0
QR_Flag = False
JTD_num = 0
JTD_Flag = False
# model_addr="/sd/model-JTD.kmodel"
model_addr="0x500000"
#映射串口引脚
fm.register(6, fm.fpioa.UART1_RX, force=True)
fm.register(7, fm.fpioa.UART1_TX, force=True)
#初始化串口
uart = UART(UART.UART1, 115200, read_buf_len=4096)
DISTORTION_FACTOR = 1.5 # 设定畸变系数
def init_sensor():
'''
初始化感光芯片
'''
lcd.init(freq=15000000) #初始化LCD
sensor.reset() #复位和初始化摄像头执行sensor.run(0)停止。
sensor.set_vflip(1) #将摄像头设置成后置方式(所见即所得)
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为彩色 RGB565
#sensor.set_pixformat(sensor.GRAYSCALE) # 设置像素格式为灰色
sensor.set_framesize(sensor.QVGA) # 设置帧大小为 QVGA (320x240)
sensor.set_windowing(input_size)
sensor.set_vflip(1) # 打开垂直翻转 如果是 01Studio 的 K210 不开启会导致画面方向与运动方向相反
sensor.set_hmirror(1) # 打开水平镜像 如果是 01Studio 的 K210 不开启会导致画面方向与运动方向相反
sensor.skip_frames(time = 2000) # 等待设置生效.
clock = time.clock() # 创建一个时钟来追踪 FPS每秒拍摄帧数
init_sensor()
JTD_Flag = True
def JTD_Check():
'''
红绿灯函数
'''
global JTD_Flag
list1 = bytearray([0x55,0x02,0x92,0x00,0x00,0x00,0x00,0xBB])
if JTD_Flag:
print("正在识别")
try:
task = None
print("正在加载模型")
task = kpu.load(model_addr)
print("加载完成")
kpu.init_yolo2(task, 0.85, 0.25, 5, anchors) # 初始化 YOLOv2 模型
while JTD_Flag:
img = sensor.snapshot()
objects = kpu.run_yolo2(task, img)
if objects:
for obj in objects:
pos = obj.rect()
img.draw_rectangle(pos)
img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))
print( labels[obj.classid()], obj.value() )
if( labels[obj.classid()] == 'green'):
list1[3] = 0x06
uart.write(list1)
print(list1)
print("绿灯")
JTD_Flag = False
elif( labels[obj.classid()] == 'yellow' ):
list1[3] = 0x07
uart.write(list1)
print(list1)
print("黄灯")
JTD_Flag = False
elif( labels[obj.classid()] == 'red' ):
list1[3] = 0x05
uart.write(list1)
print(list1)
print("红灯")
JTD_Flag = False
else:
list1[3] = 0x05
uart.write(list1)
JTD_Flag = False
lcd.display(img)
except Exception as e:
raise e
finally:
if not task is None:
kpu.deinit(task)
while True:
JTD_Flag = True
# 交通灯识别
JTD_Check()