IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【python脚本】根据部分图片筛选原始数据 -> 正文阅读

[人工智能]【python脚本】根据部分图片筛选原始数据

背景

原始内容:若干图片数据、两个对应的txt文件(rec_gt.txt和Label.txt)
详细内容如下:
图片数据
在这里插入图片描述
rec_gt.tx
在这里插入图片描述

Label.txt
在这里插入图片描述

需求

任务

  1. 从图片文件夹内挑选一部分图片,形成一个新的文件夹
  2. 根据挑选的文件名在对应的两个txt文件内找到对应的行保留下来
  3. 将保留下来的内容形成新的txt文件和处理日志
  4. 可以根据挑选的图片,反向将剩余的图片挑出形成文件夹并生成对应的txt文件和处理日志

要求输出

  1. 包含对应图片名的Label_res.txt
  2. 包含对应图片名的rec_gt_res.txt
  3. 日志(包含总图片量、在lable内无对应的图片名列表、在rec内无对应的图片名列表)
  4. 在有反向需求的情况时:剩余图片(形成文件夹crop_img_require_reverse)、剩余图片对应的Label_res.txt、剩余图片对应的rec_gt_res.txt、日志

:图片文件在两个txt内有一定出入,举例:CB.1251.20211102062443_crop_0.jpg
在lable.txt内的图片文件名为CB.1251.20211102062443_crop_0.jpg
在rec_gt.txt内的图片文件名为CB.1251.20211102062443.jpg,没有”_crop_0”部分

实现

import os
import argparse
import shutil

# 读取某个文件夹下面的所有文件名 返回list
def get_all_file(path):
    all_file=[]
    for i in os.listdir(path):
        file_name=os.path.join(path,i)
        all_file.append(file_name)
    return all_file


# 读取txt文件的内容 返回list
def get_file_cotent(path):
    all_cotent=[]
    with open(path, encoding='utf-8') as f:
        while True:
            line = f.readline()
            if line:
                all_cotent.append(line)
            else:
                break
    return all_cotent


if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='manual to this script')
    parser.add_argument("--input_path", type=str, default="20211208")
    parser.add_argument("--reverse", action='store_true')
    args = parser.parse_args()
    input_path=args.input_path # 读取的文件名 只需要文件名 不需要路径
    reverse=args.reverse # 是否反向操作

    resoure_file_path=os.path.join(os.path.abspath('.'),input_path) # 源文件的路径
    target_file_path=os.path.join(os.path.abspath('.'),input_path+"_res") #结果保存路劲

    # 读取rec_gt内容以及其中对应的图片名
    rec_gt=get_file_cotent(os.path.join(resoure_file_path,'rec_gt.txt')) # 'crop_img/CB.1251.20211102062443_crop_0.jpg	017981'
    all_rec_gt_name=[i for i in map(lambda x:x.split()[0].split('/')[1],rec_gt)] # CB.5903.20211102125747_crop_0.jpg

    # 读取label内容以及其中对应的图片名
    label=get_file_cotent(os.path.join(resoure_file_path,"Label.txt")) # '1251/CB.1251.20211102062443.jpg	[{"transcription": "017981", "points": [[529, 582], [576, 574], [607, 788], [562, 795]], "difficult": false}]'
    all_label_name=[i for i in map(lambda x:x.split()[0].split('/')[1],label)] # CB.4611.20211102114755.jpg

    # 读取所有图片名
    all_img=get_all_file(os.path.join(resoure_file_path,"crop_img")) # 'C:\Users\86178\Desktop\work\20211208\crop_img\CB.1251.20211102090718_crop_0.jpg'
    all_img=[i for i in map(lambda x:x.split("\\")[-1],all_img)] # 'CB.1251.20211102062443_crop_0.jpg'

    # 读取需要处理的图片名
    all_img_require=get_all_file(os.path.join(target_file_path,"crop_img_require")) # 'C:\Users\86178\Desktop\work\20211208_res\crop_img_require\CB.1251.20211102090718_crop_0.jpg'
    all_img_require=[i for i in map(lambda x:x.split("\\")[-1],all_img_require)] # 'CB.1251.20211102062443_crop_0.jpg'

    
    # 反向操作
    if reverse:
        # 计算得到反向操作的图片
        all_img_require=[i for i in all_img if i not in all_img_require]
        # 创建文件夹存放反向操作图片
        if not os.path.exists(os.path.join(target_file_path,'crop_img_require_reverse')):
            os.mkdir(os.path.join(target_file_path,'crop_img_require_reverse'))
        # 反向操作图片转移到我们创建的文件夹中
        for i in all_img_require:
            src=os.path.join(os.path.join(resoure_file_path,'crop_img'),i)
            dst=os.path.join(os.path.join(target_file_path,'crop_img_require_reverse'),i)
            shutil.move(src, dst)

    # 两类错误
    error1=0 # 图片没有对应rec
    error2=0 # 图片没有对应label


    # 处理需求
    with open(os.path.join(target_file_path,'rec_gt_res.txt'),"w") as f1, open(os.path.join(target_file_path,'Label_res.txt'),"w") as f2,open(os.path.join(target_file_path,'log.txt'),"w") as f3:
        for img in all_img_require:
            # file:'CB.1251.20211102062443_crop_0.jpg'
            try:
                rec_idx = all_rec_gt_name.index(img)
                f1.write(rec_gt[rec_idx])
            except:
                f3.write(img+"没有对应rec\n")
                error1+=1
            try:
                label_idx = all_label_name.index(img.split('_')[0] + ".jpg")
                f2.write(label[label_idx])
            except:
                f3.write(img + "没有对应label\n")
                error2 += 1
        f3.write("图片总数是:"+str(len(all_img_require))+"\t没问题图片总数是:"+str(len(all_img_require)-error1-error2)+"\t没有对应rec的图片总数是:"+str(error1)+"\t没有对应label的图片总数是:"+str(error2))


结果展示

使用场景
当前目录下有三个文件,切图文件,结果文件和work.py文件
在这里插入图片描述

切图文件包含图片和两个txt文件
在这里插入图片描述
结果文件夹包含需要处理的图片文件夹
在这里插入图片描述
使用1:运行python work.py --input_path=20211208之后生成需要处理文件对应的两个txt文件和一个日志文件。
在这里插入图片描述

使用2:运行python work.py --input_path=20211208 --reverse之后生成需要处理文件反向的一个文件夹,以及其对应的两个txt文件和一个日志文件。
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:19:34  更:2022-04-27 11:22:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:41:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码