当前位置: 首页 > news >正文

用Python实现数字识别的简单AI应用

今天分享一个用Python写了一个能识别图片里文字的AI!不用任何现成的大模型,就靠最基础的代码。

这个简单的AI能做什么?

简单的说就是你画了一个简单的数字“8”,这个AI就能认出它是8!虽然它现在只能认0-9这10个数字,但这就是真正AI识别的原理。

第一步:准备“训练教材”

import numpy as np
import matplotlib.pyplot as plt# 我们自己来造一些“手写数字”
def create_number_data():# 数字0的模板zero = np.array([[0, 1, 1, 0],[1, 0, 0, 1],[1, 0, 0, 1],[0, 1, 1, 0]])# 数字1的模板  one = np.array([[0, 0, 1, 0],[0, 1, 1, 0],[0, 0, 1, 0],[0, 0, 1, 0]])# 数字2的模板two = np.array([[0, 1, 1, 0],[0, 0, 0, 1],[0, 1, 1, 0],[1, 1, 1, 1]])data = []labels = []templates = [zero, one, two]# 给每个数字造50个稍微不一样的版本for number, template in enumerate(templates):for i in range(50):# 加入一点点随机变化,就像不同人写的字noisy_template = template + np.random.normal(0, 0.2, (4, 4))data.append(noisy_template.flatten())  # 把4x4变成16个数字的一行labels.append(number)return np.array(data), np.array(labels)print("正在制作训练数据...")
X_train, y_train = create_number_data()
print(f"制作了 {len(X_train)} 个手写数字样本")

第二步:建造AI的“大脑”

class MyFirstOCR:def __init__(self):# 随机初始化权重 - 就像给AI一个空白的脑子self.weights = np.random.randn(16, 3) * 0.1  # 16个输入,3个输出(0,1,2)self.bias = np.zeros(3)def softmax(self, x):# 把输出变成概率,比如[0.1, 0.8, 0.1]表示80%可能是数字1exp_x = np.exp(x - np.max(x))  # 防止数值过大return exp_x / np.sum(exp_x)def forward(self, x):# AI的思考过程:输入 → 计算 → 输出概率z = np.dot(x, self.weights) + self.biasreturn self.softmax(z)def train(self, X, y, learning_rate=0.1, epochs=1000):print("开始教AI认数字...")for epoch in range(epochs):total_loss = 0for i in range(len(X)):# 取一个训练样本x_i = X[i]y_i = y[i]# 前向传播:AI猜答案prediction = self.forward(x_i)# 计算误差:AI知道自己错多少true_label = np.zeros(3)true_label[y_i] = 1  # 变成[1,0,0]这样的形式loss = -np.log(prediction[y_i] + 1e-8)  # 交叉熵损失total_loss += loss# 反向传播:AI从错误中学习error = prediction - true_labeldw = np.outer(x_i, error)db = error# 更新权重:调整AI的“知识”self.weights -= learning_rate * dwself.bias -= learning_rate * dbif epoch % 200 == 0:print(f"训练轮次 {epoch}, 平均误差: {total_loss/len(X):.4f}")def predict(self, x):# 用训练好的AI预测数字probabilities = self.forward(x)return np.argmax(probabilities)  # 返回概率最大的那个数字# 创建我们的AI
print("创建AI大脑中...")
my_ocr_ai = MyFirstOCR()

第三步:训练AI

# 开始训练!
my_ocr_ai.train(X_train, y_train)print("训练完成!AI已经学会认数字了!")

第四步:测试我们的AI

# 让我们画个数字测试一下
def test_ai():# 画一个数字2test_digit = np.array([[0.1, 0.9, 0.8, 0.2],[0.0, 0.1, 0.0, 0.9],[0.2, 0.8, 0.9, 0.1],[0.9, 0.9, 0.8, 0.9]]).flatten()# 让AI识别prediction = my_ocr_ai.predict(test_digit)confidence = np.max(my_ocr_ai.forward(test_digit))print(f"AI识别结果:数字 {prediction}")print(f"置信度:{confidence*100:.2f}%")# 显示我们画的数字plt.imshow(test_digit.reshape(4, 4), cmap='gray')plt.title(f"AI识别为: 数字 {prediction}")plt.show()# 测试!
test_ai()

它是怎么“思考”的?

  1. 看图片:把4x4的图片变成16个数字
  2. 计算特征:用权重计算每个数字的可能性
  3. 做决定:选择可能性最大的那个数字

从这个案例中我们学到了

  • AI不神秘:就是权重 + 计算 + 学习
  • 训练是关键:就像教小孩,要反复练习
  • 从简单开始:先学会认0-9,后面就能认更多

这个AI虽然简单,但原理和那些复杂的图像识别系统是一样的!

你运行这段代码,然后自己尝试一下,就拥有自己的第一个图片识别AI了!

http://www.jsqmd.com/news/40242/

相关文章:

  • 是的
  • Gitee Team:国产软件研发智能化转型的破局者
  • 手把手教你部署智能合约 - all-in
  • 2025年泳池篷房实力厂家权威推荐榜单:篮球训练篷房/篮球场篷房/游泳馆篷房源头厂家精选
  • 免密登录
  • 什么是CRM系统:CRM系统定义、功能与2025年9款最佳CRM系统推荐
  • 2025上海留学中介机构出国留学排名前三
  • 2025年轴承钢砂批发厂家权威推荐榜单:合金钢砂/钢砂/钢砂价格源头厂家精选
  • antd form.item内部的value会生效吗
  • Proxmox VE9.0优化-删除订阅窗
  • Springboot病人跟踪治疗信息管理系统e40z6(程序+源码+数据库+调试部署+创建环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Visual Studio 2026 正式版发布 - 适用于 Windows 上 .NET 和 C++ 开发人员的最全面 IDE
  • Burp Suite Professional 2025.11 发布,新增功能简介
  • 数据库主备与MHA架构对比
  • Proxmox VE9.0优化-换源
  • 基于Session和Redis实现短信验证码登录 - 教程
  • 深入解析:高可用架构实战:SpringBoot+MongoDB构建AI原生应用
  • 代涂高者——《机器学习》总结笔记
  • 2025年五个女博士品牌可信度分析:深度拆解科研底色与市场真实反馈
  • 2025年五个女博士品牌可信度分析:深度拆解科研数据与真实市场反馈
  • SonarQube Scanner CLI 下载踩坑记
  • 力扣 第 169 场双周赛(A~D)
  • 软件测试基础理论
  • 用 CloudFront + Lambda@Edge 实现“可回滚、可观测”的灰度发布
  • 2025年北京搬家公司联系电话推荐:吉时达搬家准时守约口碑佳
  • 如何查看Windows快捷键被占用
  • 2025年企业人工智能解决方案最新top5推荐:智能体平台全场景覆盖,助力企业数字化转型
  • 领嵌iLeadE-588边缘计算网关设备支持4路摄像头4路网口连接云平台
  • 【完结10章】n8n+AI工作流:从入门到企业级AI应用实战
  • 2025企业数字人展厅企业TOP5推荐:从技术落地到场景价值的实力标杆