PaddleOCR学习笔记2-初步识别服务

这篇具有很好参考价值的文章主要介绍了PaddleOCR学习笔记2-初步识别服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天初步实现了网页,上传图片,识别显示结果到页面的服务。后续再完善。

采用flask + paddleocr+ bootstrap快速搭建OCR识别服务。

代码结构如下:

PaddleOCR学习笔记2-初步识别服务,OCR,python,ocr

模板页面代码文件如下:

upload.html :

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
    <title>PandaCodeOCR</title>
    <!--静态加载 样式-->
    <link rel="stylesheet" href={{ url_for('static',filename='bootstrap3/css/bootstrap.min.css') }}></link>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }
        .header {
            background-color: #f0f0f0;
            text-align: center;
            padding: 20px;
        }
        .title {
            font-size: 32px;
            margin-bottom: 10px;
        }

        .menu {
            list-style-type: none;
            margin: 0;
            padding: 0;
            overflow: hidden;
            background-color: #FFDEAD;
			border: 2px solid #DCDCDC;
        }

        .menu li {
            float: left;
			font-size: 24px;
        }

        .menu li a {
            display: block;
            color: #333;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none;
        }

        .menu li a:hover {
            background-color: #ddd;
        }

        .content {
            padding: 20px;
            border: 2px solid blue;
        }
    </style>
</head>
<body>
	<div class="header">
        <div class="title">PandaCodeOCR</div>
    </div>

	<ul class="menu">
        <li><a href="http://localhost:5000/uploader">通用文本识别</a></li>
    </ul>

    <div class="content">
        <!--上传图片文件-->
        <div id="upload_file">
            <form action="http://localhost:5000/uploader" method="POST" enctype="multipart/form-data">
                <div class="form-group">
                    <input type="file" class="form-control" id="upload_file" name="upload_file" placeholder="upload_file">
                </div>
                <div class="form-group">
                    <button type="submit" class="form-control btn-primary">上传图片文件</button>
                </div>
            </form>
        </div>
    </div>
</body>
</html>

result.html :

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
    <title>结果</title>
    <!--静态加载 样式-->
    <link rel="stylesheet" href={{ url_for('static',filename='bootstrap3/css/bootstrap.min.css') }}></link>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }
        .header {
            background-color: #f0f0f0;
            text-align: center;
            padding: 20px;
        }
        .title {
            font-size: 32px;
            margin-bottom: 10px;
        }

        .menu {
            list-style-type: none;
            margin: 0;
            padding: 0;
            overflow: hidden;
            background-color: #FFDEAD;
			border: 2px solid #DCDCDC;
        }

        .menu li {
            float: left;
			font-size: 24px;
        }

        .menu li a {
            display: block;
            color: #333;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none;
        }

        .menu li a:hover {
            background-color: #ddd;
        }
    </style>
</head>
<body>
	<div class="header">
        <div class="title">PandaCodeOCR</div>
    </div>

	<ul class="menu">
        <li><a href="http://localhost:5000/uploader">通用文本识别</a></li>
    </ul>

    <div class="row">
            <!--显示上传的图片-->
            <div class="col-md-6" style="border: 2px solid #ddd;">
                <span class="label label-info">上传图片</span>
                <!--静态加载 图片-->
                <img src="{{ url_for('static', filename = result_dict['filename'])}}" alt="show_img"  class="img-responsive">
            </div>

            <div class="col-md-6" style="border: 2px solid #ddd;">
                <!--显示识别结果JSON报文列表-->
                <span class="label label-info">识别结果:</span>
                {% for line_str in result_dict['result'] %}
                    <p class="text-left">{{ line_str['text'] }}</p>
                {% endfor %}
            </div>
    </div>
</body>
</html>
<!--静态加载 script-->
<script src={{ url_for('static',filename='jquery1.3.3/jquery.min.js')}}></script>

 主要视图代码文件如下:

views.py :
import json
import os
import time

from . import blue_task
from flask import Flask, render_template, request

