手写汉字识别准确率

news/2025/11/12 12:57:30/文章来源:https://www.cnblogs.com/magixx/p/19213539

import os
import random
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

解决OMP冲突

os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
device = torch.device('cpu')

配置参数

CHARS = ['一', '二', '三', '十', '人', '口', '手', '日', '月', '水']
TRAIN_NUM = 200
TEST_NUM = 50
IMG_SIZE = 64
DATA_SAVE_DIR = 'hanzi_data'
BATCH_SIZE = 32
EPOCHS = 30
LEARNING_RATE = 0.005

class HanziDatasetGenerator:
def init(self):
# 不依赖系统字体,使用PIL的默认字体+手动调整位置确保汉字显示
self.font = ImageFont.load_default()
print("提示:使用默认字体生成汉字(可能显示较简单,但能保证运行)")

# 【修复1】补全self参数
def _generate_single_img(self, char):"""生成简单但可区分的汉字图像"""img = Image.new('L', (IMG_SIZE, IMG_SIZE), color=255)  # 白底draw = ImageDraw.Draw(img)# 针对默认字体调整位置(确保汉字完整显示)char_offsets = {'一': (5, 25), '二': (5, 15), '三': (5, 10),'十': (20, 15), '人': (10, 20), '口': (15, 15),'手': (5, 10), '日': (15, 15), '月': (10, 15), '水': (5, 10)}x, y = char_offsets[char]# 固定较大字体尺寸,确保笔画清晰font_size = 40try:# 再次尝试系统字体,失败则用默认font = ImageFont.truetype('simsun.ttc', size=font_size)  # 尝试宋体draw.text((x, y), char, font=font, fill=0, stroke_width=2)except:# 用默认字体,手动加粗笔画确保可区分draw.text((x, y), char, font=self.font, fill=0, stroke_width=3)# 二次绘制增强笔画(避免默认字体太细)draw.text((x + 1, y), char, font=self.font, fill=0, stroke_width=2)# 轻微旋转增加差异rotation = random.randint(-10, 10)img = img.rotate(rotation, expand=False, fillcolor=255)return img# 【修复2】补全self参数
def generate_dataset(self):"""生成数据集目录和图片"""if os.path.exists(DATA_SAVE_DIR):for root, dirs, files in os.walk(DATA_SAVE_DIR, topdown=False):for f in files:os.remove(os.path.join(root, f))for d in dirs:os.rmdir(os.path.join(root, d))os.rmdir(DATA_SAVE_DIR)# 创建目录for split in ['train', 'test']:for char in CHARS:os.makedirs(os.path.join(DATA_SAVE_DIR, split, char), exist_ok=True)# 生成样本print("生成数据集...")for char in CHARS:for i in range(TRAIN_NUM):img = self._generate_single_img(char)img.save(os.path.join(DATA_SAVE_DIR, 'train', char, f'{i}.png'))for i in range(TEST_NUM):img = self._generate_single_img(char)img.save(os.path.join(DATA_SAVE_DIR, 'test', char, f'{i}.png'))print(f"数据集生成完成:{os.path.abspath(DATA_SAVE_DIR)}")

class HanziDataset(Dataset):
# 【修复3】补全__init__双下划线和self参数
def init(self, split='train'):
self.split = split
self.data_dir = os.path.join(DATA_SAVE_DIR, split)
self.char_list = CHARS
self.char2idx = {c: i for i, c in enumerate(self.char_list)}
self.images, self.labels = self._load_data()
self.transform = transforms.ToTensor()

# 【修复4】补全self参数
def _load_data(self):images = []labels = []for char in self.char_list:char_dir = os.path.join(self.data_dir, char)for img_name in os.listdir(char_dir):images.append(os.path.join(char_dir, img_name))labels.append(self.char2idx[char])return images, labelsdef __len__(self):return len(self.images)def __getitem__(self, idx):img = Image.open(self.images[idx]).convert('L')return self.transform(img), self.labels[idx]

class FeatureCNN(nn.Module):
# 【修复5】补全__init__双下划线和self参数;修正Sequential缩进
def init(self, num_classes=10):
super(FeatureCNN, self).init() # 【修复6】补全super()调用格式
self.features = nn.Sequential(
nn.Conv2d(1, 8, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2, 2), # 64→32
nn.Conv2d(8, 16, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2, 2) # 32→16
)
self.classifier = nn.Linear(16 * 16 * 16, num_classes) # 【修复7】修正缩进

# 【修复8】补全self参数
def forward(self, x):x = self.features(x)x = x.view(-1, 16 * 16 * 16)x = self.classifier(x)return x

