PaddleOCR #使用PaddleOCR进行光学字符识别 - OCR飞桨实验

news2024/10/6 5:40:01

引言: PaddleOCR 是一个 OCR 框架或工具包,它提供多语言实用的 OCR 工具,帮助用户在几行代码中应用和训练不同的模型。PaddleOCR 提供了一系列高质量的预训练模型。这包含三种类型的模型,使 OCR 高度准确并接近商业产品。它提供文本检测、文本方向分类器和文本识别。PaddleOCR 在其工具包中提供了多种模型,包括旗舰 PP-OCR 和最新算法,如 SRN、NRTR 等。
OCR-002
PaddleOCR 还根据大小提供不同的模型。

  • 轻量级模型 ——占用更少内存、速度更快但准确性有所妥协的模型。
  • 服务器模型(重量级)——占用更多内存但更准确但速度有所妥协的模型。

PaddleOCR 支持 80 多种语言(取决于使用的 OCR 算法)。但是旗舰级的PP-OCR提供了中英文两种语言的支持。旗舰 OCR 算法 PP-OCR 是可用的最佳 OCR 工具之一。到目前为止,它已经有PP-OCR、PP-OCRv2 和 PP-OCRv3三个版本。如前一节所述,所有这些模型都建立在 CRNN 之上,并且是超轻量级的。让我们来看看并将其应用到一些各种类型的场景中。

 

一、OCR环境搭建

接下来我们将实现 PaddleOCR 的 PP-OCRv3。
首先,让我们安装所需的工具包和依赖项。这些依赖项和工具将帮助我们访问 OCR 实验环境所需的所有必需文件和脚本。

Windows 下的 PIP 安装:
更多环境安装请参考官方文档:Windows 下的 PIP 安装-使用文档-PaddlePaddle深度学习平台

1.1 环境准备

1)查看你的环境
需要确认 python 的版本是否满足要求。WIN键+R打开CMD命令窗口,使用以下命令确认是 3.6/3.7/3.8/3.9/3.10

python --version

参考结果:
ocr-02-04

2)需要确认 pip 的版本是否满足要求,要求 pip 版本为 20.2.2 或更高版本

python -m pip --version

参考结果:
ocr-02-06
3)需要确认 Python 和 pip 是 64bit,并且处理器架构是 x86_64(或称作 x64、Intel 64、AMD64)架构

python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"

下面的第一行输出的是”64bit”,第二行输出的是”x86_64”、”x64”或”AMD64”即可:
ocr-02-08
 

1.2 开始安装

如果你的计算机有 NVIDIA GPU,请在 CMD 模式中运行以下命令安装 GPU 版的 PaddlePaddle:

pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple

如果你的计算机没有 NVIDIA GPU,请在 CMD 模式中运行以下命令安装 CPU 版的 PaddlePaddle(小编用的是CPU环境)

# 安装最新版本方式
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
# 安装指定版本方式
pip install paddlepaddle==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

ocr-02-10

 

1.3 验证安装

安装完成后你可以使用 python 进入 python 解释器,输入import paddle ,再输入 paddle.utils.run_check()
如果出现 PaddlePaddle is installed successfully!,说明你已成功安装。
ocr-02-12
 

1.4 如何卸载

如需卸载或重新安装,请使用以下命令卸载 PaddlePaddle:

  • CPU 版本的 PaddlePaddle: python -m pip uninstall paddlepaddle
  • GPU 版本的 PaddlePaddle: python -m pip uninstall paddlepaddle-gpu

 

二、OCR便捷使用

下载 opencv 开源项目: https://github.com/spmallick/learnopencv/tree/master/Optical-Character-Recognition-using-PaddleOCR

2.1 命令行使用

PaddleOCR 源码提供了一系列测试图片,位置:.\Optical-Character-Recognition-using-PaddleOCR\PaddleOCR\doc\imgs
如果没有,点击 这里 下载并解压,然后在终端中切换到相应目录。
如果不使用提供的测试图片,可以将下方--image_dir参数替换为自己相应的测试图片路径。

