TideDra commited on
Commit
38601f1
1 Parent(s): f967ea9
Files changed (5) hide show
  1. .gitignore +2 -0
  2. app.py +111 -0
  3. assets/example.png +0 -0
  4. assets/example2.png +0 -0
  5. requirements.txt +1 -0
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ data_dir/
2
+ raw_annotations
app.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from pathlib import Path
3
+ import os
4
+ from uuid import uuid4
5
+ from threading import Lock
6
+ import gradio as gr
7
+ import jsonlines
8
+ from huggingface_hub import CommitScheduler, snapshot_download
9
+
10
+ snapshot_download(repo_id="TideDra/HDBench", local_dir="./",repo_type="dataset",allow_patterns=["data_dir/*"])
11
+
12
+ JSON_DATASET_DIR = Path("raw_annotations")
13
+ JSON_DATASET_DIR.mkdir(parents=True, exist_ok=True)
14
+
15
+ JSON_DATASET_PATH = JSON_DATASET_DIR / f"{uuid4()}.json"
16
+
17
+ scheduler = CommitScheduler(
18
+ repo_id="HDBench",
19
+ repo_type="dataset",
20
+ folder_path=JSON_DATASET_DIR,
21
+ path_in_repo="data_dir/raw_annotations",
22
+ token=os.environ["HF_TOKEN"],
23
+ )
24
+ global dataset
25
+ with open("./data_dir/qwenvl_test2017.json") as f:
26
+ dataset = json.load(f)
27
+
28
+ dataset = {d['image']:d for d in dataset}
29
+
30
+ if os.path.exists("./data_dir/raw_annotations"):
31
+ exist_annotations = os.listdir("./data_dir/raw_annotations")
32
+ for anno in exist_annotations:
33
+ anno = os.path.join("./data_dir/raw_annotations",anno)
34
+ with jsonlines.open(anno) as reader:
35
+ for obj in reader:
36
+ if obj['image'] in dataset:
37
+ dataset.pop(obj['image'])
38
+
39
+ dataset = list(dataset.values())
40
+
41
+ dispatcher_lock = Lock()
42
+
43
+ def submit(name: str,answer:str,img:str) -> str:
44
+ global dataset
45
+ global JSON_DATASET_DIR
46
+ global JSON_DATASET_PATH
47
+ with scheduler.lock:
48
+ # file size should less than 5 mb
49
+ with JSON_DATASET_PATH.open("a") as f:
50
+ json.dump({"annotator": name, "image": img, "caption": answer}, f)
51
+ f.write("\n")
52
+ if JSON_DATASET_PATH.stat().st_size > 1024 * 1024 * 4:
53
+ JSON_DATASET_PATH = JSON_DATASET_DIR / f"{uuid4()}.json"
54
+
55
+ return None,None,f"Number of samples to be annotated: {len(dataset)}"
56
+
57
+ def disable_and_enable_buttons():
58
+ return gr.update(interactive=False),gr.update(interactive=True)
59
+
60
+ def get_new_data():
61
+ global dataset
62
+ with dispatcher_lock:
63
+ if len(dataset) == 0:
64
+ data = (None,None,None)
65
+ else:
66
+ data = dataset[-1]
67
+ dataset = dataset[:-1]
68
+ data = (data["image"],data["caption"],data["image"])
69
+ return data
70
+
71
+ instruction = """
72
+ # 任务说明:
73
+
74
+ 给定一张图片和该图片的描述,描述中可能存在错误,你需要用<f>和</f>标签将错误部分标出,并紧接着在其后用<t>和</t>标签给出你的纠正。如果描述完全正确则不需要做任何修改。请在Your Name中填写你的昵称,以方便我们统计与审核你的贡献。点击Next按钮获取下一个样本,修改完描述后,点击Submit按钮提交你的标注。标注结果可在[此仓库](https://huggingface.co/datasets/TideDra/HDBench/tree/main/data_dir/raw_annotations)查看(每十分钟更新一次),请确保你的标注成功存储到了仓库中,我们最终根据仓库中的标注结果进行统计你的贡献。
75
+
76
+ 标注时需满足一些要求,以下要求按优先级从高到低依次列出,当要求冲突时,满足高优先级要求:
77
+ 1. 将错误部分替换为正确答案后,整体语句通顺,没有语法错误。反例: "It is a cat eating a \<f>mouse\</f>\<t>rice\</t>" 正例: "It is a cat eating \<f>a mouse\</f>\<t>rice\</t>"。解释: rice不可数,所以要把"a"替换掉。
78
+ 2. 改动应尽量少,尽量不改变原来的句式。反例: "There are \<f>two people in the image\</f>\<t>three people in the image\</t>" 正例: "There are \<f>two\</f>\<t>three\</t> people in the image"。解释:只把two改成three,用最少的改动实现了纠错。
79
+ 3. 标签内部不要有冗余空格。反例: "There are\<f> two \</f>\<t> three \</t> people in the image" 正例: "There are \<f>two\</f>\<t>three\</t> people in the image"
80
+ 4. 当描述中提及图片中完全不存在或不相干的事物,应直接删除该部分.\<t>\</t>内部不加任何文字表示删除。例:"In the image, there is a dog. \<f>There are also some cats.\</f>\<t>\</t>"
81
+ """
82
+ example1 = ["./assets/example.png","The image features a misty canal with two wooden benches placed alongside it. One of the benches is positioned closer to the water, while the other is a bit further back. The foggy atmosphere creates a sense of serenity and calmness, as if the benches are the only beings in the scene.\n\nIn the distance, there <f>are two cars</f><t>is one car</t> parked near a bridge, adding to the serene ambiance. <f>A person can be seen in the far end of the scene, likely enjoying the peaceful environment.</f><t></t> The bench placement and the misty canal make this scene an ideal spot for relaxation or reflection."]
83
+ example2 = ["./assets/example2.png","The image features a smiling stuffed lion sitting on a wooden picnic table. The picnic table is located in a park-like setting, with green grass surrounding the bench on which the stuffed lion is placed. \nThere <f>are two</f><t>is one</t> bench visible in the scene, with the main bench featuring the stuffed lion on it. <f>The other bench is situated a little to the right and is empty.</f><t></t>The arrangement creates a playful atmosphere, as if the lion is waiting for someone or enjoying the company of the empty bench."]
84
+ with gr.Blocks() as demo:
85
+ gr.Markdown(instruction)
86
+ with gr.Row():
87
+ image = gr.Image()
88
+ with gr.Column():
89
+ image_path = gr.State()
90
+ rest_num = gr.Markdown(label="rest_num")
91
+ name = gr.Textbox(label="Your Name",placeholder="Set your name here to mark your annotations")
92
+ text = gr.Textbox(label="Caption",lines=20)
93
+ with gr.Row():
94
+ next_button = gr.Button("Next")
95
+ submit_button = gr.Button("Submit",interactive=False)
96
+ gr.Markdown("# 示例:")
97
+ gr.Examples(
98
+ examples=[example1,example2],
99
+ inputs=[image,text]
100
+ )
101
+ submit_button.click(fn=submit,inputs=[name,text,image_path],outputs=[image,text,rest_num]).success(
102
+ fn=disable_and_enable_buttons,
103
+ outputs=[submit_button,next_button]
104
+ )
105
+ next_button.click(fn=get_new_data,outputs=[image_path,text,image]).success(
106
+ fn=disable_and_enable_buttons,
107
+ outputs=[next_button,submit_button]
108
+ )
109
+
110
+
111
+ demo.launch(share=True)
assets/example.png ADDED
assets/example2.png ADDED
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ jsonlines