如何替换PaddleOCR中的Label.txt文件中识别错的身份证号码

如何替换PaddleOCR中的Label.txt文件中识别错的身份证号码

  • 1.准备
  • 2.导包
  • 3.路径
  • 4.创建保存rec_shangye.txt中每行文本内容的列表
  • 5.创建姓名和身份证号码的列表,并把rec_list中的内容添加进去
  • 6.把名称列表和号码列表用键值对的形式保存在new_dict字典中
  • 7.读取Label.txt中的所有内容,并保存在列表中(方便数据处理)
  • 8.两种方法完成身份证号码替换,把检测和识别的结果都用正确的号码去替换
  • 9.完整代码呈现

1.准备

先找到PaddleOCR检测和识别后的结果文件(Label.txt),还有一份正确无误的身份证照片名字和身份证号码对应的文档(rec_shangye.txt),还有替换后的正确的结果文件(Label2.txt)

2.导包

import re

3.路径

label_path = "./Label.txt"  # paddleocr的已标好的label路径
new_label_path = "./Label2.txt"  # paddleocr的替换后的新的label路径
rec_path = "./rec_shangye.txt"  # paddleocr的正确结果文件的路径

4.创建保存rec_shangye.txt中每行文本内容的列表

rec_list = []  # 创建保存rec_shangye.txt中每行文本内容的列表
with open(rec_path, "r") as r_file2:
    for r2 in r_file2:
        # print(r2)  # 标准号码参考表的每一行文本信息
        r2_content = r2.split("\t")  # 把每一行内容用\t切分开,变成两个元素
        rec_list.append(r2_content)  # 把这两个元素一起保存在列表中保存在列表中
# print(rec_list)  # [['0_0714.jpg', '622960866786784911\n'], ['1_0714.jpg', '6226822014401336344\n'], ...]

5.创建姓名和身份证号码的列表,并把rec_list中的内容添加进去

name_list = []  # 照片名字列表
number_list = []  # 身份证号码列表
for rec in rec_list:
    # print(rec)  # 打印显示每一个遍历的元素
    name = rec[0]  # 元素的第一个是照片名字
    number = rec[1].replace("\n", "")  # 元素的第二个去掉\n后是身份证号码
    name_list.append(name)  # 把照片名字添加到照片名字列表中
    number_list.append(number)  # 把身份证号码添加到身份证号码列表中
# print(name_list)  # 显示照片名字列表  ['0_0714.jpg', '1_0714.jpg', ...]
# print(number_list)  # 显示身份证号码列表  ['622960866786784911', '6226822014401336344', ...]

6.把名称列表和号码列表用键值对的形式保存在new_dict字典中

new_dict = {}  # 创建新的字典
for i, na in enumerate(name_list):
    for j, num in enumerate(number_list):
        if i == j:  # 当照片名字和身份证号码的索引一致,把这一对值用键值对匹配的方式存到字典中
            new_dict[na] = num
print(new_dict)  # 把每一组数据用键值对存到字典中
for i, v in enumerate(new_dict):
    print(i, v)  # 索引和键:0 0_0714.jpg    1 1_0714.jpg

7.读取Label.txt中的所有内容,并保存在列表中(方便数据处理)

with open(label_path, "r") as r_file:
    r_contents = r_file.readlines()  # 把Label.txt中的所有文本内容存入列表
print(r_contents)  # 显示列表的内容

8.两种方法完成身份证号码替换,把检测和识别的结果都用正确的号码去替换

# 法一:全部写入writelines()
# with open(new_label_path, "w+") as w_file:
#     for r in r_contents:
#         print(r)
#         id_name = r.split("\t")[0].split("/")[1]  # 身份证照片名字
#         id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '')  # 去掉""和空格后的身份证号码
#         print("old_id_number: ", id_number)  # 显示旧的身份证号码
#         for i, v in enumerate(new_dict):  # 遍历身份证照片和身份证号码匹配的字典
#             if id_name == v:  # 身份证照片名字对应
#                 new_id_number = new_dict[v]  # 取出字典的这张照片对应的值(身份证号码)并赋值给变量new_id_number
#                 print("new_id_number: ", new_id_number)  # 显示新的身份证号码
#         a = re.sub(id_number, new_id_number, r)
#         w_file.writelines(a)


# 法二:一行一行单独写入write()
with open(label_path, "r") as r_file:
    with open(new_label_path, "w") as w_file:
        for r in r_file:
            # print(r)  # Label.txt中的每一个元素
            r_content = r.split("\t")
            id_name = r_content[0].split("/")[1]  # 照片名字
            id_number = r_content[1].split(":")[1].split(",")[0].replace('"', '').replace(' ', '')  # 去掉""和空格后的身份证号码
            # id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '')  # 去掉""和空格后的身份证号码
            print("--------------------------------------")
            print("old_id_number: ", id_number)  # 打印旧的身份证号码
            for i, v in enumerate(new_dict):  # 遍历身份证照片和身份证号码匹配的字典
                if id_name == v:  # 文件中的身份证照片名字和new_dict字典中的名字对应
                    new_id_number = new_dict[v]  # 取出字典中对应的字典的值
                    print("new_id_number: ", new_id_number)  # 打印新的身份证号码
            a = re.sub(id_number, new_id_number, r)  # 把旧的号码替换成新的号码
            w_file.write(a)  # 把替换后的结果写入Label2.txt文件中,则真实的txt文件中也完成了替换

