将 0 110 200 沉头 这种格式的数据转成json
# -*-coding:utf-8 -*-
import os
import json
import cv2
import sys
from pathlib import Path
import codecs
import base64
norm_size = [
{
"id": "M3-C",
"w": 58,
"h": 58,
"name": "M3-沉头"
},
{
"id": "M3-P",
"w": 50,
"h": 50,
"name": "M3-盘头"
},
{
"id": "M3-K",
"w": 39,
"h": 39,
"name": "M3-空"
}
]
def trans_img(json_dir, img_path, end):
print(img_path)
img = cv2.imread(os.path.join(json_dir,img_path))
json_res = {
"shapes": [],
"imagePath": "",
"imageData": ""
}
json_res["shapes"] = []
json_path = os.path.join(json_dir, img_path.split(end)[0]+ ".json")
print(json_path)
_, buffer = cv2.imencode(end, img)
img_base64 = base64.b64encode(buffer).decode('utf-8')
json_res["imageData"] = img_base64
json_res["imagePath"] = f"./{img_path}"
if not os.path.exists(os.path.join(json_dir, img_path.split(end)[0]+"_refine.txt")):
return
with open(os.path.join(json_dir, img_path.split(end)[0]+"_refine.txt"), "r", encoding='gbk') as f:
lines = f.readlines()
for i, line in enumerate(lines):
if i == 0:
continue
split_list = line.split(' ')
if len(split_list) >=3 :
if type(split_list) == int:
item = norm_size[split_list[3]]
else:
result = [item for item in norm_size if item["name"] == split_list[3].replace("\n", "")]
item = result[0]
arr =[
[float(split_list[1]) - item["w"]/2, float(split_list[2]) -item["h"]/2],
[float(split_list[1]) + item["w"]/2, float(split_list[2]) +item["h"]/2],
]
else:
item = norm_size[2]
arr =[
[float(split_list[0]) - item["w"]/2, float(split_list[1]) -item["h"]/2],
[float(split_list[0]) + item["w"]/2, float(split_list[1]) +item["h"]/2],
]
json_res["shapes"].append({
"label": item["id"],
"points": arr,
"shape_type": "rectangle"
})
with codecs.open(json_path, "w") as f:
json.dump(json_res, f)
if __name__ == "__main__":
dir = "1478/kong"
for item in os.listdir(dir):
if item.endswith(".jpg") or item.endswith(".bmp"):
trans_img(dir, item, ".bmp")