当前位置: 首页 > 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.rkmt.cn/news/49472.html

相关文章:

  • CATIA 转换为 3DXML 全流程:迪威模型网在线转换和本地方转换方法指南 - 指南
  • Gitee Team:国产软件研发智能化转型的破局者
  • OIFC 2025.11.14 模拟赛总结
  • 免密登录
  • 2025上海留学中介机构出国留学排名前三
  • antd form.item内部的value会生效吗
  • Visual Studio 2026 正式版发布 - 适用于 Windows 上 .NET 和 C++ 开发人员的最全面 IDE
  • 基于Session和Redis实现短信验证码登录 - 教程
  • 软件测试基础理论
  • 2025 年 11 月液压扳手厂家推荐排行榜,拉伸器,中空扳手,液压扭矩扳手,液压螺栓拉伸器公司推荐
  • 数字通信 锁相环
  • 2025年GEO搜索优化服务商最新专业评测top5:源码搭建重构AI流量入口新生态
  • 完整教程:毕设项目基于python的旅游文化推广管理系统\251019(白嫖源码+演示录像)可做计算机毕设JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、文案
  • 2025年石棉橡胶板厂家联系方式推荐:质量认证齐全厂商盘点
  • C++STL_1
  • 2025年11月天津电商财税公司排名:五强口碑与能力综合评测
  • 11.14 完成项目计划管理系统(idea中使用Mysql(9.4)Tomcat(11)jdk(21.0.8)) - GENGAR
  • 2025年知名的工程级液压浴室夹厂家最新实力排行
  • 2025年口碑好的电视柜缓冲铰链高评价厂家推荐榜
  • 2025年口碑好的双螺杆清洗料厂家最新推荐排行榜
  • 2025年比较好的高端定制生态板最新TOP厂家排名
  • 2025年广东AI交互一体机最新评测:迎宾、指引、企业宣传,全搞定
  • 2025年质量好的虾仁优质厂家推荐榜单
  • 2025年知名的帽子激光打孔机厂家推荐及采购指南
  • 2025年靠谱的白刚玉厂家最新TOP排行榜
  • 2025年热门的婚礼激光灯厂家最新TOP实力排行
  • MySQL——桥梁JDBC - 指南
  • 2025年知名的印花金钻绒厂家选购指南与推荐
  • 2025年智能体平台供应商最新top5推荐:智能体集成,企业提效工具;广东智慧兆能深耕广东,服务全国。
  • 2025年评价高的西安工商业低温储能电池厂家推荐及选购参考榜