1. 程式人生 > 程式設計 >對YOLOv3模型呼叫時候的python介面詳解

對YOLOv3模型呼叫時候的python介面詳解

需要注意的是:更改完源程式.c檔案,需要對整個專案重新編譯、make install,對已經生成的檔案進行更新,類似於之前VS中在一個類中增加新函式重新編譯封裝dll,而python介面的呼叫主要使用的是libdarknet.so檔案,其餘在配置檔案中的修改不必重新進行編譯安裝。

之前訓練好的模型,在模型呼叫的時候,總是在

lib = CDLL("/home/*****/*******/darknet/libdarknet.so",RTLD_GLOBAL)這裡讀不到darknet編譯生成的.so檔案,導致直接的報錯;之前以為是檔案路徑的問題,稀裡糊塗的;由於很久不寫c檔案了,所以最後直接在python介面後在py檔案中修改的畫框、標置信度等操作,一次次的嘗試後終於成功

(1)將專案中python檔案下的darknet.py檔案拷貝到根目錄,和/libdarknet.so在同一個目錄下

(2)整個demo程式都是用絕對路徑;

實現yolov3模型載入,批量讀取資料夾下的照片到庫函式變數,最終處理結果存入在另外新建資料夾

###2019.04.03 by ylxb
def showPicResult(image,peoplecar,outimage):
  img = cv2.imread(image)
  out_img =outimage
  cv2.imwrite(out_img,img)
  for i in range(len(peoplecar)):
    x1=peoplecar[i][2][0]-peoplecar[i][2][2]/2
    y1=peoplecar[i][2][1]-peoplecar[i][2][3]/2
    x2=peoplecar[i][2][0]+peoplecar[i][2][2]/2
    y2=peoplecar[i][2][1]+peoplecar[i][2][3]/2
    im = cv2.imread(out_img)
    cv2.rectangle(im,(int(x1),int(y1)),(int(x2),int(y2)),(255,255,0),3)
    text = listpeoplecar[i][0]
    # 在圖片上新增文字資訊
    if(text=="people"):
      carcol=(55,55,255)#顏色顯示
    else:
      carcol = (255,55)
    cv2.putText(im,text,cv2.FONT_HERSHEY_SIMPLEX,0.8,carcol,1,cv2.LINE_AA)
    #This is a method that works well.
    cv2.imwrite(out_img,im)
###2019.04.03 by ylxb
  filenames = os.listdir(picDir)
  i = 0
  num = 0#目標個數
  car_num = 0#car個數
  people_num = 0#people個數

  car = "car" # car元素
  people = "people" # people元素

  for name in filenames:
    filename=os.path.join(picDir,name)
    #print(filename)
    listpeoplecar = detect(net,meta,filename)
    print(listpeoplecar)
    i = i + 1
    #save_picpath = out_img+str(filename).split("/")[-1].split(".")[0] + ".png"
    out_img=out_img1+str(i)+'.png'
    showPicResult(filename,listpeoplecar,out_img)

    for item in listpeoplecar:
      #print(item)
      car_num = car_num + item[0].count(car)#car個數
      people_num = people_num + item[0].count(people)#people個數
      num = num + 1#目標個數

  print('car個數: ' + str(car_num))
  print('people個數: ' + str(people_num))
  print('共檢測出目標個數: ' + str(num))
  print('共檢測照片個數:'+ str(i))

放其中一個照片測試照片:

以上這篇對YOLOv3模型呼叫時候的python介面詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。