def main():
# 生成数据集(关键:即使没有中文字体也能生成可区分的图像)
generator = HanziDatasetGenerator()
generator.generate_dataset()

# 加载数据(【修复9】修正缩进)
train_dataset = HanziDataset('train')
test_dataset = HanziDataset('test')
train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=0)
test_loader = DataLoader(test_dataset, batch_size=BATCH_SIZE, shuffle=False, num_workers=0)# 模型与优化器
model = FeatureCNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)# 训练
print("\n开始训练...")
best_acc = 0.0
for epoch in range(EPOCHS):model.train()total_loss = 0.0for imgs, labels in train_loader:imgs, labels = imgs.to(device), labels.to(device)optimizer.zero_grad()outputs = model(imgs)loss = criterion(outputs, labels)loss.backward()optimizer.step()total_loss += loss.item() * imgs.size(0)avg_loss = total_loss / len(train_dataset)# 测试model.eval()correct = 0total = 0with torch.no_grad():for imgs, labels in test_loader:imgs, labels = imgs.to(device), labels.to(device)outputs = model(imgs)_, preds = torch.max(outputs, 1)total += labels.size(0)correct += (preds == labels).sum().item()acc = 100 * correct / totalprint(f"轮次{epoch + 1:2d} | 损失:{avg_loss:.4f} | 准确率:{acc:.2f}%")if acc > best_acc:best_acc = acctorch.save(model.state_dict(), 'best_model.pth')if acc >= 85:print(f"达标!准确率:{acc:.2f}%")break# 识别
model.load_state_dict(torch.load('best_model.pth'))
print(f"\n最优准确率:{best_acc:.2f}%")while True:path = input("\n输入图片路径(q退出):")if path.lower() == 'q':breakif not os.path.exists(path):print("路径错误")continuetry:img = Image.open(path).convert('L').resize((64, 64))img_tensor = transforms.ToTensor()(img).unsqueeze(0).to(device)with torch.no_grad():output = model(img_tensor)pred_char = CHARS[torch.argmax(output).item()]confidence = torch.softmax(output, dim=1).max().item() * 100print(f"识别结果:{pred_char} | 可信度:{confidence:.2f}%")except Exception as e:print(f"错误:{e}")

if name == "main":
main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年有实力自建房家用电梯厂家最新TOP排行榜

2025年有实力自建房家用电梯厂家最新TOP排行榜行业背景与市场趋势随着我国城镇化进程加快和居民生活水平提高,家用电梯市场迎来了快速发展期。据中国电梯行业协会最新数据显示,2024年中国家用电梯市场规模已突破150亿…

2025年诺士诚公司:全过程工程咨询资质全景深度解析

引言 本文聚焦“全过程工程咨询资质”这一核心维度,为读者提供一份可对照、可验证的客观参考,帮助判断诺士诚公司在复杂工程场景下的真实服务能力与合规边界。 背景与概况 北京诺士诚国际工程项目管理有限公司成立于…

2025年专业的亚克力制品行业内知名厂家排行榜

2025年专业的亚克力制品行业内知名厂家排行榜行业背景与市场趋势亚克力制品行业作为现代展示道具和商业空间设计的重要组成部分,近年来呈现出稳定增长态势。根据中国塑料加工工业协会最新发布的《2024-2025中国塑料制…

详细介绍:Zephyr RTOS在智能家居中的应用:智能插座开发

详细介绍:Zephyr RTOS在智能家居中的应用:智能插座开发2025-11-12 12:50 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

2025年口碑好的免拉手封边条厂家推荐及选购参考榜

2025年口碑好的免拉手封边条厂家推荐及选购参考榜行业背景与市场趋势随着定制家具行业的蓬勃发展,封边条作为家具制造中不可或缺的辅料,其市场需求呈现稳定增长态势。据中国家具协会2024年发布的行业报告显示,2023年…

2025年11月北京昌平回龙观酒店推荐榜:会议婚宴与运动配套对比榜

回龙观位于北京昌平南部,地铁八号线与十三号线交汇,互联网企业密集,周末家庭客流与工作日商务客流叠加,酒店需求呈现“双高峰”特征:周一到周四以培训、会议、差旅为主,周五到周日则以婚宴、亲子、研学团队为主。…

2025年可靠的全屋定制厂家最新热销排行

2025年可靠的全屋定制厂家最新热销排行:数据化解析与采购指南 行业背景与市场趋势 近年来,全屋定制行业持续高速增长。据《中国家居建材行业白皮书(2025)》数据显示,2024年全屋定制市场规模已突破6000亿元,年…

2025年质量好的水泥毯厂家推荐及选购参考榜

