fake 发表于 2022-8-20 08:47

python计数方面的一些问题

import os
import time
# pip install baidu-aip 来进行安装
from aip import AipOcr
# 新建一个AipOcr对象
# appId apiKey secretKey 需要在https://cloud.baidu.com/product/ocr.html免费开通文字识别服务后获取
config = {
    'appId': 'XXXXXXXX',
    'apiKey': 'XXXXXXXX',
    'secretKey': 'XXXXXXXX'
}
client = AipOcr(**config)

pic_dir = r"D:/test/4/"


# 读取图片
def get_file_content(file_path):
    with open(file_path, 'rb') as fp:
      return fp.read()


# 识别图片里的文字
def img_to_str(image_path):
    image = get_file_content(image_path)
    # 调用通用文字识别, 图片参数为本地图片
    result = client.basicAccurate(image)
    # 结果拼接返回
    words_list = []
    if 'words_result' in result:
      if len(result['words_result']) > 0:
            for w in result['words_result']:
                words_list.append(w['words'])
            print(words_list)
            #取施工区域和施工内容后面的字符后进行组合
            l1 = str()
            l2 = str()
            l3 = l1
            l4 = l2
            l5 = l3 + l4

            file_name = get_code(words_list, 4)
            if file_name == None:
                file_name = 'None' + '-' + str(time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()))
            print(file_name)
            try:
                os.rename(image_path, pic_dir + l5.replace("/", "") + '.jpg')
            except:os.rename(image_path, pic_dir + l5.replace("/", "") +"1"+ '.jpg')


# 获取字符串列表中最长的字符串
def get_longest_str(str_list):
    return max(str_list, key=len)

# 获取字符串列表中7位服务编号、11位快速服务代码
def get_code(str_list, length):
    code_num = ''
    for str in str_list:
      if len(str.strip()) == length:
            code_num = str
            return code_num
    return None

# 遍历某个文件夹下所有图片
def query_picture(dir_path):
    pic_path_list = []
    for filename in os.listdir(dir_path):
      pic_path_list.append(dir_path + filename)
    return pic_path_list


if __name__ == '__main__':
    pic_list = query_picture(pic_dir)
    if len(pic_list) > 0:
      for i in pic_list:
            img_to_str(i)


怎么才能实现能看到我处理了多少张图片呢?还有这个百度的OCR有次数限制,如果我换成本地识别代码会不会大范围修改呢?求大佬解答

grekevin 发表于 2022-8-20 11:30

本帖最后由 grekevin 于 2022-8-20 11:31 编辑

个人感觉你这个img_to_str()函数应该拆成三个函数
一个专门进行图片内容识别的函数A,返回一定格式的识别到的内容,比如识别到文字的列表
然后再写专门处理识别内容的方法B,处理后最后返回需要的最终目标内容
最后写一个重命名函数C
这样到时候业务有变动,就可以单独修改某一个函数就行
以上仅作为建议

如果你要更换识别图片的库,也只需要修改img_to_str识别那部分的代码,其他都不用改动的

你可以定义一个全局变量,重命名一个图片就让这个全局变量+1,最后打印这个全局变量就行了

JiechaoWu 发表于 2022-8-20 11:45

可以了解一下tqdm包在for循环上可以直接打印出进度条
本地部署ocr服务的话不清楚还能不能用aipocr库调用我这边使用过的本地ocr服务一般提供一个接受文件或者是图片base64编码的接口 自己用requests库按照接口格式进行调用即可

fake 发表于 2022-8-20 11:58

grekevin 发表于 2022-8-20 11:30
个人感觉你这个img_to_str()函数应该拆成三个函数
一个专门进行图片内容识别的函数A,返回一定格式的识别 ...

谢谢大佬。

fake 发表于 2022-8-20 11:59

JiechaoWu 发表于 2022-8-20 11:45
可以了解一下tqdm包在for循环上可以直接打印出进度条
本地部署ocr服务的话不清楚还能不能用aipocr库调 ...

好的,谢谢大佬。

DKsnail 发表于 2022-8-20 12:45

页: [1]
查看完整版本: python计数方面的一些问题