from paddleocr import PaddleOCR
from PIL import Image,ImageDraw
import numpy as np

'''
自定义模型测试ocr方法
'''


def test_model_ocr(img):
    # 返回字典结果对象
    result_dict = {'result': []}
    # paddleocr 目前支持的多语言语种可以通过修改lang参数进行切换
    # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
    # 使用CPU预加载,不用GPU
    # 模型路径下必须包含model和params文件,目前开源的v3版本模型 已经是识别率很高的了
    # 还要更好的就要自己训练模型了。
    ocr = PaddleOCR(det_model_dir='./inference/ch_PP-OCRv3_det_infer/',
                    rec_model_dir='./inference/ch_PP-OCRv3_rec_infer/',
                    cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/',
                    use_angle_cls=True, lang="ch", use_gpu=False)
    # 识别图片文件
    result0 = ocr.ocr(img, cls=True)
    result = result0[0]
    for index in range(len(result)):
        line = result[index]

        tmp_dict = {}
        points = line[0]
        text = line[1][0]
        score = line[1][1]
        tmp_dict['points'] = points
        tmp_dict['text'] = text
        tmp_dict['score'] = score

        result_dict['result'].append(tmp_dict)
    return result_dict

# 转换图片
def convert_image(image, threshold=None):
    # 阈值 控制二值化程度,不能超过256,[200, 256]
    # 适当调大阈值,可以提高文本识别率,经过测试有效。
    if threshold is None:
        threshold = 200
    print('threshold : ', threshold)
    # 首先进行图片灰度处理
    image = image.convert("L")
    pixels = image.load()
    # 在进行二值化
    for x in range(image.width):
        for y in range(image.height):
            if pixels[x, y] > threshold:
                pixels[x, y] = 255
            else:
                pixels[x, y] = 0
    return image

@blue_task.route('/upload')
def upload_file():
    return render_template('upload.html')

@blue_task.route('/uploader', methods=['GET', 'POST'])
def uploader():
    if request.method == 'POST':
        #每个上传的文件首先会保存在服务器上的临时位置,然后将其实际保存到它的最终位置。
        filedata = request.files['upload_file']
        upload_filename = filedata.filename
        print(upload_filename)
        #保存文件到指定路径
        #目标文件的名称可以是硬编码的,也可以从 ​request.files[file] ​对象的​ filename ​属性中获取。
        #但是,建议使用 ​secure_filename()​ 函数获取它的安全版本
        img_path = os.path.join('upload/', upload_filename)
        filedata.save(img_path)
        print('file uploaded successfully')

        start = time.time()

        print('=======开始OCR识别======')
        # 打开图片
        img1 = Image.open(img_path)
        # 转换图片, 识别图片文本
        # print('转换图片,阈值=220时,再转换为ndarray数组, 识别图片文本')
        # 转换图片
        img2 = convert_image(img1, 220)
        # Image图像转换为ndarray数组
        img_2 = np.array(img2)
        # 识别图片
        result_dict = test_model_ocr(img_2)

        # 识别时间
        end = time.time()
        recognize_time = int((end - start) * 1000)

        result_dict["filename"] = img_path
        result_dict["recognize_time"] = str(recognize_time)
        result_dict["error_code"] = "000000"
        result_dict["error_msg"] = "识别成功"

        # return json.dumps(result_dict, ensure_ascii=False), {'Content-Type': 'application/json'}
        # render_template方法:渲染模板
        # 参数1: 模板名称  参数n: 传到模板里的数据
        return render_template('result.html', result_dict=result_dict)
    else:
        return render_template('upload.html')

启动flask应用,测试结果如下:

PaddleOCR学习笔记2-初步识别服务,OCR,python,ocr

PaddleOCR学习笔记2-初步识别服务,OCR,python,ocr

PaddleOCR学习笔记2-初步识别服务,OCR,python,ocr文章来源地址https://www.toymoban.com/news/detail-702885.html

