PaddleOCR 图片日期识别
目录
一 . 获取图片信息种对应坐标区域日期信息 (类型为1:http链接 类型为 2本地图片路径)
二 . ocr图片识别日期信息获取,调用获取图片区域相应位置方法
三 . 如有所需获取rtsp流回放格式
四 . 完整代码如下 (路径可根据自己实际需求替换)
当今数字化的时代,我们经常需要从图像中提取信息,以便进行后续的处理和分析。其中,日期 信息作为一种重要的时间标记,常常存在于各种图像中,例如照片、截图等。然而,要手动从图像中提取日期信息是一项耗时且繁琐的任务,特别是当图像数量庞大时。因此,我们需要一种自动化的方式来实现这一任务。
PaddleOCR 是一个基于 PaddlePaddle 深度学习框架的开源 OCR(Optical Character Recognition,光学字符识别)工具库,它提供了强大的文字识别功能,能够准确地从图像中识别出各种文字信息,包括日期。在本文中,我们将探讨如何利用 PaddleOCR 来实现图像中日期信息的自动识别。
本文要解决的问题:从图像中提取日期信息并生成rtsp视频回放URL
一 . 获取图片信息种对应坐标区域日期信息 (类型为1:http链接 类型为 2本地图片路径)
# 读取图片识别相应位置坐标获取 类型为1:http 类型为 2本地图片路径
def x_y_get(image,type):if type == 1:# Nginx图片的访问地址# image_url = "http://192.168.14.93:85/car_image/202306/20230601022933/em_1.jpg"image_url = image# 下载图片response = requests.get(image_url)image_data = response.content# 将图片数据加载为OpenCV图像image_array = np.frombuffer(image_data, np.uint8)image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)else:# 读取图像image = cv2.imread(image)# 定义要截取的区域的坐标x, y, w, h = 20, 0, 800, 100 # 坐标# 截取图像区域cropped_image = image[y:y+h, x:x+w]# 将截取的图像转换为灰度图像gray_image = cv2.cvtColor(cropped_image, cv2.COLOR_BGR2GRAY)# # 展示处理后的图像# plt.imshow(cropped_image, cmap='gray')# plt.axis('off') # 关闭坐标轴# plt.show()return gray_image
二 . ocr图片识别日期信息获取,调用获取图片区域相应位置方法
# ocr图片识别日期信息获取
def paddle_ocr(path,type):# 调用--读取图片识别相应位置坐标获取gray_image = x_y_get(path,type)# 加载PaddleOCR模型ocr = PaddleOCR(use_angle_cls=True, lang='ch')# 定义一个函数来提取日期def extract_dates(ocr_result):dates = []for line in ocr_result:for word in line:# 中文过滤linee = re.sub('[\u4e00-\u9fa5]', '', word[1][0])# 识别结果将中文进行过滤,但是列表位置可能不一需要进行判断if linee != '':dates.append(linee)# 将结果进行join为时间格式dates = ' '.join(dates).replace('-','').replace(':','').replace(' ','').replace('—','').replace(':','')return dates# 执行OCR识别result = ocr.ocr(gray_image, cls=True)# 提取日期信息dates = extract_dates(result)return dates
三 . 如有所需获取rtsp流回放格式
# 对应字符串日期转换处理,获取前五秒时间与后五秒时间-- 组装成rtsp返回格式
def get_time(original_timestamp):# 解析字符串为datetime对象dt = datetime.strptime(original_timestamp, '%Y%m%d%H%M%S')# 往前五秒before_5_seconds = dt - timedelta(seconds=5)# 往后五秒after_5_seconds = dt + timedelta(seconds=5)# 转换回字符串格式(与原格式一致)before_5_str = before_5_seconds.strftime('%Y%m%d%H%M%S')after_5_str = after_5_seconds.strftime('%Y%m%d%H%M%S')# 组成rtsp回放所需格式time = '?starttime={}t{}z&endtime={}t{}z'.format(before_5_str[0:8], before_5_str[8:], after_5_str[0:8],after_5_str[8:])return time# ocr识别获取时间日期 类型为1--http 类型为2--本地
# res = paddle_ocr(r'http://192.168.14.93:85/car_image/202306/20230601022933/em_1.jpg',1)
res = paddle_ocr(r'D:\python_project\uu\Seal_monitoring_system\static\em_16.jpg',2)
print(res)# 获取rtsp前段流
rtsp ='rtsp://admin:1qaz2wsx!@QW@192.168.7.38:554/Streaming/tracks/101'# ocr时间日期传入来获取rtsp前后五秒格式--后段流
get_time_data = get_time(res)# 拼接为完整回放流
rtsp = rtsp+get_time_data
print(rtsp)
四 . 完整代码如下 (路径可根据自己实际需求替换)
import cv2
import re
import requests
import numpy as np
import matplotlib.pyplot as pltfrom paddleocr import PaddleOCR
from datetime import datetime, timedelta# 读取图片识别相应位置坐标获取 类型为1:http 类型为 2本地
def x_y_get(image,type):if type == 1:# Nginx图片的访问地址# image_url = "http://192.168.14.93:85/car_image/202306/20230601022933/em_1.jpg"image_url = image# 下载图片response = requests.get(image_url)image_data = response.content# 将图片数据加载为OpenCV图像image_array = np.frombuffer(image_data, np.uint8)image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)else:# 读取图像image = cv2.imread(image)# 定义要截取的区域的坐标x, y, w, h = 20, 0, 800, 100 # 坐标# 截取图像区域cropped_image = image[y:y+h, x:x+w]# 将截取的图像转换为灰度图像gray_image = cv2.cvtColor(cropped_image, cv2.COLOR_BGR2GRAY)# # 展示处理后的图像# plt.imshow(cropped_image, cmap='gray')# plt.axis('off') # 关闭坐标轴# plt.show()return gray_image# ocr图片识别日期信息获取
def paddle_ocr(path,type):# 调用--读取图片识别相应位置坐标获取gray_image = x_y_get(path,type)# 加载PaddleOCR模型ocr = PaddleOCR(use_angle_cls=True, lang='ch')# 定义一个函数来提取日期def extract_dates(ocr_result):dates = []for line in ocr_result:for word in line:# 中文过滤linee = re.sub('[\u4e00-\u9fa5]', '', word[1][0])# 识别结果将中文进行过滤,但是列表位置可能不一需要进行判断if linee != '':dates.append(linee)# 将结果进行join为时间格式dates = ' '.join(dates).replace('-','').replace(':','').replace(' ','').replace('—','').replace(':','')return dates# 执行OCR识别result = ocr.ocr(gray_image, cls=True)# 提取日期信息dates = extract_dates(result)return dates# 对应字符串日期转换处理,获取前五秒时间与后五秒时间-- 组装成rtsp返回格式
def get_time(original_timestamp):# 解析字符串为datetime对象dt = datetime.strptime(original_timestamp, '%Y%m%d%H%M%S')# 往前五秒before_5_seconds = dt - timedelta(seconds=5)# 往后五秒after_5_seconds = dt + timedelta(seconds=5)# 转换回字符串格式(与原格式一致)before_5_str = before_5_seconds.strftime('%Y%m%d%H%M%S')after_5_str = after_5_seconds.strftime('%Y%m%d%H%M%S')# 组成rtsp回放所需格式time = '?starttime={}t{}z&endtime={}t{}z'.format(before_5_str[0:8], before_5_str[8:], after_5_str[0:8],after_5_str[8:])return time# ocr识别获取时间日期 类型为1--http 类型为2--本地
# res = paddle_ocr(r'http://192.168.14.93:85/car_image/202306/20230601022933/em_1.jpg',1)
res = paddle_ocr(r'D:\python_project\uu\Seal_monitoring_system\static\em_16.jpg',2)
print(res)# 获取rtsp前段流
rtsp ='rtsp://admin:1qaz2wsx!@QW@192.168.7.38:554/Streaming/tracks/101'# ocr时间日期传入来获取rtsp前后五秒格式--后段流
get_time_data = get_time(res)# 拼接为完整回放流
rtsp = rtsp+get_time_data
print(rtsp)
相关文章:
PaddleOCR 图片日期识别
目录 一 . 获取图片信息种对应坐标区域日期信息 (类型为1:http链接 类型为 2本地图片路径) 二 . ocr图片识别日期信息获取,调用获取图片区域相应位置方法 三 . 如有所需获取rtsp流回放格式 四 . 完整代码如下 (…...
HTML5学习记录
简介 超文本标记语言(HyperText Markup Language,简称HTML),是一种用于创建网页的标准标记语言。 编辑器 下载传送门https://code.visualstudio.com/ 下载编辑器插件 标题 标题通过 <h1> - <h6> 标签进行定义。 …...
提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件
法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼,以及仲裁案件,精确的法律文书撰写对于案件的成功至关重要。然而,这一过程往往既耗时又复杂,尤其是在处理复杂的案情和面对当事人难以理解…...
大数据之 Hive 快速搭建的详细步骤
Hive hive 搭建三种模式: 内嵌模式本地模式远程模式内嵌模式 Hadoop 和 Hive 整合 修改 hadoop/etc/下的 core-site.xml: <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><nam…...
从入门到高级的99个python知识点
大家好,想掌握Python编程语言,从零基础的小白晋升为大神?没问题!接下来我们将以轻松有趣的方式,逐一解锁Python学习路上的99个关键知识点。每一步都将结合实际应用场景、函数功能解析及简洁代码演示,带你深…...
设计模式之备忘录模式(上)
备忘录模式 1)概述 1.定义 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,可以在以后将对象恢复到原先保存的状态。 2.作用 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便…...
算法中二分搜索详解
文章目录 在有序数组中找num是否存在实现思路实现代码(里面运用了对数器)在有序数组中找>num的最左位置实现思路代码实现 在有序数组中找<num的最右位置实现思路实现代码 二分搜索不一定发生在有序数组上(比如寻找峰值问题)题目描述实现思路实现代码 在有序数组中找num是…...
关于无线充电项目总结IP6826
1、电路 1.1 选用芯片IP6826英集芯 支持PD3.0 5-15W 1.2 推荐电路 讲解这个是官方推荐图 注意以下几点: NTC是100K的别买错了 L就是线圈 我这选用的A11 6.3 uH 淘宝买的 需要陪400nf NPO或CBB 还可以10uh配250nf(这个我没试过) 如果led2闪烁…...
[CSS]样式属性+元素设置
哎呀,好多东西,根本记不住,更多的还是边用边记吧,这里的代码就当使用范例,但其实如果可以让gpt应该会更好,哎学吧,反正记得住当然更好 文本 属性名描述word-break单词换行。取值如下࿱…...
优雅关闭jar程序shell 脚本
参考竽道Linux部署 #!/bin/bash set -eDATE$(date %Y%m%d%H%M) # 基础路径 BASE_PATH/work/projects/yudao-server # 服务名称。同时约定部署服务的 jar 包名字也为它。 SERVER_NAMEyudao-server # 环境 PROFILES_ACTIVEdev# heapError 存放路径 HEAP_ERROR_PATH$BASE_PATH/he…...
基于51单片机多功能洗衣机控制(强洗弱洗漂洗)设计( proteus仿真+程序+设计报告+原理图+讲解视频)
基于51单片机多功能洗衣机控制(强洗弱洗漂洗)设计( proteus仿真程序设计报告原理图讲解视频) 多功能洗衣机控制-强洗弱洗漂洗 1. 主要功能:2. 讲解视频:3. 仿真设计4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单资料下载链接…...
CVP(ChatGPT、Vector Database和Prompt)
CVP实际上指的是ChatGPT、Vector Database和Prompt的结合,这是一种新型的技术栈,用于构建智能应用。 首先,我们来看这三个组成部分: ChatGPT:这是一个强大的语言模型,它能够理解并生成自然语言文本。Chat…...
c语言-----数组知识汇总
前言 本文为我学习数组知识点之后,对c语言的数组部分进行的知识点汇总。 简单数组介绍 简单来说,数组就是一个数据组,像一个箱子,里面放有多个数据。 [1,2,3,4,5] 数组的定义 基础定义 语法: 数据类型 数组名[数组…...
【游戏开发之热更新技术】
游戏开发之热更新技术 热更新技术是指在不重新发布和安装应用的情况下,对已部署的应用程序进行更新和修补的技术。这种技术在现代软件开发中变得越来越重要,因为它能够为用户提供更加及时的服务和更好的体验。以下是一篇关于热更新技术的文章࿰…...
小红的白色字符串
题目描述 小红拿到了一个字符串,她准备将一些字母变成白色,变成白色的字母看上去就和空格一样,这样字符串就变成了一些单词。 现在小红希望,每个单词都满足以下两种情况中的一种: 1.开头第一个大写,其余为…...
Python+Django+Html网页版人脸识别考勤打卡系统
程序示例精选 PythonDjangoHtml人脸识别考勤打卡系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoHtml网页版人脸识别考勤打卡系统》编写代码,代码整洁…...
第1章、react基础知识;
一、react学习前期准备; 1、基本概念; 前期的知识准备: 1.javascript、html、css; 2.构建工具:Webpack:https://yunp.top/init/p/v/1 3.安装node:npm:https://yunp.top/init/p/v/1 …...
物联网会用到哪些数据开发
物联网(IoT)涉及大量的设备和传感器,产生的数据种类繁多,因此在物联网领域进行数据开发时,可能涉及以下几个方面: 数据采集与存储: 设备数据采集:从各种传感器和设备中采集数据&…...
[Linux]一篇文章带你搞定软硬连接
阅读导览: 先在windows中先见见软硬连接从名字、inode等方面分析软硬连接如何实现软硬连接硬链接注意事项软硬链接都用来干什么如何在windows中实现硬链接 文章目录 概念简述文件系统windows下的快捷方式--软硬链接的直观体现角度1:文件名角度2ÿ…...
AI常见关键术语
哈喽,大家好,我是小码哥,人工智能技术的快速发展带来了许多专业术语,这些词汇对于理解AI的工作原理和应用至关重要。以下是一些关键的AI术语,以及它们的专业解释和通俗总结。 一、核心概念 人工智能 (AI) 专业解释&am…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
