python文字识别框架_GitHub - CodeREWorld/CV-OCR: 基于tensorflow、keras/pytorch框架实现图片文字检测及端到端的OCR文字识别...

基于tensorflow、keras/pytorch实现对图片文字检测及端到端的OCR文字识别

实现功能

文字方向检测 0、90、180、270度检测

文字检测 后期将切换到keras版本文本检测 实现keras端到端的文本检测及识别

不定长OCR识别

环境部署

Bash

##GPU环境

sh setup.sh

##CPU环境

sh setup-cpu.sh

##CPU python3环境

sh setup-python3.sh

使用环境:python3.6+tensorflow1.7+cpu/gpu

模型训练

一共分为3个网络

1. 文本方向检测网络-Classify(vgg16)

2. 文本区域检测网络-CTPN(CNN+RNN)

3. EndToEnd文本识别网络-CRNN(CNN+GRU/LSTM+CTC)

文字方向检测-vgg分类

基于图像分类,在VGG16模型的基础上,训练0、90、180、270度检测的分类模型.

详细代码参考angle/predict.py文件,训练图片8000张,准确率88.23%

文字区域检测CTPN

支持CPU、GPU环境,一键部署,

文本检测训练参考

OCR 端到端识别:CRNN

ocr识别采用GRU+CTC端到端识别技术,实现不分隔识别不定长文字

提供keras 与pytorch版本的训练代码,在理解keras的基础上,可以切换到pytorch版本,此版本更稳定

训练网络

1 对ctpn进行训练

定位到路径--./ctpn/ctpn/train_net.py

预训练的vgg网络路径VGG_imagenet.npy

将预训练权重下载下来,pretrained_model指向该路径即可,

此外整个模型的预训练权重checkpoint

ctpn数据集百度云

数据集下载完成并解压后,将.ctpn/lib/datasets/pascal_voc.py 文件中的pascal_voc 类中的参数self.devkit_path指向数据集的路径即可

2 对crnn进行训练

keras版本 ./train/keras_train/train_batch.py model_path--指向预训练权重位置

MODEL_PATH---指向模型训练保存的位置

keras模型预训练权重

pythorch版本./train/pytorch-train/crnn_main.py

parser.add_argument(

'--crnn',

help="path to crnn (to continue training)",

default=预训练权重的路径)

parser.add_argument(

'--experiment',

help='Where to store samples and models',

default=模型训练的权重保存位置)

识别结果显示

文字检测及OCR识别结果

===========================================================

===========================================================

在思乐中的运用

从主播的直播间评论区可获得新进入直播间粉丝信息,以及直播间粉丝实时评论,

在无法获取直播平台数据时,通过CV可提取到需要的用户行为数据,用于用户价值的实时精准分级。

参考

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你回答这个问题。以下是用Python编写LSTM模型并使用PyTorch在MNIST数据集上完成手写字符识别的代码示例: ``` import torch from torch import nn from torch import optim from torch.autograd import Variable from torch.utils.data import DataLoader from torchvision import datasets, transforms # 定义数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) # 加载MNIST数据集 train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True) test_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True) # 定义模型 class LSTMModel(nn.Module): def __init__(self): super(LSTMModel, self).__init__() self.lstm = nn.LSTM(28, 64, 2, batch_first=True) self.fc = nn.Linear(64, 10) def forward(self, x): out, _ = self.lstm(x) out = self.fc(out[:, -1, :]) return out model = LSTMModel() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.01) # 定义训练函数 def train(model, train_dataloader, optimizer, criterion): model.train() for i, data in enumerate(train_dataloader): x, y = data x, y = Variable(x), Variable(y) optimizer.zero_grad() output = model(x) loss = criterion(output, y) loss.backward() optimizer.step() # 定义测试函数 def test(model, test_dataloader, criterion): model.eval() total_loss = 0.0 correct = 0 for i, data in enumerate(test_dataloader): x, y = data x, y = Variable(x), Variable(y) output = model(x) loss = criterion(output, y) total_loss += loss.data[0] _, predicted = torch.max(output.data, 1) correct += (predicted == y.data).sum() avg_loss = total_loss / len(test_dataset) accuracy = float(correct) / len(test_dataset) return avg_loss, accuracy # 开始训练模型 train_dataloader = DataLoader(train_dataset, batch_size=64, shuffle=True) test_dataloader = DataLoader(test_dataset, batch_size=64, shuffle=False) for epoch in range(10): train(model, train_dataloader, optimizer, criterion) avg_loss, accuracy = test(model, test_dataloader, criterion) print('Epoch [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%'.format(epoch+1, 10, avg_loss, accuracy*100)) ``` 这个代码会输出每个epoch的平均损失和准确率。你可以根据需要修改代码中的一些参数,如学习率,训练轮数等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值