尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

用Python实现数字识别的简单AI应用
📅 发布时间:2026/6/19 5:10:32

今天分享一个用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了!

相关新闻

  • CATIA 转换为 3DXML 全流程:迪威模型网在线转换和本地方转换方法指南 - 指南
  • Gitee Team:国产软件研发智能化转型的破局者
  • OIFC 2025.11.14 模拟赛总结

最新新闻

  • 深度解析银狐木马攻击链:从社工投递到白利用的防御实战
  • 高速MOSFET驱动器MCP14E9选型、设计与调试全解析
  • Claude Opus 4.7模型幻觉实测:指令遵循退化与事实锚定危机
  • 【FDTD+UPML+全场/散射场】具有TF/SF接口和UPML吸收边界的2D FDTD研究(Matlab代码实现)
  • RayScan开箱即用的 Web 漏洞扫描器 | SQL注入 / XSS / 命令注入 / LFI / SSRF / XXE / RCE / API安全
  • Java安全随机数生成:从Random到SecureRandom的实战指南

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号