2.1.1 中英文模型

在源码中找一张中文图片:
ocr-02-14
检测 + 方向分类器 + 识别全流程:

  • --use_angle_cls true设置使用方向分类器识别180度旋转文字
  • --use_gpu false设置不使用 GPU
paddleocr --image_dir ./doc/imgs/11.jpg --use_angle_cls true --use_gpu false

结果是一个list,每个item包含了文本框,文字和识别置信度:
ocr-02-16
查看源码可知,默认开启的是中文 ch 模式,检测(–det)默认已开启,识别(–rec)默认已开启。

  • img:这是ocr函数中的第一个参数。在此,传递图像数组或图像路径以执行OCR
  • det:以 bool 作为参数并指定是否使用检测器
  • rec:以 bool 作为参数并指定是否使用识别器
  • cls:以bool为参数,指定是否使用角度分类器

ocr-02-18

单独使用检测:设置 --rec为 false

paddleocr --image_dir ./doc/imgs/11.jpg --rec false

单独使用识别:设置 --det为 false

paddleocr --image_dir ./doc/imgs_words/ch/word_4.jpg --det false

2.1.2 多语言模型

1)英语

ocr-02-20
PaddleOCR 目前支持80个语种,可以通过修改 --lang参数进行切换,比如使用英文模型,指定 --lang=en。

paddleocr --image_dir ./doc/imgs_en/model_prod_flow_en.png --lang=en

结果是一个list,每个item包含了文本框,文字和识别置信度:
ocr-02-22

2)日语

像这样一张带有日文的图片:
ocr-02-24
CMD 执行命令:

paddleocr --image_dir ./doc/imgs/japan_1.jpg --lang=japan

如果设置的语言,在本机环境中没有对应的语言包,则会自动进行下载:
ocr-02-26
附 常用的多语言简写包括:
ocr-02-28

 

2.2 Python脚本使用

通过 Python 脚本使用 PaddleOCR whl 包,whl 包会自动下载 ppocr 轻量级模型作为默认模型。

pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本

对于Windows环境用户:直接通过pip安装的shapely库可能出现 [winRrror 126] 找不到指定模块的问题。建议从 这里下载 shapely安装包完成安装。小编下载的版本是 Shapely-1.8.2-cp311-cp311-win_amd64.whl

备注:2.2 节点用到的测试图片皆来自于源码项目目录:Optical-Character-Recognition-using-PaddleOCR\input_images

检测 + 方向分类器 + 识别全流程,工具类代码案例(.\PaddleOCR\applications\ocr_img_util.py):

# Importing required methods for inference and visualization.
from paddleocr import PaddleOCR, draw_ocr
# 显示结果
from PIL import Image

# Importing required libraries.
import os
import cv2
import matplotlib.pyplot as plt

# 初始化OCR,OCR会自动下载PP-OCRv3检测器、识别器和角度分类器
ocr = PaddleOCR(use_angle_cls=True)

# 指定输出路径和字体路径
out_path = './output_images'
font = './doc/fonts/simfang.ttf'



# Applying OCR
def ocr_img(img_path):
  print("OCR 图片识别地址:", img_path)

  result = ocr.ocr(img_path)
  print("OCR 图片识别结果:", result)

  # 通过使用 result = result[0] 移除外部的一维来解决 paddleocr\tools\infer\utility.py 文件中 draw_ocr 函数的 TypeError: '<' not supported between instances of 'tuple' and 'float'
  result = result[0]
  print("移除一维后图片识别结果:", result)

  # 保存可视化OCR检测识别结果
  save_ocr(img_path, out_path, result, font)



