OCR实现微信截图改名
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple/ ──(Sat,Nov30)─┘
pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install easyocr
import easyocr
import os
import cv2
import time
from paddleocr import PaddleOCRdef get_photo_paths(photos_folder_path):return [ f"{photos_folder_path}{os.sep}{photo_name}" for photo_name in os.listdir(photos_folder_path) if ".PNG" in photo_name]def preprocess_image(image):# 转为灰度图gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 去噪声denoised = cv2.medianBlur(binary, 3)return denoiseddef image_cutting(image_path,up_ratio=0.03,down_ratio=0.13):image = cv2.imread(image_path)# 计算切割的宽度和高度width = int(image.shape[1] * 1)down = int(image.shape[0] * down_ratio)up = int(image.shape[0] * up_ratio)# 切割图片cropped_image = image[up:down, :width]# 显示切割后的图片# cv2.imshow('Cropped Image', cropped_image)preprocessed_image = preprocess_image(cropped_image)# plt.imshow(preprocessed_image)return preprocessed_imagedef get_key_fields_from_easyorc(image,keyword=''):res = Ereader.readtext(image)texts = []if keyword != '':for fields in res:boundaries = fields[0] ## 边界坐标text = fields[1] ## 文字内容if keyword in text:return {True:text}else:texts.append(text)return {False:texts}else:text = res[0][1]return text def get_key_fields_from_PaddleOCR(image,keyword=''):res = Preader.ocr(image, cls=True)[0]texts = []if keyword != '':for fields in res:boundaries = fields[0] ## 边界坐标text = fields[1][0] ## 文字内容if keyword in text:return {True:text}else:texts.append(text)return {False:texts}else:text = res[0][1][0]return {True:text} # res = Preader.ocr(image, cls=True)[0]# texts = []# for fields in res:# boundaries = fields[0] ## 边界坐标# text = fields[1][0] ## 文字内容# if keyword in text:# return {True:text}# else:# texts.append(text)# return {False:texts}def time_counter(begin_time, end_time):# 根据传入的时间计算,通过run_time.round()函数取整runtime = round(end_time - begin_time)# 计算时分秒hour = runtime // 3600minute = (runtime - 3600 * hour) // 60second = runtime - 3600 * hour - 60 * minute# 输出return f'用时:{hour}小时{minute}分钟{second}秒'def change_wechat_photo_name_logic(photos_folder_path,keyword = '22级实习-',up_ratio=0.05,down_ratio=0.13,model_name = "paddleorc"):if model_name == "paddleorc":global PreaderPreader = PaddleOCR(use_angle_cls=True,det=False, lang="ch")elif model_name == "easyorc":global EreaderEreader = easyocr.Reader(['ch_sim','en']) # 只需要运行一次就可以将模型加载到内存中photo_paths = get_photo_paths(photos_folder_path)m = len(photo_paths)t = 0start_time = time.time()for photo_path in photo_paths:start_time_of_each_step = time.time()try:preprocessed_image = image_cutting(photo_path,up_ratio,down_ratio)if model_name == "easyorc":wechat_name = get_key_fields_from_easyorc(preprocessed_image,keyword) elif model_name == "paddleorc":wechat_name = get_key_fields_from_PaddleOCR(preprocessed_image,keyword)if keyword != "": split_wechate_name = wechat_name[True].split('-')friend_name = split_wechate_name[-1]else:friend_name = wechat_name[True]# folder_path = os.path.split(photo_path)[0]new_photo_path = os.path.join(photos_folder_path,f"{friend_name}.PNG")os.rename(photo_path,new_photo_path)t += 1end_time_of_each_step = time.time()time_for_this_time = time_counter(start_time_of_each_step,end_time_of_each_step)print(f"当前好友名为{friend_name},是第{t}个,完成{t/m*100}%,{time_for_this_time}")except Exception as e:print(f"\033[31m当前文件为:【{photo_path}】\n,错误:{e}\033[0m")# print(f"当前好友名为{friend_name},错误:{e}")print(f"总计{time_counter(start_time,end_time_of_each_step)},完成{t}个") if __name__ == '__main__':photos_folder_path = "/Users/magu/Downloads/淮职课程准备/1就业材料/就业实习留存材料/回访截图/张晶实习回访(11月1日-11月30)"change_wechat_photo_name_logic(photos_folder_path,keyword = '22级实习-',up_ratio=0.05,down_ratio=0.101)#change_wechat_photo_name_logic(photos_folder_path,keyword = '',up_ratio=0.05,down_ratio=0.10)
相关文章:
OCR实现微信截图改名
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple/ ──(Sat,Nov30)─┘ pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install paddleo…...
c++stl模板总结
stl 总结stl模板vectordequelistforward_liststl集合类set&unorder_setmap&unorder_map 自适应容器栈和队列stackqueuepriority_queue 总结stl模板 vector 1.初始化 vector具有多个重载的构造函数,可以在实例化vector时指定他开始时应该包含的元素个数以…...
文本生成类(机器翻译)系统评估
在机器翻译任务中常用评价指标:BLEU、ROGUE、METEOR、PPL。 这些指标的缺点:只能反应模型输出是否类似于测试文本。 BLUE(Bilingual Evaluation Understudy):是用于评估模型生成的句子(candidate)和实际句子(referen…...
Harmony NEXT-越过相机读写权限上传图片至项目云存储中
问题成因 在制作用户注册登录界面时想要实现用户头像上传共能,查询API文档,发现有picker和PhotoAccessHelper两个包可以选择使用,但是在使用PhotoAccessHelper包拉起相册并读入所选的照片后将该照片传入云存储中产生报错,需要相册…...
C++算法练习-day53——17.电话号码的字母组合
题目来源:. - 力扣(LeetCode) 题目思路分析 题目要求我们将一个数字字符串(每个数字对应一组字母,如2对应abc,3对应def等)转换成所有可能的字母组合。这是一个典型的组合生成问题,…...
计算机网络性能
任何一个系统都可以或需要不同的指标来度量系统的优劣、状态或特性。计算机网络是综合计算机技术与通信技术的复杂系统,可以通过许多指标对一个计算机网络的整体或局部、全面或部分、静态或动态等不同方面的性能进行度量与评价 1、传输时延 当一个分组在输出链路发…...
MAC卸载Vmware Fusion后无法再安装解决方案
MAC卸载Vmware Fusion后无法再安装解决方案 执行脚本 sudo rm -rf /Library/Application Support/VMware/VMware Fusion sudo rm -rf /Library/Application Support/VMware/Usbarb.rules sudo rm -rf /Library/Application Support/VMware Fusion sudo rm -rf /Library/Prefe…...
windows 服务器角色
windows 服务器角色 Active Directory Rights Management Services Active Directory RightsManagement Services (AD RS)帮助保护信息,防止未授权使用。AD RMS 将建立用户标识,并为授权用户提供受保护信息的许可证。 ServicesActive Directory 联合身…...
NAT学习手册
NAT(Network Address Translation,网络地址转换)是一种在局域网(LAN)内部使用私有地址,而在连接到互联网时将这些私有地址转换为全球唯一且有效的公网地址的技术。这种技术的主要目的是解决IPv4地址空间不足…...
python -从文件夹批量提取pdf文章的第n页,并存储起来
python -从文件夹批量提取pdf文章的第n页,并存储起来 废话不多说,看下面代码 讲解一下下面代码 reader PyPDF2.PdfReader (file) 将文件转化为PdfReader 对象,方便使用内置方法。 first_page reader.pages[0] 提取第一页 writer PyPDF…...
RPC中定时器制作思路
定时器设计 time_event time_event 类用来封装定时时间,内部需要包含一个任务执行时间,是否重复标记、是否取消标记,对于重复任务,还需要一个重复间隔时间。以及一个回调函数,用来执行任务到期后需要执行的动作。 构…...
Flutter简单实现滑块验证
现在实现一个 Flutter 滑动验证组件,类似于许多网站和应用程序中常见的“滑动以验证”功能。它通过滑动一个滑块来完成验证操作,用户需要将滑块拖动到指定位置以完成验证。 前置知识点整理 StatefulWidget 在 Flutter 中,StatefulWidget 是…...
第33周:运动鞋识别(Tensorflow实战第五周)
目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 1.3 查看数据 二、数据预处理 2.1 加载数据 2.2 可视化数据 2.3 再次检查数据 2.4 配置数据集 2.4.1 基本概念介绍 2.4.2 代码完成 三、构建CNN网络 四、训练模型 4.1 设置动态学习率 4.2 早停与保存最佳模型…...
C#中switch语句使用
编写一个程序,使用switch语句将用户输入的分数转换成等级,如表 private static void Main(string[] args) { Console.WriteLine("请输入分数:"); int score int.Parse(Console.ReadLine()); switch (score) …...
2024.11.28(作业)
思维导图 功能函数声明文件 #ifndef _FUN_H__ #define _FUN_H__ #include <myhead.h>#define MAX 50 //数组大小 #define QAZ 20 //长度和字符串大小typedef int datatype; //数据元素类型//2.1 定义顺序表类型 typedef struct {datatype data[MAX];int len; }S…...
充分统计量(Sufficient Statistic)概念与应用: 中英双语
充分统计量:概念与应用 在统计学中,充分统计量(Sufficient Statistic) 是一个核心概念。它是从样本中计算得出的函数,能够完整且无损地表征样本中与分布参数相关的信息。在参数估计中,充分统计量能够帮助我…...
2. STM32_中断
中断 中断是什么: 打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。 中断的意义: 中断可以高效处理紧急程序,不会一直占用CPU资源。如实时控制、故障处理、处理不确定…...
CAD 文件 批量转为PDF或批量打印
CAD 文件 批量转为PDF或批量打印,还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索,DWG To PDF.pc3 ,获取到文件目录 ,替换到代码中, originalValue ACADPref.PrinterConfigPath \ r"C:…...
明明的随机数
题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉ÿ…...
2024金盾信安杯线上赛 MISC ezpng[wp]
下载题目发现给了个password和png 图片发现损坏的 password丢随波逐流一键解 base64 给出解码的结果是 cimbar搜索发现在Github有工具 然后对附件中的图片进行小厨房xor 得到一张新图片 利用工具进行跑出答案...
C与指针。
目录 1_指针理解 1.1变量的值 1.2变量的地址 1.3指针 1.4取变量的地址 2_分析指针 2.1分析指针变量的要素 2.2根据需求定义指针变量 3_指针的使用 3.1指针对变量的读操作 3.2指针对变量的写操作 4_指针占用空间的大小与位移 4.1指针占用空间的大小 4.2指针的位移…...
使用 Selenium 和 Python 爬取腾讯新闻:从基础到实践
使用 Selenium 和 Python 爬取腾讯新闻:从基础到实践 在这篇博客中,我们将介绍如何利用 Selenium 和 Python 爬取腾讯新闻的内容,并将结果保存到 CSV 文件中。本教程包含以下内容: 项目简介依赖安装实现功能的代码实现中的关键技…...
ElasticSearch的下载和基本使用(通过apifox)
1.概述 一个开源的高扩展的分布式全文检索引擎,近乎实时的存储,检索数据 2.安装路径 Elasticsearch 7.8.0 | Elastic 安装后启动elasticsearch-7.8.0\bin里的elasticsearch.bat文件, 启动后就可以访问本地的es库http://localhost:9200/ …...
处理HTTP请求的两种常见方式:多个处理器(Handler)、多个处理函数(HandleFunc),两者有什么区别
一、多个处理器(Handler)、多个处理函数(HandleFunc),两者的区别: 在Go语言中,处理HTTP请求的两种常见方式是使用http.Handler接口和http.HandleFunc函数。它们都用于定义如何处理HTTP请求,但它们之间有一些关键的区别࿱…...
在oracle下载jdk显示400 Bad Request Request Header Or Cookie Too Large
下载JDK17,官网地址:【https://www.oracle.com/cn/java/technologies/downloads/#jdk17-windows】 问题: 出现 400 Bad Request: Request Header Or Cookie Too Large 错误,通常是由于浏览器存储的 Cookies 或请求头过大所导致的…...
机器学习与深度学习-2-Softmax回归从零开始实现
机器学习与深度学习-2-Softmax回归从零开始实现 1 前言 内容来源于沐神的《动手学习深度学习》课程,本篇博客对于Softmax回归从零开始实现进行重述,依旧是根据Python编程的PEP8规范,将沐神的template代码进行简单的修改。近期有点懒散哈哈哈…...
Vue3之弹窗
文章目录 第一步、引入JS第二步、弹框 在前端开发语言Vue3,在管理端如何进行弹窗?下面根据API实现效果。 Element API文档: Element-plus文档 搭建环境可参考博客【 初探Vue3环境搭建与nvm使用】 第一步、引入JS <script lang"ts&…...
计算机的错误计算(一百七十一)
摘要 探讨 MATLAB 中秦九韶(Horner)多项式的错误计算。 例1. 用秦九韶(Horner)算法计算(一百零七)例1中多项式 直接贴图吧: 这样,MATLAB 给出的仍然是错误结果,因为准…...
利用Python爬虫精准获取淘宝商品详情的深度解析
在数字化时代,数据的价值日益凸显,尤其是在电子商务领域。淘宝作为中国最大的电商平台之一,拥有海量的商品数据,对于研究市场趋势、分析消费者行为等具有重要意义。本文将详细介绍如何使用Python编写爬虫程序,精准获取…...
_C#_串口助手_字符串拼接缺失问题(未知原理)
最近使用WPF开发串口助手时,遇到一个很奇怪的问题,无论是主线程、异步还是多线程,当串口接收速度达到0.016s一次以上,就会发生字符串缺失问题并且很卡。而0.016s就一切如常,仿佛0.015s与0.016s是天堑之隔。 同一份代码…...
volcano k8s 部署
下载volcano-development文件 官网 https://volcano.sh/zh/docs/installation/volcano-development.yaml wget https://raw.githubusercontent.com/volcano-sh/volcano/master/installer/volcano-development.yaml部署volcano 查下需要下载的镜像 grep vc- volcano-develo…...
Linux---对时/定时服务
文章目录 目录 文章目录 前言 一.对时服务 服务端配置 客户端配置 二.定时服务 单次定时任务 循环定时任务 前言 在当今信息化高速发展的时代,时间的准确性和任务的定时执行对于各种系统和服务来说至关重要。Linux操作系统,凭借其强大的功能和灵活的…...
13 设计模式之外观模式(家庭影院案例)
一、什么是外观模式? 1.定义 在日常生活中,许多人喜欢通过遥控器来控制家中的电视、音响、DVD 播放器等设备。虽然这些设备各自独立工作,但遥控器提供了一个简洁的界面,让用户可以轻松地操作多个设备。而这一设计理念正是 外观模…...
spring boot整合ArtemisMQ进行手动消息确认
1、SpringBoot整合ArtemisMQ进行手动消息确认使用的是: factory.setSessionTransacted(false); factory.setSessionAcknowledgeMode(ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE); 2、SpringBoot整合ActiveMQ进行手动消息确认使用的是: factory.setSe…...
dpwwn02靶场
靶机下载地址:https://download.vulnhub.com/dpwwn/dpwwn-02.zip 信息收集 ip add 查看kali Linux虚拟机的IP为:10.10.10.128 https://vulnhub.com/entry/dpwwn-2,343/中查看靶机的信息,IP固定为10.10.10.10 所以kali Linux添加仅主机网卡…...
展示和添加篮球队信息--laravel与elementplus
之前使用laravel与inertia来做过一样的功能,感觉不满意,因此再结合elementplus重做一遍,先展示下重做后的效果。重写后的代码相比之下比较优雅。 球队首页 球队添加页 球员首页 很明显的改变,我新增了侧栏菜单来控制局部模块(这里是指NBABasketba…...
K8S疑难概念理解——Pod,应该以哪种Kind来部署应用,为什么不直接Pod这种kind?
文章目录 一、Pod概念深度理解,为什么一般不直接以kindPod资源类型来部署应用?二、究竟应该以哪种资源类型来部署应用 一、Pod概念深度理解,为什么一般不直接以kindPod资源类型来部署应用? Pod是Kubernetes中的最小部署单元,可以包含一个或…...
centos7怎么安装keepalive+nginx
在CentOS 7上安装Keepalived和Nginx,可以按照以下步骤进行: 安装Nginx 添加Nginx到Yum源: rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm安装Nginx: yum install -y ng…...
DevOps工程技术价值流:Jenkins驱动的持续集成与交付实践
一、Jenkins系统概述 Jenkins:开源CI/CD引擎的佼佼者 Jenkins,作为一款基于Java的开源持续集成(CI)与持续交付(CD)系统,凭借其强大的插件生态系统,成为DevOps实践中不可或缺的核心…...
el-select 修改样式
这样漂亮的页面,搭配的却是一个白色风格的下拉框 ,这也过于刺眼。。。 调整后样式为: 灯红酒绿总有人看着眼杂,但将风格统一终究是上上选择。下面来处理这个问题。 分为两部分。 第一部分:是修改触发框的样式 第二部…...
文本内容处理命令和正则表达式
文本内容处理命令 grep 用来过滤文本内容,以匹配要查询的结果。 -m 数字 匹配几次后停止: grep -m 1 /root/etc/passwd #查找包含root的行 -v 取反 -i 忽略字符的大小写,默认的,可以不加 -n 显示匹配的行号 -c 统计匹配的…...
【PlantUML系列】类图(一)
目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类,类名后跟大括号,声明类的属性和方法。 属性:格式为{visibility} attributeName : AttributeType…...
【Leetcode Top 100】21. 合并两个有序链表
问题背景 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 数据约束 两个链表的节点数目范围是 [ 0 , 50 ] [0, 50] [0,50] − 100 ≤ N o d e . v a l ≤ 100 -100 \le Node.val \le 100 −100≤Node.val≤100 l 1 l_1 …...
【真正离线安装】Adobe Flash Player 32.0.0.156 插件离线安装包下载(无需联网安装)
网上很多人声称并提供的flash离线安装包是需要联网才能安装成功的,其实就是在线安装包,而这里提供的是真正的离线安装包,无需联网即可安装成功。 点击下面地址下载离线安装包: Adobe Flash Player 32.0.0.156 for IE Adobe Fla…...
UG NX二次开发(C#)-如何进行NX多版本的编译
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、以删除对象为例3、解决方案1、前言 由于UG NX的版本不同,新版本与旧版本开发过程中,如果是在一个工程中,其会出现低版本不能编译高版本NX的问题,这是因为高版本会引入新的函数,或者…...
Spark优化--开发调优、资源调优、数据倾斜调优和shuffle调优等
针对Spark优化,我们可以从多个角度进行,包括开发调优、资源调优、数据倾斜调优和shuffle调优等。以下是一些具体的优化方法: 1. 开发调优 避免创建重复的RDD:对于同一份数据,只应该创建一个RDD,避免创建多…...
911事件反思:灾难通信和ddos之间的取舍
流量分析与监控 建立基线流量模型:在正常情况下监控和记录网络流量,建立正常流量的基线。这样,当突发请求发生时,可以更容易地识别出流量的异常变化。 实时流量监控:使用流量分析工具实时监控网络流量,快速…...
网络安全之IP伪造
眼下非常多站点的涉及存在一些安全漏洞,黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》(建议搞IT的都要看下)中。亚伦斯沃茨(真实人物,神一般的存在)涉…...
算法笔记:力扣24. 两两交换链表中的节点
思路: 本题最简单的就是通过递归的形式去实现 class Solution {public ListNode swapPairs(ListNode head) {if(head null || head.next null){return head;}ListNode next head.next;head.next swapPairs(next.next);next.next head;return next;} } 对于链…...
Shell脚本小练习
学习了这么长时间Shell脚本,总得来一次小小的练习吧,那么请看下文! 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如53,然后利用设计的脚本…...