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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据标注--文本行检测标注项目,结果文件 json 数据重组 -> 正文阅读

[大数据]数据标注--文本行检测标注项目,结果文件 json 数据重组

标注工具:VGG Image Annotator

效果:

?

?

使用方法:

1,放在目录下双击运行

2,目录下打开cmd,传入参数 log,可以保存日志,查看结果

mod_json.exe log

?3,源码

# -*- coding:utf-8 -*-
import json
import sys
import os
import shutil
from pip._vendor.distlib.compat import raw_input

def mod_jsonVal(file,logFlag,logFile):
    with open(file,encoding="utf-8") as f:
        data = json.load(f)

        # 每张图
        for jpgIndex,jpg in enumerate(data['_via_img_metadata']):
            flag = False
            # 一张图中的每个框
            regions = data['_via_img_metadata'][jpg]['regions']

            # 筛选 图中的每个矩形框 rect
            for index,r in enumerate(regions):
                if (r['shape_attributes']['name'] == "rect"):

                    s = '{} {} {} {}'.format("原数据",index,":",regions[index])
                    print(s)
                    save_log(logFlag,logFile,s)

                    # 矩形数据转化四边形数据
                    regions[index]['shape_attributes'] = mod_RectToPolygon(regions,index, r)

                    s1 = '{} {} {} {}'.format("修改后", index, ":", regions[index])
                    print(s1)
                    save_log(logFlag,logFile,s1)

                    flag = True

            if flag:
                save_newVal(data, file)
                s = '{}{} {}'.format(jpg, jpgIndex + 1, "有矩形,已修改\n")
                print(s)
                save_log(logFlag,logFile,s)
            else:
                s = '{}{} {}'.format(jpg, jpgIndex+1,"没有发现矩形,无需修改")
                print(s)
                save_log(logFlag,logFile, s)

# 数据重组 矩形转四边形
def mod_RectToPolygon(regions,index,r):
    '''{'name': 'rect', 'x': 477, 'y': 905, 'width': 92, 'height': 42} 转换成如下
    {'name': 'polygon', 'all_points_x': [477, 569, 569, 477], 'all_points_y': [905, 905, 946, 946]}'''

    # 取得矩形的有效值
    x = r['shape_attributes']['x']
    y = r['shape_attributes']['y']
    width = r['shape_attributes']['width']
    height = r['shape_attributes']['height']

    # 矩形转换成多边形数据
    j = {"name": "polygon", "all_points_x": '', "all_points_y": ''}
    # 必须转化为json,否则会变成字符串 --> 'all_points_x': [2606, 2652, 2652, 2606]
    j['all_points_x'] = json.loads("[" + str(x) + "," + str(x + width) + "," + str(x + width) + "," + str(x) + "]")
    j['all_points_y'] = json.loads("[" + str(y) + "," + str(y) + "," + str(y + height) + "," + str(y + height) + "]")

    return j

# 保存新的json
def save_newVal(data1,file):
    with open(file, 'w',encoding='utf-8') as f:
        json.dump(data1, f, ensure_ascii=False, separators=(',', ':'))

# 遍历 含子目录,筛出 json 文件,并且备份
def list_all_files(rootdir):
    _files = []
    list = os.listdir(rootdir)  # 列出文件夹下所有的目录与文件
    for i in range(0, len(list)):
        path = os.path.join(rootdir, list[i])
        # 是目录则重新调用本方法,递归
        if os.path.isdir(path):_files.extend(list_all_files(path))

        # 取得文件,筛出 json 文件
        if os.path.isfile(path) and os.path.splitext(path)[1] == ".json":
            _files.append(path)

            # 备份,已备份则跳过。在原目录下
            bak = path+".bak"
            if not os.path.isfile(bak):
                shutil.copy(path,bak)
                print("备份了:",bak)

            # 删除备份
            # if os.path.isfile(path+".bak"):os.remove(path+".bak")

    return _files

# 日志保存
def save_log(l,logpath,logs):
    if (l): open(logpath, "a").write('{}'.format(logs+'\n'))

# 1.遍历目录,含子目录
# 2.备份
# 3.重组json数据
# 4.日志保存(可选)

# currPath = "E:\\cdzj\\文本行检测标注-test\\文本行检测标注-693"
currPath = os.path.abspath('.').replace("\\","\\\\") # 转义
raw_input("处理当前目录 "+currPath+" (含子目录)下的所有 json文件,按回车确认!") #回车等待确认

# 是否使用日志。如果传入的参数是 log ,就保存日志到json文件同目录下
for _fs in list_all_files(currPath):
    if(len(sys.argv) ==2 ):
        if (sys.argv[1] == "log"):
            print("\n" + _fs)
            logFile = _fs.replace("json", "log.txt")  # 日志文件完整路径
            save_log(True, logFile, _fs + "\n")
            mod_jsonVal(_fs, True, logFile)
    else:
        mod_jsonVal(_fs, False, _fs.replace("json", "log.txt"))

# 等待回车退出
print("\n为了保证结果可用性,不妨重新加载项目看看,检查矩形是否成功转换为矩形")
raw_input("\n按回车退出!每次运行时传入参数 log 可以保存日志哦 「红叶」\n")

下载:

mod_json.exe

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:05:45  更:2021-12-07 12:06:18 
 
开发: 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/24 10:02:48-

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