# 绘制和保存结果
def save_ocr(img_path, out_path, result, font):
  save_path = os.path.join(out_path, img_path.split('/')[-1].split('.')[0] + '-test-output.jpg')
  print("save_path:", save_path)
  
  # 函数用于从磁盘加载图像文件并将其作为NumPy数组加载到内存中。可以通过该数组进行进一步的图像处理和分析操作。
  image = cv2.imread(img_path)

  # 从输出列表中提取框、文本及其分数
  boxes = [line[0] for line in result]
  print("boxes:", boxes)

  txts = [line[1][0] for line in result]
  print("txts:", txts)

  scores = [line[1][1] for line in result]
  print("scores:", scores)

  # 使用 PaddleOCR 内置函数绘制输出
  # 可视化OCR检测识别结果
  #   参数:
  #       图像(图像|数组):RGB图像
  #       盒子(列表):形状为(N, 4, 2)的盒子
  #       txts(list): 文本
  #       scores(list): txxs对应的分数
  #       drop_score(float):只有大于 drop_threshold 的分数才会被可视化
  #       font_path:用于绘制文字的字体路径
  #   返回(数组):
  #       可视化 img
  im_show = draw_ocr(image, boxes, txts, scores, 0.5, font)
  
  # imwrite 是OpenCV库中的一个函数,用于将图像保存到文件中。它接受两个参数:文件路径和要保存的图像。
  cv2.imwrite(save_path, im_show)

  # cvtColor 是OpenCV库中的一个函数,用于颜色空间转换。
  # 它可以将一幅图像从一个颜色空间转换为另一个颜色空间,比如将彩色图像转换为灰度图像或将图像从BGR颜色空间转换为RGB颜色空间。
  img = cv2.cvtColor(im_show, cv2.COLOR_BGR2RGB)

  # 函数用于在图像窗口中显示图像。
  # 它接受一个图像作为输入,并在一个新的窗口中显示该图像。通常,它用于图像的可视化和调试,以便查看处理后的图像结果。
  plt.imshow(img)

1)收据

收据是 OCR 被广泛使用并具有大量商业用途的文档之一。它可用于提取重要信息,如账单金额、税金、买家信息等。例如,查看此图像并对其应用 OCR。
ocr-02-30

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/05-receipt1.jpg'
ocr_img(img_path)

结果可视化:
ocr-02-32
让我们在另一张小票图片上测试我们的 OCR。
ocr-02-34

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/05-receipt1.jpg'
ocr_img(img_path)

ocr-02-36
可以看出,OCR 在收据上的表现非常出色。它已经能够捕获几乎所有的详细信息,例如金额、订单、订单号等,并且与收据的数字顺序相同。因此,我们可以说 PP-OCR 在收据和类似文件上的表现相当不错。

2)身份证

身份证主要用于安全目的和识别目的。当 OCR 应用于 ID 卡时,它可用于提取姓名、代码、分支机构等信息,这些信息可用于在电子门上进行访问或将信息存储在数据库中。我们将在下图上尝试 OCR。
ocr-02-38

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/09-id-card.jpg'
ocr_img(img_path)

ocr-02-40
哇!!那很快而且非常准确。它检测了所有字段,如船号、日期、ID 号等,即使文本倾斜,这些也是这里的关键信息。

3)文件

文档识别一直是 OCR 的重要研究领域之一。在我们的生活中几乎每天都在使用文档。当 OCR 应用于文档时,它可用于检索重要信息、检索表单字段、分析布局、数字存储以及阅读旧手稿。所有这些任务都可以使用 OCR 轻松完成。
ocr-02-42

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/11-document-1.jpg'
ocr_img(img_path)

ocr-02-44
输出在检测和识别方面都非常准确。PP-OCR 能够检测文档中的所有文本字段,并且识别器在识别这些文本方面做得非常出色。识别出来的文字看起来很准确,对特殊字符和空格的检测也很准确。

我们在另一个类似的文档上实现 OCR。
ocr-02-46

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/13-document-2.png'
ocr_img(img_path)

