STM32+亚博K210手写数字识别

2024-03-16 17:10

本文主要是介绍STM32+亚博K210手写数字识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文以STM32C8T6为例

使用的是亚博K210视觉识别模块

实现功能:

       由K210识别手写数字,通过K210与STM32的串口通信,将识别到的手写数字传回STM32,最后由OLED显示

接线方式:
STM32与OLED:B8-SCL;B9:SDA
STM32与K210:A2 - Tx;A3 - Rx

 部分代码:

K210主函数代码(main.py)

import sensor, image, time, lcd
from maix import KPU
import gcfrom modules import ybserial
import time
import binasciiserial = ybserial()
#字符串转10进制
def str_int(data_str):bb = binascii.hexlify(data_str)bb = str(bb)[2:-1]#print(bb)#print(type(bb))hex_1 = int(bb[0])*16hex_2 = int(bb[1],16)return hex_1+hex_2def send_data(x,y,w,h,msg):start = 0x24end = 0x23length = 5class_num = 0x0B #例程编号class_group = 0xBB #例程组data_num = 0x00 #数据量fenge = 0x2c #逗号crc = 0 #校验位data = [] #数据组#参数都为0if x==0 and y==0 and w==0 and h ==0:passelse:#x(小端模式)low = x & 0xFF #低位high = x >> 8& 0xFF #高位data.append(low)data.append(fenge) #增加","data.append(high)data.append(fenge) #增加","#y(小端模式)low = y & 0xFF #低位high = y >> 8& 0xFF #高位data.append(low)data.append(fenge) #增加","data.append(high)data.append(fenge) #增加","#w(小端模式)low = w & 0xFF #低位high = w >> 8& 0xFF #高位data.append(low)data.append(fenge) #增加","data.append(high)data.append(fenge) #增加","#h(小端模式)low = h & 0xFF #低位high = h >> 8& 0xFF #高位data.append(low)data.append(fenge) #增加","data.append(high)data.append(fenge) #增加","if msg !=None:#msgfor i in range(len(msg)):hec = str_int(msg[i])data.append(hec)data.append(fenge) #增加","#print(data)data_num = len(data)length += len(data)#print(length)send_merr = [length,class_num,class_group,data_num]for i in range(data_num):send_merr.append(data[i])#print(send_merr)#不加上CRC位,进行CRC运算for i in range(len(send_merr)):crc +=send_merr[i]crc = crc%256send_merr.insert(0,start) #插入头部send_merr.append(crc)send_merr.append(end)#print(send_merr)global send_bufsend_buf = send_merrsend_buf = []
#x_ = 0
#y_ = 0
#w_ = 0
#h_ = 0
msg_ = ""lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.skip_frames(time = 100)
clock = time.clock()kpu = KPU()
kpu.load_kmodel("/sd/KPU/mnist/uint8_mnist_cnn_model.kmodel")while True:gc.collect()img = sensor.snapshot()img_mnist1=img.to_grayscale(1)img_mnist2=img_mnist1.resize(112,112)img_mnist2.invert()img_mnist2.strech_char(1)img_mnist2.pix_to_ai()out = kpu.run_with_output(img_mnist2, getlist=True)max_mnist = max(out)index_mnist = out.index(max_mnist)msg_ = str(index_mnist)send_data(0,0,0,0,msg_)#封装serial.send_bytearray(send_buf)#发送score = KPU.sigmoid(max_mnist)if index_mnist == 1:if score > 0.999:display_str = "num: %d" % index_mnistprint(display_str, score)img.draw_string(4,3,display_str,color=(0,0,0),scale=2)elif index_mnist == 5:if score > 0.999:display_str = "num: %d" % index_mnistprint(display_str, score)img.draw_string(4,3,display_str,color=(0,0,0),scale=2)else:display_str = "num: %d" % index_mnistprint(display_str, score)img.draw_string(4,3,display_str,color=(0,0,0),scale=2)lcd.display(img)kpu.deinit()

STM32部分代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"#include "bsp_usart.h"
#include "K210_use.h" 
#include "OLED.h"char buff_com[50];
msg_k210 k210_msg;
u8 num;int main()
{SystemInit();OLED_Init();OLED_ShowString(1, 1, "STM32_k210number");USART2_init(115200);while(1){if (k210_msg.class_n != 0){if(k210_msg.class_n == 11){sprintf(buff_com,"id = %c\r\n",k210_msg.id);USART2_Send_ArrayU8((uint8_t*)buff_com,strlen(buff_com));num = k210_msg.id-48;k210_msg.class_n = 0;	}	}OLED_ShowString(2, 1, "k210_msg.id:");OLED_ShowNum(2, 13, k210_msg.id, 4);OLED_ShowString(3, 5, "NUM:");OLED_ShowNum(3, 12, num, 2);}
}

完整代码链接:

这篇关于STM32+亚博K210手写数字识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816146

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人