【Milk-V Duo】CV1800 TPU YOLO 开发及测试

下载 tdl sdk 和 tpu sdk

首先测试 tdl-sdk

  • 进入 cvitek-tdl-sdk-cv180x/sample/cvi_yolo/compile_sample.sh
    • 增加工具链位置指定:
      export PATH=/path_to_sdk/duo-src/host-tools/gcc/riscv64-linux-musl-x86_64/bin/:$PATH
    • 找到 cvi_yolo 选中 sample_yolov5,把里面图片的分辨率改为图片的分辨率,这里是640*640
    • ./compile_sample.sh
  • 找到 cvi_yolo 选中 sample_yolov5,使用上一贴转化出来的 yolov5n_int8_fuse.cvimodel 和 bus.jpg 测试:
    shell [root@milkv-duo]~/tpu-sdk/test3# ./sample_yolov5_roi yolov5n_int8_fuse.cvimodel bus.jpg ion ioctl fail:: Out of memory reopen ion dev reopen ion dev success ion ioctl fail:: Out of memory reopen ion dev reopen ion dev success ion ioctl fail:: Out of memory reopen ion dev reopen ion dev success Assertion failed: 0 (../../src/soc/common/cvi_device_mem.cpp: mem_alloc_raw: 451) Aborted
  • 根据官方文档提到的:
    • YOLODevelopmentGuide
    • yolov5m模型的TDL_SDK导出方式onnx 在cv181x上ion分配失败,可能是规格不足,yolov5n跟yolov5m应该差不了多少。也许duo s或者256就可以,但我手里都没有,就算了。
    • 又尝试重新导出yolov5s,运行后却直接 Killed 了,可能哪里没设置对
    • 随后又尝试了一下yolov8n,在[YOLODevelopmentGuide]里面提到的frp里面有一个官方的yolov8n模型,yolov8n_int8.cvimodel,配合 cvi_yolo 选中 sample_yolov8 测试结果依然是ion分配失败

cvitek_tpu_samples

  • 事情到这里似乎陷入了一个僵局,但我又从[YOLODevelopmentGuide]里面翻到另一个sdk,叫cvitek_tpu_samples
  • 里面有个 samples_extra/detector_yolov8n_fused_preprocess
  • 根据这个例程修改了下,测试通过,仓库

运行

  • 将动态库下载到板子上
  • export LD_LIBRARY_PATH=“.”
  • ./cvi_yolov8_first yolov8n_int8.cvimodel
  • 如果显示在SPI屏幕上,大概1s一帧;
  • 如果不做显示处理,大概2s一帧
  • 由于目前SDK里面的opencv是没有video和videoio模块,所以本来准备了对焦测试员的视频想采视频流来识别的想法没有实现。

摄像头驱动与视频测试的尝试

  • 人脸识别教程
  • 根据人脸识别教程编译了 sample_vi_fd.c 但是运行始终打印 vi init failed
VI_SDK_IOC_S_CTRL - vi_sdk_disable_chn NG, Invalid argument
VI_SDK_IOC_S_CTRL - vi_sdk_destroy_pipe NG, Invalid argument
VI_SDK_IOC_S_CTRL - vi_sdk_disable_dev NG, Invalid argument
vi init failed. s32Ret: 0xffffffff !
init middleware failed! ret=ffffffff
  • 上一帖用例程测试过摄像头是可以正常驱动的 sample_vi_fd ,可能例程还是有哪里不对。