ocr-02-48
此图像中的检测器遗漏了此文档图像中的一些文本。但是,无论检测器检测到什么文本,OCR 都能正确预测。从文档图像来看,我们可以说检测器和识别器不擅长处理小文本。当遇到小文本时,它会错过或错误地预测输出。

4)手写文件

我们还可以在手写文本文档上测试我们的管道。例如,我们来试试这张图片。
ocr-02-50

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/15-document-3.jpg'
ocr_img(img_path)

ocr-02-52
如图所见,从结果看原文,OCR 根本不准确。尽管检测器非常好,但识别器一点也不好。其背后的主要原因可能是 OCR 接受训练的数据。PP-OCR 在 MJSynth 和 SynthText 数据集上训练,这是一个合成文本数据集。这些数据集不是现实生活中的文本图像,而是计算机生成的文本图像。因此,由于训练数据集中缺少手写文本可能是 OCR 在这些类型的图像上表现不佳的一个重要因素。

5)牌照

车牌是 OCR 中最流行和最重要的用例之一,并且性能非常好。ALPR 现在用于各种商业和研究领域。已识别的车牌可用于查找任何违规行为、车辆登记、收费站等。
ocr-02-54

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/17-license-plate.jpg'
ocr_img(img_path)

ocr-02-56
那太精彩了!预测的边界框非常紧凑,甚至识别的文本也很准确。ALPR 也可以应用于视频源,并进行一些调整以提高准确性。

6)路标

可以应用 OCR 的最重要场景之一是路标。由于自动驾驶汽车的发展,这个应用程序变得非常重要,例如读取速度限制、停车标志等。
ocr-02-58

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/23-sign-board-1.jpg'
ocr_img(img_path)

ocr-02-60
那是相当准确的。OCR 能够识别所有文本,甚至包括括号等特殊字符。让我们在另一张图片上试试。
ocr-02-62

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/25-sign-board-2.jpg'
ocr_img(img_path)

ocr-02-64
这非常准确。通过检测每个文本字段,检测器工作得很好。OCR 在这些场景中也表现出色。我们可以肯定地说,自动驾驶汽车可以很容易地依赖这个 OCR。

7)交易卡

交易卡或收藏卡在当今从儿童到成人中非常流行,用于玩耍和交易。其中一些包含非常高的货币价值,高达数百万美元。因此,值得在这些卡片上尝试 OCR。
ocr-02-66

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/27-trading-card.jpg'
ocr_img(img_path)

ocr-02-68
OCR 在这方面不算太好,也不算太差。这里有几件事需要注意,OCR 预测了一些没有空格的文本,其中文本的尺寸有点小,类似于文档部分的情况。此外,检测器还没有检测到一些尺寸也非常小的文本字段

8)曲线文字

到目前为止,我们只看到了直线上的文本,但如果文本是弯曲的呢?OCR 和文本检测器的性能如何?我们也来试试。
ocr-02-70

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/19-curved-text-1.jpg'
ocr_img(img_path)

ocr-02-72
虽然是一张简单的图片,但是看识别结果,只有一个英文单词,有点惊讶。再来试一张:
ocr-02-74

from ocr_img_util import ocr_img

# Applying OCR
img_path = './input_images/21-curved-text-2.jpg'
ocr_img(img_path)

ocr-02-76
好吧,如图所见,结果非常糟糕。检测器无法检测到文本字段。原因是因为训练数据。训练默认检测器的数据包含所有直线文本。即使是神经网络也应该预测弯曲的边界框,这通过使用与现在使用的相同的网络是不可能的。因此,当看到弯曲的文本时,检测器无法检测到它。PaddleOCR 提供了一个名为 SAST 的文本检测器,专门为弯曲文本创建和训练。但截至目前,PaddleOCR 并未为此管道提供 OCR。

 

三、实验总结

从上面的实验中,我们可以得出结论,PP-OCR 是一种非常快速且高度准确的 OCR 以及文本检测器。但它在某些情况下会失败,例如手写文本、弯曲文本和小文本,这些文本无法检测到或识别不准确。为了解决这些问题,可以在更多数据集上对 OCR 和检测器进行微调,这有助于提高准确性并在各种不同场景中获得更好的性能。

 

