total-text資料集的格式不同於ctw-1500和icdar家族,後者是直接以座標的形式存放在.txt檔案中的,而total-text的標註格式長這樣,取其中一張圖的gt為例:
x: [
[115 503 494 115]
], y: [
[322 346 426 404]
], ornt: [u'm'
], transcriptions: [u'naughty'
]x: [
[734 1058 1061 744]
], y: [
[360 369 449 430]
], ornt: [u'm'
], transcriptions: [u'nuris'
]x: [
[558 682 682 557]
], y: [
[370 375 404 398]
], ornt: [u'm'
], transcriptions: [u'nuris'
]x: [
[562 595 651 687 653 637 604 588]
], y: [
[347 304 305 360 366 334 332 361]
], ornt: [u'c'
], transcriptions: [u'naughty'
]x: [
[603 632 630 603]
], y: [
[408 413 426 423]
], ornt: [u'h'
], transcriptions: [u'est'
]x: [
[599 638 637 596]
], y: [
[419 422 441 437]
], ornt: [u'h'
], transcriptions: [u'1996'
]x: [
[583 602 633 656 679 648 594 558]
], y: [
[410 445 445 411 428 476 472 432]
], ornt: [u'c'
], transcriptions: [u'warung'
]x: [
[543 583 660 701 691 653 592 557]
], y: [
[347 288 288 347 358 308 302 355]
], ornt: [u'#'
], transcriptions: [u'#'
]x: [
[557 580 640 683 698 649 583 537]
], y: [
[419 470 481 422 432 497 491 432]
], ornt: [u'#'
], transcriptions: [u'#'
]
分別存放所有x的座標、所有y的座標,文字的方向以及所包含字元的內容。
而ctw-1500或者icdar2015是(x1,y1,x2,y2,x3,y3,x4,y4…)這樣的形式直接給出的,(icdar15裡面最後還有個###代表忽略)所以這裡要做的是批量處理total-text的標註格式使其轉換成ctw-1500風格的。
還是直接上**:
#正規表示式庫
import re
import cv2
import os
import numpy as np
root_path =
'./'
_indexes =
sorted
([f.split(
'.')[0
]for f in os.listdir(os.path.join(root_path,
'train_rename_totaltext_labels_sqfree'))
])for index in _indexes:
print
('processing: '
+ index)
anno_file = os.path.join(root_path,
'train_rename_totaltext_labels_sqfree/'
)+ index +
'.txt'
with
open
(anno_file,
'r+'
)as f:
#lines是每個檔案中包含的內容
lines =
[line for line in f.readlines(
)if line.strip()]
single_list =
all_list =
for i, line in
enumerate
(lines)
:#if i == 0:
#continue
#parts是每一行包含的內容
parts = line.strip(
).split(
',')
xy_list =
for a, part in
enumerate
(parts)
:if a >1:
break
piece = part.strip(
).split(
',')
numberlist = re.findall(r'\d+'
,piece[0]
) xy_list.extend(numberlist)
length =
len(xy_list)
n =int(length /2)
x_list = xy_list[
:n] y_list = xy_list[n:
] single_list =
[none]*
(len
(x_list)
+len
(y_list)
) single_list[::
2]= x_list
single_list[1:
:2]= y_list
with
open
(anno_file,
'w')
as w:
for all_list_piece in all_list:
for string in all_list_piece:
w.write(string)
w.write(
',')
w.write(
'\n'
)
這樣剛才那個標註格式就會變成這樣:
115,322,503,346,494,426,115,404,
734,360,1058,369,1061,449,744,430,
558,370,682,375,682,404,557,398,
562,347,595,304,651,305,687,360,653,366,637,334,604,332,588,361,
603,408,632,413,630,426,603,423,
599,419,638,422,637,441,596,437,
583,410,602,445,633,445,656,411,679,428,648,476,594,472,558,432,
543,347,583,288,660,288,701,347,691,358,653,308,592,302,557,355,
557,419,580,470,640,481,683,422,698,432,649,497,583,491,537,432,
極大方便了後續的處理過程。 spring ibatis 批量處理資料
本人在最近的專案中發現這樣的乙個問題。在spring ibatis的配置下,存在多種進行資料操作的方法。各種方法在效率上以及是否存在潛在bug上,也各不相同。以下述 為例 public void insert siterank param public void insertall listsite...
利用陣列處理批量資料
利用陣列前,我們要知道陣列是什麼 一批具有同名同屬性的資料就組成乙個陣列 array 陣列就是一組有序資料的集合 一 一維陣列 一維陣列的元素只需要用陣列名加乙個下標,就能唯一的確定 1.1 怎樣定義一維陣列 int a 10 它就表示定義了乙個整型陣列,陣列名為a,此陣列包含了10個整型元素。1....
Pytorch之批量處理資料
使用 getitem 只返回乙個樣本。但是訓練神經網路時,一般對乙個batch進行操作。同時還需要對資料進行shuffle和並行加速等,pytorch中提供了dataloader實現這些功能 from torch.utils.data import dataloder dataloder datal...