眾所周之,用opencv畫圖,是不能直接在上標註中文的,如果要標註中文,需要用到pil庫。在用pil庫進行處理時,需要把讀入的轉成pil的image格式,處理完之後,又得把image格式轉化成array格式。在這兩個轉化的過程,其實是非常耗時的,它的耗時量與的畫素數量成正比。你可以看下面這個例子,就知道耗時量有多大了。
import numpy as np
from pil import image
import time
a=np.random.random((1920,1080)) #生成乙個1080p的單通道
t1=time.time()
image_a=image.fromarray(a)
aa=np.asarray(image_a)
t2=time.time()
b=np.random.random((64,64)) #生成乙個64*64的單通道
t3=time.time()
image_b=image.fromarray(b)
bb=np.asarray(image_b)
t4=time.time()
執行的結果如下:
可見,對於一張1080p的,不包括畫圖,只是進行格式轉換,就用了26毫秒多,所用時間已經夠我用yolov5進行兩次目標檢測。在深度學習框架裡,如果用這種方法進行標記中文,將嚴重拖慢演算法的推理時間,不知道的還以為是深度學習演算法不行呢。
解決思路可以從上面的例子中看出,既然格式轉換的時間與影象的畫素大小有關,那我們就可以只將中需要處理的畫素部分截出來,只對這部分畫素進行格式轉換,標註中文,再轉換回去,再覆蓋在原影象上面,這樣就可以達到快速標註中文。
程式**圖下:
import numpy as np
import cv2
from pil import image,imagefont,imagedraw
import time
frontstyle = imagefont.truetype("simhei.ttf",size=15,encoding="utf-8")
a=np.random.random((1920,1080,3)) #生成乙個1080p的rgb
while true:
t1=time.time()
c1=(int(200),int(200))
c2=(int(260),int(230))
cv2.rectangle(a, c1, c2, (0,0,0), -1, cv2.line_aa) # filled
b=a[200:230,200:260]
image_b=image.fromarray(np.uint8(b))
draw = imagedraw.draw(image_b)
draw.text((0,0),"中國智慧型",(0,255,0),font=frontstyle)
bb=np.asarray(image_b)
a[200:230,200:260]=bb
t2=time.time()
cv2.imshow('image',a)
c= cv2.waitkey(0)
標註效果如下:
執行結果如下:
可見,這樣處理之後,包括標註中文,總用時才1毫秒左右,時間已經比原來的1/26還少了。
中文標準標註語料的標註中的幾個問題
想讓機器能夠跟人一些樣非常智慧型地處理自然語言,一直是我們的夢想。實現這個理想涉及到很多領域的技術,不管如何設計,自然語言處理 nlp 技術是必備的一環。而自然語言處理中,想要訓練乙個好的模型,語料是繞不過去的門檻。沒有語料,來的模型?而且語料標註規則是否統 一 自洽是訓練自動處理模型的關鍵。不管專...
如何減少silverlight XAP包的尺寸
這次得到了乙個做silverlight應用開發的機會,在發布時遇到 xap 包太大的問題,上網看了半天,最後把微軟的這個文件 如何使用應用程式庫快取 翻來覆去看了半天,終於搞明白了它說的內容,暈啊,真應了 會者不難 這句老話。最後決定把這個其實很簡單的東西總結一下,避免別的新學者浪費時間。開發場景 ...
如何減少silverlight XAP包的尺寸
這次得到了乙個做silverlight應用開發的機會,在發布時遇到 xap 包太大的問題,上網看了半天,最後把微軟的這個文件 如何使用應用程式庫快取 翻來覆去看了半天,終於搞明白了它說的內容,暈啊,真應了 會者不難 這句老話。最後決定把這個其實很簡單的東西總結一下,避免別的新學者浪費時間。開發場景 ...