四、参考文档

opencv开源项目:https://github.com/spmallick/learnopencv/tree/master/Optical-Character-Recognition-using-PaddleOCR
opencv开放文档:https://learnopencv.com/optical-character-recognition-using-paddleocr/
paddlepaddle官方文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/install/pip/windows-pip.html

系列攻略:
PaddleOCR #hello paddle: 从普通程序走向机器学习程序 - 初识机器学习
PaddleOCR #使用PaddleOCR进行光学字符识别 - OCR模型对比

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

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

相关文章

SPI(Serial Perripheral Interface)

SPI全称是Serial Perripheral Interface&#xff0c;也就是串行外围设备接口。SPI是Motorola公司推出的一种同步串行接口技术&#xff0c;是一种高速、全双工的同步通信总线&#xff0c;SPI时钟频率相比I2C要高很多&#xff0c;最高可以工作在上百MHz。SPI以主从方式工作&#…

Fiddler抓包工具之Fiddler+willow插件应用

安装 Fiddler的安装包地址&#xff1a;fillderwillow 解压后安装fiddler4和willow1.4.*版本。 安装成功后&#xff0c;启动fiddler后会出现willow插件按钮&#xff1a; 说明安装成功。 重定向 willow重定向 进入willow界面后&#xff0c;通过右键->Add Project ->Add R…

Compose 嵌套滑动冲突的解决办法

前言 在最近我利用业余时间使用 Compose 写的 Gihub APP 中&#xff0c;它的首页结构是这样的&#xff1a; 采用了 Drawer 嵌套 Pager 的结构。 这就会出现一个问题&#xff0c;那就是 Drawer 和 Pager 都需要监听横向滑动手势&#xff0c;从而实现展开 Drawer 和 切换 Pager…

C#TryCatch用法

前几天一个学员在学习C#与TryCatch用法时,也不知道TryCatch用法装可以用来做什么 。下面我们就详细讲讲C# 和封TryCatch用法相关知识。 C# 是一种通用、类型安全且面向对象的编程语言&#xff0c;由微软开发并在 .NET 平台上运行。TryCatch 是 C# 语言中的一个结构&#xff0c…

PYTHON在数据保存csv时文件内容乱码了怎么解决?

目录标题 前言问题1. 在打开 CSV 文件时指定编码方式2. 将数据转换成 Unicode 编码尾语 前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 问题 如果你的 Python 程序采集到的数据在保存成 CSV 格式的文件时出现了乱码。 那么可尝试以下解决方法&#xff1a; 1. 在打…

MySQL数据库——索引、事务、存储引擎

MySQL 索引 索引的概念 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;。使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引…

一个项目的测试计划模板该怎么写?【附案例】

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验…

Python进阶语法之异常处理

Python进阶语法之异常处理 在编写Python程序时&#xff0c;经常会遇到各种运行时错误&#xff0c;这些错误会导致程序终止并抛出异常。然而&#xff0c;有时我们希望程序能优雅地处理这些错误&#xff0c;而不是直接崩溃。在这种情况下&#xff0c;我们需要使用到Python的异常…

Vue中如何进行分布式存储与对象存储

Vue中如何进行分布式存储与对象存储 随着云计算和大数据时代的到来&#xff0c;分布式存储和对象存储越来越受到关注。在Vue中&#xff0c;我们可以使用不同的分布式存储和对象存储技术来存储和管理数据。本文将介绍Vue中如何进行分布式存储和对象存储。 什么是分布式存储&…

OpenGL 混合

1.简介 混合(Blending)通常是实现物体透明度的一种技术。透明就是说一个物体&#xff08;或者其中的一部分&#xff09;不是纯色(Solid Color)的&#xff0c;它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。 2.丢弃片段 只想显示草纹理的某些部分&#xff0…

