利用paddle的识别模型识别图片内容(chinese_text_detection_db_server)

配置环境

conda create -n ocr python=3.8
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install paddlehub -i https://mirror.baidu.com/pypi/simple

两种使用方法

直接使用(1)

"""可选参数
    paths (list[str]): 图片的路径;
    images (list[numpy.ndarray]): 图片数据,ndarray.shape 为 [H, W, C],BGR格式;
    use_gpu (bool): 是否使用 GPU;若使用GPU,请先设置CUDA_VISIBLE_DEVICES环境变量
    box_thresh (float): 检测文本框置信度的阈值;
    visualization (bool): 是否将识别结果保存为图片文件;
    output_dir (str): 图片的保存路径,默认设为 detection_result;
"""
""" return
    res (list[dict]): 识别结果的列表,列表中每一个元素为 dict,各字段为:
    data (list): 检测文本框结果,文本框在原图中的像素坐标,4*2的矩阵,依次表示文本框左上,右上,右下,左下顶点的坐标
    save_path (str): 识别结果的保存路径, 如不保存图片则save_path为''
"""
import paddlehub as hub
import cv2
image_path =""
text_detector = hub.Module(name="chinese_text_detection_db_server")
result = text_detector.detect_text(images=[cv2.imread(image_path)])
# or
# result =text_detector.detect_text(paths=[image_path])
print(result)

部署服务器(2)

# 终端输入
hub serving start -m chinese_text_detection_db_server
发送请求
import requests
import json
import cv2
import base64

def cv2_to_base64(image):
    data = cv2.imencode('.jpg', image)[1]
    return base64.b64encode(data.tostring()).decode('utf8')

# 发送HTTP请求
data = {'images':[cv2_to_base64(cv2.imread("/PATH/TO/IMAGE"))]}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/chinese_text_detection_db_server"
r = requests.post(url=url, headers=headers, data=json.dumps(data))

# 打印预测结果
print(r.json()["results"])

更多模型

更多模型可在官网查看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个利用 VGG 模型解决手写数字识别Paddle 代码示例: ```python import paddle import paddle.nn as nn class VGGBlock(nn.Layer): def __init__(self, in_channels, out_channels, num_convs): super(VGGBlock, self).__init__() self.conv1 = nn.Conv2D(in_channels, out_channels, kernel_size=3, padding=1) self.relu = nn.ReLU() self.convs = nn.Sequential() for i in range(num_convs - 1): conv_name = 'conv{}'.format(i + 2) setattr(self.convs, conv_name, nn.Conv2D(out_channels, out_channels, kernel_size=3, padding=1)) self.pool = nn.MaxPool2D(kernel_size=2, stride=2) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.convs(x) x = self.pool(x) return x class VGGNet(nn.Layer): def __init__(self): super(VGGNet, self).__init__() self.block1 = VGGBlock(in_channels=1, out_channels=64, num_convs=2) self.block2 = VGGBlock(in_channels=64, out_channels=128, num_convs=2) self.block3 = VGGBlock(in_channels=128, out_channels=256, num_convs=3) self.block4 = VGGBlock(in_channels=256, out_channels=512, num_convs=3) self.block5 = VGGBlock(in_channels=512, out_channels=512, num_convs=3) self.flatten = nn.Flatten() self.fc1 = nn.Linear(in_features=512*7*7, out_features=4096) self.fc2 = nn.Linear(in_features=4096, out_features=4096) self.fc3 = nn.Linear(in_features=4096, out_features=10) def forward(self, x): x = self.block1(x) x = self.block2(x) x = self.block3(x) x = self.block4(x) x = self.block5(x) x = self.flatten(x) x = self.fc1(x) x = self.fc2(x) x = self.fc3(x) return x # 加载数据集 train_dataset = paddle.vision.datasets.MNIST(mode='train') test_dataset = paddle.vision.datasets.MNIST(mode='test') # 定义数据预处理函数 transform = paddle.vision.transforms.Compose([ paddle.vision.transforms.Resize((32, 32)), paddle.vision.transforms.ToTensor(), paddle.vision.transforms.Normalize([0.5], [0.5]) ]) # 定义数据加载器 train_loader = paddle.io.DataLoader(train_dataset.transform(transform), batch_size=64, shuffle=True) test_loader = paddle.io.DataLoader(test_dataset.transform(transform), batch_size=64, shuffle=False) # 定义模型、优化器和损失函数 model = VGGNet() optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()) criterion = nn.CrossEntropyLoss() # 训练模型 epochs = 10 for epoch in range(epochs): for batch_id, data in enumerate(train_loader()): x_data = data[0] y_data = paddle.to_tensor(data[1]) logits = model(x_data) loss = criterion(logits, y_data) loss.backward() optimizer.step() optimizer.clear_grad() if batch_id % 100 == 0: print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy())) # 评估模型 model.eval() accs = [] for batch_id, data in enumerate(test_loader()): x_data = data[0] y_data = paddle.to_tensor(data[1]) logits = model(x_data) pred = paddle.argmax(logits, axis=-1).numpy() acc = np.mean((pred == y_data.numpy()).astype(np.float32)) accs.append(acc) print("accuracy: ", np.mean(accs)) ``` 这份代码使用了 VGGNet 作为模型,并使用了 MNIST 数据集进行训练和测试。在训练过程中,采用了 Adam 优化器和交叉熵损失函数,训练了 10 个 epoch,最终在测试集上达到了较好的准确率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值