到了这里,关于PaddleOCR学习笔记2-初步识别服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PaddleOCR #PP-OCR常见异常扫雷

    实验案例: PaddleOCR #使用PaddleOCR进行光学字符识别(PP-OCR文本检测识别) 参考代码: 图片文本检测实验时,运行代码出现异常:ModuleNotFoundError: No module named ‘tools.infer’ 异常信息: 异常原因: 这是由于 python 本来有个 tools,和 paddleocr 内部的 tools 冲突导致。可能是 paddleo

    2024年02月15日
    浏览(27)
  • PaddleOCR Docker 容器快捷调用,快捷调用OCR API

    OCR可以用于清洗数据、文字识别,还是挺有用的,paddleOCR是一个开源的COR工具,效果还是不错的,现在paddleOCR迎来大更新,搞一把新的api接口,直接用起来。直接写调用代码去调用OCR即可,不用关心docker算法启动细节。 如果想直接执行OCR服务,请直接看最后一个章节,启动

    2024年01月16日
    浏览(33)
  • windows系统搭建OCR半自动标注工具PaddleOCR

    PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。 Windows和Mac用户推荐使用Anaconda搭建Python环境,Linux用户建议使用docker搭建Python环境。 已搭建过查看环境: 确认python的版本

    2024年04月17日
    浏览(29)
  • python之OCR文字识别

    将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。 easyocr是基于torch的深度学习模块 easyocr安装后调用过程中出现opencv版本不兼容问题,所以放弃此方案

    2024年02月20日
    浏览(29)
  • Python实现OCR文字识别

    OCR(Optical Character Recognition,光学字符识别)是指通过扫描纸质文档或照片,通过计算机对图像记录的文字进行识别的一种技术。本文介绍如何使用Python来实现OCR文字识别技术。 要实现Python的OCR文字识别,首先需要安装OCR软件和相关的包依赖,比如pytesseract和OpenCV。 安装pyt

    2024年02月16日
    浏览(30)
  • 【Python】【OpenCV】OCR识别(三)——字符识别

    通过上一篇博客,我们成功将有角度的图片进行“摆正”,接下来我们来提取图片中的文字。 我们使用Tesseract来处理图片并提取文字,相关下载安装请参考:Python下Tesseract Ocr引擎及安装介绍 - 黯然销魂掌2015 - 博客园 (cnblogs.com) 同时我们需要下载第三方Lib——pytesseract,使用

    2024年02月02日
    浏览(34)
  • 【Python】【OpenCV】OCR识别(一)

    接着练手图像处理例子   抛开网上截图进行OCR识别,更多的图源来自于我们的手机,相机等等设备,而得到的图片都并非是板正的,大多随手一拍的图源都是带有角度的,所以我们需要先将图像进行摆正。 首先先对图像进行预处理,上代码:         1、使用Canny来进行边缘

    2024年02月03日
    浏览(33)
  • OCR表格识别(三)——文本检测与文本识别理论学习

    图像识别其实是一个从低层次到高层级特征学习的过程。底层级的特征比较抽象,二高层及的特征比较概念化。在图像识别过程中,也就是从图像像素特征,到图像的形状、轮廓,然后到概念,并进行整合,分类,最终得到目标特征,识别到人脸等。再怎么复杂的信息都是由

    2024年02月05日
    浏览(39)
  • Python制作简易OCR文字识别系统

    前不久看了一篇“如何使用Python检测和识别车牌?”用OpenCV对输入图像进行预处理,用imutils将原始输入图像裁剪成所需的大小,用pytesseract将提取车牌字符转换成字符串(车牌识别)。 但经实测,美式车牌识别基本正确,但中国92式车牌、新能源车牌识别基本失败,失败的现象

    2024年02月08日
    浏览(34)
  • 从零开发短视频电商 PaddleOCR Java推理 (四)优化OCR工具类

    参考 :https://github.com/mymagicpower/AIAS/blob/9dc3c65d07568087ac71453de9070a416eb4e1d0/1_image_sdks/ocr_v4_sdk/src/main/java/top/aias/ocr/OcrV4RecExample.java 输出纯文本 : 结果 :

    2024年01月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包