ImportError: No module named common

edited August 2021 in Innoserve area

你好,我照著範例指示做推論時遇到了錯誤。

我的系統是 Jetson nano提供的Ubuntu 18.04,如圖所示

使用 python 3.8 環境


我的KL520是可以被偵測到的,我照著步驟安裝

(kneronenv) pip install python/packages/kdp_host_api-x.x.x_linux_-py3-none-any.whl
(kneronenv) pip install opencv-python
(kneronenv) pip install image

開啟host_lib所在路徑後在 /host_lib/python內執⾏說明指令,顯⽰所有可執⾏的操作

(kneronenv) cd /host_lib/python
(kneronenv) python main.py -h

輸入後遇到了下面這個錯誤

 File "main.py", line 9, in <module>
    from common import kdp_wrapper
ImportError: No module named common


那我跳過這個步驟,要更新加速棒的韌體時也有一樣的錯誤

(kneronenv) cd /host_lib/python
(kneronenv) python \main.py -t KL520-update_both_fw


  File "main.py", line 9, in <module>
    from common import kdp_wrapper
ImportError: No module named common


請問該如何解決 ? 謝謝 。

Comments

  • Hello,這個錯誤應該是因為kdp_host_api-x.x.x_linux_-py3-none-any.whl 與你的系統環境不相容所造成

    為了要跟耐能加速棒(dongle)溝通,在各種作業系統下都需要編譯底層的驅動後才可正常運作。為了方便大家使用,我們在X64的環境下編譯了Windows與Linux的whl,在這兩種環境下可在安裝whl後直接執行。

    由於你的環境是ARMv8,所以與我們所提供X64的whl並不相容,因此可能要請你更換設備或是用我們原始的c project來編譯library

    自行編譯方法如下:

    1. 至耐能開發者中心下載最新的host_lib專案 https://www.kneron.com/tw/support/developers/?folder=KNEO%20Stem%20(USB%20Dongle)/host_lib/&download=615
    2. 參照下載下來的host_lib中README_CPP.md內Build欄位的說明編譯專案,編譯完成後可在/host_lib/build/src中找到編譯好的library檔libhostkdp.so
    3. kdp_host_api-x.x.x_linux_-py3-none-any.whl的安裝路徑中的libhostkdp.so置換成在你環境中編譯的libhostkdp.so,若使用anaconda安裝python3.8的話,一般安裝路徑會在/home/anaconda3/env/你所創立的環境名稱/lib/python3.8/site-packages/kdp_host_api/libhostkdp.so


  • 您好,我也有相同的問題該如何解決


  • Hi Fred,

    可以先確認usb dongle是否有權限存取你電腦環境的usb通訊,權限設定方法如下


    在Linux環境下,USB的存取是需要管理者權限的,但管理者權限下的環境與一般環境會有差異,也代表即便先前安裝好了python環境,若是在執行時改用sudo python 指令,則會發生找不到相關lib的python error。

    為避免usb權限以及python環境安裝的問題,建議可以照下面做法來開放耐能的KL520 usb控制權限

    以管理者權限創建 (或開啟)檔案 /etc/udev/rules.d/10-local.rules (也提醒,若不是用管理者權限開啟的話無法存檔),在檔案中加入下面三行

    KERNEL=="ttyUSB*",ATTRS{idVendor}=="067b",ATTRS{idProduct}=="2303",MODE="0777",SYMLINK+="kneron_uart"

    KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",MODE="0777",SYMLINK+="kneron_pwr"

    SUBSYSTEM=="usb",ATTRS{idVendor}=="3231",ATTRS{idProduct}=="0100",MODE="0666"

    輸入完畢後將檔案存檔,後續就可以擁有USB權限來執行指令 python main.py -t KL520-update_both_fw或其他相關指令

  • Hi Ethon,

    我在 /etc/udev/rules.d/10-local.rules中已有設定這三行

    在執行cam_dme_async_post_host_classification.py時出現錯誤


  • 從截圖看錯誤應該是因為執行的命令所造成的。

    所有的範例都需透過python main.py來執行,可以執行python main.py -h來看所有可執行的列表,請依照下面的步驟操作

    1. 退回你的路徑到 host_lib/python
    2. 執行 python main.py -t KL520-cam_dme_async_post_host_classification
  • 執行 python main.py -t KL520-cam_dme_async_post_host_yolov5 可執行成功

    我置換量化出來的nef之後顯示失敗,請問是哪個部分出錯呢


    參考來源:https://www.kneron.com/forum/discussion/53/legacy-v0-12-example-keras-kl520-how-to-convert-and-compile-tiny-yolo-v3-from-github-project#latest

    另外附上量化出的nef檔


  • Hi Fred,

    確認一下你的模型是照參考來源連結裡面的路徑去抓的嗎? 因為那邊說明所介紹的模型是tiny yolo v3,而KL520-cam_dme_async_post_host_yolov5這個範例是跑yolov5,兩個模型在應用中所需要的前處理與後處理函式不同,所以不能直接替換

    若想要使用tiny yolo v3的話可以改下載 https://github.com/kneron/host_lib,在host_lib/python/examples_kl520/中有範例cam_dme_serial_post_host_yolo.py 可以參考

    也提醒,範例在執行時還會需要專案中的其他函式,若單獨將範例複製到其他專案執行可能會遇到其他的錯誤。

  • Hi Ethon,

    我嘗試您說得進行測試,跳出Task category not in KL520 or KL720: cam_d的錯誤

    我去查詢後發現已有載入KL520如下附圖


  • Hi Fred,

    錯誤訊息表示你的 main.py中沒有 cam_dme_serial_post_host_yolo 對應的設定,或是格是不符合導致錯誤。

    推測你可能是直接將下載的範例複製到你原本的專案中,但所有的host_lib專案都是獨立運行,若直接將A專案的範例複製到B專案中,有可能發生不相融的錯誤,若想使用B專案中的範例,請直接在B專案中執行,不要複製到A專案中。

The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.