TDesign电商小程序模板解析01-自定义底部导航栏

目录 1 电商模板安装2 创建页面3 创建底部导航条总结 我们已经利用了两篇文章解读了一下微信小程序带的TDesign模板 TDesign小程序组件库01 TDesign小程序组件库02 入门一款前端组件库&#xff0c;如果挨个去看每个组件的用法未免比较枯燥&#xff0c;即使看懂了其实离实际开发…

从零开始 Spring Boot 44:Test

从零开始 Spring Boot 44&#xff1a;Test 图源&#xff1a;简书 (jianshu.com) 本篇文章我们讨论如何在 Spring 项目中编写测试用例。 当前使用的是 Spring 6.0&#xff0c;默认集成 JUnit 5。 依赖 Spring Boot 的测试功能需要以下依赖&#xff1a; <dependency><…

数据中心机柜PDU应该怎么选?

数据中心是国家确定的“新基建”七大领域之一。数据中心在国民经济和社会发展中所起的作用越来越重要&#xff0c;数据中心已经成为了各行各业的关键基础设施&#xff0c;为经济转型升级提供了重要支撑。在庞杂的数据中心&#xff0c;服务器和交换器担负着传输数据的重要责任&a…

【论文阅读-人机交互】通过用户参与来缓解人工智能决策中的知识失衡问题

Title: Mitigating knowledge imbalance in AI-advised decision-making through collaborative user involvement From: International Journal of Human - Computer Studies Link: https://doi.org/10.1016/j.ijhcs.2022.102977 目录 1 绪论2 方法2.1 假设2.2. 实验任务及研究…

【单片机】STM32F103C8T6 最小系统板原理图

STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器&#xff0c;由STMicroelectronics&#xff08;ST&#xff09;公司生产。它是STMicroelectronics的STM32系列微控制器中的一员&#xff0c;被广泛应用于嵌入式系统和电子设备中。 STM32F103C8T6单片机的主要特点和资源…

点云深度学习系列博客(七): 针对点云的数据增强技术

好长时间不更新博客了&#xff0c;入职以后突然就变忙了&#xff0c;确实有心无力。最近做一个点云数据增强的项目&#xff0c;搞了一个简单的前期调研&#xff0c;趁着最近几天不太忙&#xff0c;凑一篇博客出来&#xff0c;保一下博客专家资格... 一. 简介 我们在利用深度学…

TDesign电商小程序模板解析02-首页功能

目录 1 home.json2 goods-list组件3 goods-card组件总结 上一篇我们搭建了底部的导航条&#xff0c;这一篇来拆解一下首页的功能。首页有如下功能 可以进行搜索显示轮播图横向可拖动的页签图文卡片列表 1 home.json 因为是要使用组件库的组件搭建页面&#xff0c;自然是先需要…

Git第二章、多人协作

一、多人协作一 目前&#xff0c;我们所完成的工作如下&#xff1a; • 基本完成 Git 的所有本地库的相关操作&#xff0c;git基本操作&#xff0c;分支理解&#xff0c;版本回退&#xff0c;冲突解决等等 • 申请码云账号&#xff0c;将远端信息clone到本地&#xff0c;以及推…

简单认识Nginx网络服务

文章目录 一、简介1、概括2、Nginx和Apache的差异3、Nginx优于Apache的优点 二、编译安装nginx 服务1、在线安装nginx2、 nginx编译安装&#xff08;1&#xff09;、关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下&#xff08;2&#xff09;、#nginx的配置及运行需…

基于分时电价和蓄电池控制策略用电优化研究(matlab代码)

目录 1 主要内容 温控负荷模型 蓄电池模型 2 部分代码 3 程序结果 4 下载链接 点击直达&#xff01; 1 主要内容 该程序复现《基于需求侧家庭能量管理系统用电优化研究》中第三章模型&#xff0c;题目是《基于分时电价和蓄电池控制策略用电优化研究》&#xff0c;该部…