lijin671 发表于 2023-11-27 11:40

自动识别手写文字进行批量重命名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:10

本帖最后由 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-25 10:12

本帖最后由 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

dbns 发表于 2023-11-27 12:03

看着不错

52soft 发表于 2023-11-27 12:31

好技术,谢谢分享

jishufanzi 发表于 2023-11-27 12:39

学习了,感谢分享!

想吃山猪肉 发表于 2023-11-27 12:41

感觉以后会用到,谢谢分享

jasonwei 发表于 2023-11-27 12:44

感觉还是不错的

2025888543 发表于 2023-11-27 13:22

感谢大佬

ysjd22 发表于 2023-11-27 14:08

学习一下代码

genz 发表于 2023-11-27 14:53

学到了,谢谢分享

sai609 发表于 2023-11-27 15:26

图片扫描的PDF书,做orc识别,导出为Word或者txt或者xlxs,有啥软件or代码推荐?
页: [1] 2 3 4
查看完整版本: 自动识别手写文字进行批量重命名pdf文件