# python-baiduocr-pic **Repository Path**: windstarry/python-baiduocr-pic ## Basic Information - **Project Name**: python-baiduocr-pic - **Description**: Python调用百度AI实现图片上表格识别 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-06-30 - **Last Updated**: 2024-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python调用百度AI实现图片上表格识别 ## 安装需要的库 ```shell pip install baidu-aip pip install requests pip install Pillow pip install pydantic ``` ## 注册百度AI开放平台 详细注册过程参考[只要10分钟 快速掌握文字识别](https://ai.baidu.com/forum/topic/show/867951) 只需走到 “1.6 获取密钥” 即可。然后记录下APP_ID、API_KEY、SECRET_KEY 根目录下创建.env.dev文件,内容如下: ```shell # 你申请的 APP_ID = 24800359 API_KEY = PrmTtmrqkeaqhvxOPEN4eZVt SECRET_KEY = LOFpCH6wpLV7xZPG0DTcvV4x1Sqyvmk9 ``` ## 调用AipOcr库识别表格文字 1. 以二进制方式打开图片,读取 2. 然后调用表格识别模块tableRecognitionAsync(),并将返回值存入变量table中并查看 3. table是一个字典,其中有2个键,一个叫result,一个叫log_id。需要的是result中的request_id,可以通过如下语句获取: ```python request_id = table['result'][0]['request_id'] ``` 4. 通过这个ID,可以获取识别完成后所保存的Excel表格的下载地址。将request_id传入getTableRecognitionResult()就能获取结果。 ```python result = client.getTableRecognitionResult(request_id) ``` 5. 打印一下结果result,就能看到下面的内容。其中result_data对应的那个网址就是Excel表格的下载地址。 ## 可能遇到的问题 - 在开始前,需要检查图片的大小,必须在1K~4M之间,不然会报错“‘error_msg’: ‘image size error, image is too big or too small, upper limit 4M, lower limit 1k, please check your param’” - 图片像素width和height不能超过4096px, 超过则报错“error_msg”,增加图片大小修改功能,对图片进行裁剪不然会出现错误 ```python def change_image_size(file_name): im = Image.open(file_name) filename, extension = os.path.splitext(file_name) filename = re.sub('source', 'image', filename) width, height = im.size if width > 4096: im.resize((4096, height), Image.ANTIALIAS) width, height = im.size if height > 4096: count = math.ceil(height / 4096) pic_height = int(height//count) for i in range(count): box = (0,i*pic_height, width, (i+1)*pic_height) new_im = im.crop(box) # 保存小图片 new_im.save(filename + "_" + str(i) + extension) ``` ## 批量操作 1. 先获取所有图片的路径,存入pic列表 2. 将所有图片逐个传入表格识别接口,获取其请求ID及存有识别结果的Excel文件的下载地址。在提取Excel下载路径之前,需要先判断识别是否完成。这是通过识别结果返回的字典中的’ret_msg’对应的值来判断的。只有当它是“已完成”时,才能获得下载链接。此处用了while循环,每隔2秒刷新一下状态,直到状态是“已完成”时,才提取链接。然后使用requests.get()获取下载链接信息,写入Excel文件。Excel自动命名及下载结果.