2025年质量好的水泥毯厂家推荐及选购参考榜行业背景与市场趋势水泥毯作为一种新型复合材料,近年来在土木工程、水利建设、应急抢险等领域展现出显著优势。根据中国建筑材料联合会2024年发布的行业报告显示,全球水泥毯…

2025年评价高的短视频运营最新TOP厂家排名

2025年评价高的短视频运营最新TOP厂家排名行业背景与市场趋势随着5G技术的全面普及和移动互联网的深入发展,短视频行业在2025年迎来了新一轮爆发式增长。据《2025中国短视频行业发展白皮书》显示,中国短视频用户规模…

2025年专业的钢板预处理线优质厂家推荐榜单

2025年专业钢板预处理线优质厂家推荐榜单:技术与服务并重的行业标杆钢板预处理线行业背景与市场趋势钢板预处理是金属加工领域的关键环节,其质量直接影响后续涂装、焊接等工艺的最终效果。随着中国制造业向高质量发展…

2025年质量好的废气处理风机热门厂家推荐榜单

2025年质量好的废气处理风机热门厂家推荐榜单 行业背景与市场趋势 随着环保政策的日益严格和工业废气排放标准的不断提高,废气处理风机作为环保设备的核心部件,市场需求持续增长。据《2024年中国环保设备行业分析报…

2025年靠谱的抗病毒防火板高评价厂家推荐榜

2025年靠谱的抗病毒防火板高评价厂家推荐榜行业背景与市场趋势近年来,随着全球公共卫生意识的提升和建筑安全法规的日益严格,抗病毒防火板市场需求呈现爆发式增长。据《2024-2029年中国防火板材行业市场调研与投资前…

2025年专业的肌理板压花机厂家推荐及选购参考榜

2025年专业的肌理板压花机厂家推荐及选购参考榜行业背景与市场趋势肌理板压花机作为现代装饰材料生产的关键设备,近年来随着建筑装饰行业的蓬勃发展而需求激增。根据中国建材机械工业协会最新发布的《2024-2025年中国…

2025年专业的负氧离子床垫厂家最新TOP排行榜

2025年专业的负氧离子床垫厂家最新TOP排行榜行业背景与市场趋势随着健康睡眠理念的普及和消费者对生活品质要求的提升,负氧离子床垫市场近年来呈现爆发式增长。据《2024-2025年中国健康睡眠产业白皮书》显示,2024年全…

2025年昆明泌尿生殖专科医院权威深度解析:专业诊疗体系与惠民服务全透视

引言:本文聚焦“诊疗技术与服务流程”维度,结合官方披露信息、行业监管公报与第三方患者体验报告,为需要泌尿生殖专科干预的公众提供一份可对照、可验证的客观参考。 背景与概况:昆明泌尿生殖专科医院位于昆明市北…

2025年专业的注塑挤出机螺杆TOP品牌厂家排行榜

2025年专业的注塑挤出机螺杆TOP品牌厂家排行榜行业背景与市场趋势塑料加工行业作为现代制造业的重要组成部分,近年来保持着稳健的增长态势。根据中国塑料机械工业协会最新数据显示,2024年全球塑料机械市场规模已达到…

2025年正规的烤漆龙骨厂家最新权威推荐排行榜

2025年正规的烤漆龙骨厂家最新权威推荐排行榜行业背景与市场趋势烤漆龙骨作为现代建筑装饰的重要材料,近年来随着全球建筑业的持续发展而保持稳定增长。根据中国建筑材料联合会最新发布的《2024-2025年中国建筑装饰材…

2025年知名的F30喷涂四氟TOP品牌厂家排行榜

2025年知名的F30喷涂四氟TOP品牌厂家排行榜行业背景与市场趋势随着我国化工、石油、电力、半导体等高端制造业的快速发展,对设备防腐性能的要求日益提高。F30喷涂四氟作为一种高性能防腐材料,因其优异的耐腐蚀性、耐…

2025年评价高的PPH储罐优质厂家推荐榜单

2025年评价高的PPH储罐优质厂家推荐榜单行业背景与市场趋势随着化工、环保、水处理等行业的快速发展,PPH储罐作为重要的储存设备,市场需求持续增长。据中国复合材料工业协会最新数据显示,2024年我国PPH储罐市场规模…

【每日一面】装饰器原理

装饰器原理 基础问答 问:什么是装饰器?有什么作用? 答:装饰器是一种​元编程语法,可以在不修改原有代码的前提下,动态地为类、方法、属性等添加一些能力,本质上还是一个函数,它接收目标对象、属性名、属性描述…