9.完整代码呈现


import re

label_path = "./Label.txt"  # paddleocr的已标好的label路径
new_label_path = "./Label2.txt"  # paddleocr的替换后的新的label路径
rec_path = "./rec_shangye.txt"  # paddleocr的正确结果文件的路径


rec_list = []  # 创建保存rec_shangye.txt中每行文本内容的列表
with open(rec_path, "r") as r_file2:
    for r2 in r_file2:
        # print(r2)  # 标准号码参考表的每一行文本信息
        r2_content = r2.split("\t")  # 把每一行内容用\t切分开,变成两个元素
        rec_list.append(r2_content)  # 把这两个元素一起保存在列表中保存在列表中
# print(rec_list)  # [['0_0714.jpg', '622960866786784911\n'], ['1_0714.jpg', '6226822014401336344\n'], ...]


name_list = []  # 照片名字列表
number_list = []  # 身份证号码列表
for rec in rec_list:
    # print(rec)  # 打印显示每一个遍历的元素
    name = rec[0]  # 元素的第一个是照片名字
    number = rec[1].replace("\n", "")  # 元素的第二个去掉\n后是身份证号码
    name_list.append(name)  # 把照片名字添加到照片名字列表中
    number_list.append(number)  # 把身份证号码添加到身份证号码列表中
# print(name_list)  # 显示照片名字列表  ['0_0714.jpg', '1_0714.jpg', ...]
# print(number_list)  # 显示身份证号码列表  ['622960866786784911', '6226822014401336344', ...]


new_dict = {}  # 创建新的字典
for i, na in enumerate(name_list):
    for j, num in enumerate(number_list):
        if i == j:  # 当照片名字和身份证号码的索引一致,把这一对值用键值对匹配的方式存到字典中
            new_dict[na] = num
print(new_dict)  # 把每一组数据用键值对存到字典中
for i, v in enumerate(new_dict):
    print(i, v)  # 索引和键:0 0_0714.jpg    1 1_0714.jpg


with open(label_path, "r") as r_file:
    r_contents = r_file.readlines()  # 把Label.txt中的所有文本内容存入列表
print(r_contents)  # 显示列表的内容


# 法一:
# with open(new_label_path, "w+") as w_file:
#     for r in r_contents:
#         print(r)
#         id_name = r.split("\t")[0].split("/")[1]  # 身份证照片名字
#         id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '')  # 去掉""和空格后的身份证号码
#         print("old_id_number: ", id_number)  # 显示旧的身份证号码
#         for i, v in enumerate(new_dict):  # 遍历身份证照片和身份证号码匹配的字典
#             if id_name == v:  # 身份证照片名字对应
#                 new_id_number = new_dict[v]  # 取出字典的这张照片对应的值(身份证号码)并赋值给变量new_id_number
#                 print("new_id_number: ", new_id_number)  # 显示新的身份证号码
#         a = re.sub(id_number, new_id_number, r)
#         w_file.writelines(a)


# 法二:
with open(label_path, "r") as r_file:
    with open(new_label_path, "w") as w_file:
        for r in r_file:
            # print(r)  # Label.txt中的每一个元素
            r_content = r.split("\t")
            id_name = r_content[0].split("/")[1]  # 照片名字
            id_number = r_content[1].split(":")[1].split(",")[0].replace('"', '').replace(' ', '')  # 去掉""和空格后的身份证号码
            # id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '')  # 去掉""和空格后的身份证号码
            print("--------------------------------------")
            print("old_id_number: ", id_number)  # 打印旧的身份证号码
            for i, v in enumerate(new_dict):  # 遍历身份证照片和身份证号码匹配的字典
                if id_name == v:  # 文件中的身份证照片名字和new_dict字典中的名字对应
                    new_id_number = new_dict[v]  # 取出字典中对应的字典的值
                    print("new_id_number: ", new_id_number)  # 打印新的身份证号码
            a = re.sub(id_number, new_id_number, r)  # 把旧的号码替换成新的号码
            w_file.write(a)  # 把替换后的结果写入Label2.txt文件中,则真实的txt文件中也完成了替换

感谢大家的关注和支持
希望我写的文章能够让你们得到价值有所收获
一直在路上,还请各位多多指正!

你可能感兴趣的:(PaddleOCR,python,人工智能,数据挖掘)