自动识别手写文字进行批量重命名pdf文件
本帖最后由 lijin671 于 2024-3-27 10:04 编辑import os
from aip import AipOcr
import base64
import urllib
import requests
# Poppler 路径
poppler_path = r'D:\project\pythonProject\poppler23.11.0\Library\bin'
# 初始化百度OCR
APP_ID = 'your_app_id' #替换成你的app_id
API_KEY = 'your_api_key' #替换成你的api_key
SECRET_KEY = 'your_secret_key' #替换成你的secret_key
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
def main():
url = "https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting?access_token=" + get_access_token()
# PDF 文件夹路径
pdf_path = './'
for filename in os.listdir(pdf_path):
if filename.endswith('.pdf'):
pdf_folder = os.path.join(pdf_path, filename)
pdf_base64 = get_file_content_as_base64(pdf_folder, True)
payload = f'pdf_file={pdf_base64}&detect_direction=false&probability=false'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
if response.status_code == 200:
result = response.json()
if 'words_result' in result:
text = result['words_result']['words']
# 根据识别的文字进行文件重命名等操作
# 这里可以根据具体的识别结果进行相应的处理,例如提取姓名后进行文件重命名等操作
print(f"识别到的文字为:{text}")
file_path, file_ext = os.path.splitext(pdf_folder)
new_file_path = f"{text}" + file_ext
os.rename(pdf_folder, new_file_path)
print(f"文件已重命名为:{new_file_path}")
else:
print("未能识别到文字")
else:
print(f"请求失败: {response.text}")
def get_file_content_as_base64(path, urlencoded=False):
"""
获取文件base64编码
:param path: 文件路径
:param urlencoded: 是否对结果进行urlencoded
:return: base64编码信息
"""
with open(path, "rb") as f:
content = base64.b64encode(f.read()).decode("utf8")
if urlencoded:
content = urllib.parse.quote_plus(content)
return content
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == '__main__':
main()
将代码复制并进行对应的修改,可通过pyinstaller -F -c xxx.py#xxx.py更改为你的py文件
将py文件打包成可执行的exe文件,然后放入pdf文件目录下,双击运行即可。这里用的是百度智能云识别。
###2024/03/26更新
稍微改了下,做了三个参数,在弹窗让你输入,用法的话,还是放进你要识别手写的PDF路径中,不过这个因为是给人事同事用的,用来识别合同pdf然后重命名,所以其实不一定是适合你的情况,识别出来的列表不一定是一样的,可能需要调整,所以我把源代码也放进来,你们可以自己调整words_result识别的结果。
##又做了调整,直接把结果集下标也做了弹窗输入,你可以在百度智能云控制台 (baidu.com)这里调试一下你要识别的结果是第几个,然后在弹窗中的小标栏里输入即可。
###2024/03/27上班摸鱼,又浅浅修改了一下,将pdf路径也加进了弹窗,可以不用将exe文件放进要修改的pdf里面了,不过因为早上来摸鱼改了,改的并不多就是了,不过要注意,修改后的pdf会移动到你exe当前路径下,后续有空摸鱼的时候也添加个路径输入框吧。成品exe放在下面链接中:ocr_text_new.exe
https://wwm.lanzout.com/b0538flqj 密码:2s8i
本帖最后由 63331069 于 2024-3-28 22:29 编辑
Traceback (most recent call last):
File "ocr_text.py", line 123, in <module>
File "ocr_text.py", line 95, in main
FileNotFoundError: 系统找不到指定的路径。: 'D:\\www\\12.pdf' -> 'Type/Specification.pdf'
路径没有使用 中文。 就出现上面的提示。
112440这个是成功状态。其他两个不成功
还有一个 能复制的那种PDF 基本上都可以 成功,但是我大部分使用的PDF 都是我自己扫描仪扫描出来的PDF 。成功率不是很高。能否换一个思路, 提取指定坐标 里的文字。 这样的话,可能成功率会比较高一点.
{
"words": "型号/规格",
"location": {
"top": 420,
"left": 95,
"width": 99,
"height": 17
}
},
这段话应该就是坐标 对吧
这段是从百度智能云里 调试里下载来的
本帖最后由 lijin671 于 2024-3-26 14:34 编辑
63331069 发表于 2024-3-25 09:28
兄弟,你那边能不能改动一下。我们小白可以修改 智能云 那三个 KEY。我们改成自己的KEY。这样就不耽误 ...
稍微改了下,就把三个参数做个弹窗让你输入,用法的话,还是放进你要识别手写的PDF路径中,不过这个因为是给人事同事用的,用来识别合同pdf然后重命名,所以其实不一定是适合你的情况,识别出来的列表不一定是一样的,可能需要调整,所以我把源代码也放进来,你们可以自己调整words_result识别的结果。
##又做了调整,直接把结果集下标也做了弹窗输入,你可以在百度智能云控制台 (baidu.com)这里调试一下你要识别的结果是第几个,然后在弹窗中输入即可。
https://wwm.lanzout.com/b0538flqj 密码:2s8i
看着不错 好技术,谢谢分享 学习了,感谢分享! 感觉以后会用到,谢谢分享 感觉还是不错的 感谢大佬 学习一下代码 学到了,谢谢分享 图片扫描的PDF书,做orc识别,导出为Word或者txt或者xlxs,有啥软件or代码推荐?