python+yolov3 输出中文标签
生活随笔
收集整理的這篇文章主要介紹了
python+yolov3 输出中文标签
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
利用yolo進行目標識別時,輸出的是英文標簽,如下圖,不便于用戶閱讀,因此需要轉換為中文標簽,我采取的辦法是對yolo predefined的80類進行了“漢化”,以實現輸出中文標簽。
不知道是否有更便捷的方法,只是提供了一種思路,供大家參考。
首先獲取LOYO中label名稱
打開LOYO文件coco.nameslabel,獲取這80類label名稱,并譯為中文
輸出中文標簽
OpenCV中可以利用putText()在圖片上添加英文,但是添加中文則會出現亂碼,因此需要:
1)將OpenCV圖片格式轉換成PIL的圖片格式;
2)使用PIL繪制文字;
3)PIL圖片格式轉換成OpenCV的圖片格式;
此方法轉載自:https://blog.csdn.net/baidu_37366055/article/details/81627185
完整代碼
from test import video_demo import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFontdef E2C(label):predefined_En=['person','bicycle','car','motorbike','aeroplane','bus','train','truck','boat','traffic light','fire hydrant','stop sign','parking meter','bench','bird','cat','dog','horse','sheep','cow','elephant','bear','zebra','giraffe','backpack','umbrella','handbag','tie','suitcase','frisbee','skis','snowboard','sports ball','kite','baseball bat','baseball glove','skateboard','surfboard','tennis racket','bottle','wine glass','cup','fork','knife','spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hot dog','pizza','donut','cake','chair','sofa','pottedplant','bed','diningtable','toilet','tvmonitor','laptop','mouse','remote','keyboard','cell phone','microwave','oven','toaster','sink','refrigerator','book','clock','vase','scissors','teddy bear','hair drier','toothbrush']predefined_CN=['人','自行車','汽車','摩托車','飛機','公共汽車','火車','卡車','船','紅綠燈','消防栓','停止標志','停車收費表','板凳','鳥','貓','狗','馬','羊','牛','大象','熊','斑馬','長頸鹿','背包','雨傘','手提包','領帶','手提箱','飛盤','滑雪板','單板滑雪','運動球類','風箏','棒球棒','棒球手套','滑板','沖浪板','網球拍','瓶子','紅酒杯','杯子','叉子','刀','勺子','碗','香蕉','蘋果','三明治','橘子','西蘭花','胡蘿卜','熱狗','比薩','甜甜圈','蛋糕','椅子','沙發','盆栽','床','餐桌','廁所','電視監視器','筆記本電腦','老鼠','遙控器','鍵盤','手機','微波爐','烤箱','烤面包機','水槽','冰箱','書','時鐘','花瓶','剪刀','泰迪熊','吹風機','牙刷']#找到英文label名稱在list中的位置loc = predefined_En.index(label)#顯示對應位置的中文名稱label_CN=predefined_CN[loc]return label_CNdef cv2ImgAddText(img, text, left, top, textColor=(255, 0, 0), textSize=20):if (isinstance(img, np.ndarray)): # 判斷是否OpenCV圖片類型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# 創建一個可以在給定圖像上繪圖的對象draw = ImageDraw.Draw(img)# 字體的格式fontStyle = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")# 繪制文本draw.text((left, top), text, textColor, font=fontStyle)# 轉換回OpenCV格式result=cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)return resultif __name__ == '__main__':#待檢測的圖片file='H:/dog.jpg'#進行LOYO識別image, info = video_demo(file)imgA=cv2.imread(file)#YOLO返回的坐標值和標簽、置信度locx1 = [q1['xtop'] for q1 in info] # 左上角x坐標locx2 = [q2['ytop'] for q2 in info] # 左上角y坐標locy1 = [q3['xbottom'] for q3 in info] # 右下角x坐標locy2 = [q4['ybottom'] for q4 in info] # 右下角y坐標lable_str = [q5['label'] for q5 in info] # 標簽confidence = [q6['confidence'] for q6 in info] # 置信度B = len(locx1)for l in range(0, B):x2 = (locx1[l], locx2[l])y2 = (locy1[l], locy2[l])#英文標簽轉換為中文標簽label_CN = E2C(lable_str[l])#輸出中文標簽和置信度text = "{}: {}".format(label_CN, confidence[l])#在imgA上畫出矩形cv2.rectangle(imgA, x2, y2, (0, 0, 255), 2)#在imgA上顯示中文標簽+置信度imgA = cv2ImgAddText(imgA, text, locx1[l], locx2[l])cv2.imshow('Image', imgA)cv2.waitKey(0)運行結果
總結
以上是生活随笔為你收集整理的python+yolov3 输出中文标签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用VSccde上传文件到Git时可能出
- 下一篇: python中pass与break区别