RK3399pro Rock-X python代码+USB摄像头目标检测报错

固件类型:官方提供的固件
固件文件名称:RK3399pro Linux Rock-X
固件下载地址:百度网盘 请输入提取码
Log日志:log_result.zip

本帖最后由 KevinWu 于 2023-4-25 09:20 编辑

平台:Ubuntu 20.04 + 2GB内存 +1GB NPU

问题1:按照Rockchip_Developer_Guide_RockX_SDK_CN 文档,接入USB摄像头后,运行以下命令

python3 -m rockx.test.camera.rockx_object_detection
python3 -m rockx_object_detection.py

报以下错误:内存不够

Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/firefly/.local/lib/python3.8/site-packages/rockx/test/camera/rockx_object_detection.pine 12, in <module>
    object_det_handle = RockX(RockX.ROCKX_MODULE_OBJECT_DETECTION, target_device=args.device)
  File "/home/firefly/.local/lib/python3.8/site-packages/rockx/RockX.py", line 235, in __init__
    self.rockx_base = RockXBase()
  File "/home/firefly/.local/lib/python3.8/site-packages/rockx/RockXBase.py", line 218, in __init__
    RockXBase._load_library()
  File "/home/firefly/.local/lib/python3.8/site-packages/rockx/RockXBase.py", line 448, in _load_li
    RockXBase.lib = CDLL(os.path.join(lib_dir, 'librockx.so'))
  File "/usr/lib/python3.8/ctypes/__init__.py", line 373, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /home/firefly/.local/lib/python3.8/site-packages/rockx/sdk/rockx-rk3399pro-Linux/lib64/lib.so: cannot allocate memory in static TLS block

问题2:通过chat-gpt搜索了解决答案,用sudo权限运行

sudo python3 -m rockx.test.camera.rockx_object_detection
sudo python3 -m rockx_object_detection.py

报以下错误:
ModuleNotFoundError: No module named ‘rockx’

3.参考文档和代码

import argparse
from rockx import RockX
import cv2

if __name__ == '__main__':

    parser = argparse.ArgumentParser(description="RockX Object Detection Demo")
    parser.add_argument('-c', '--camera', help="camera index", type=int, default=0)
    parser.add_argument('-d', '--device', help="target device id", type=str)
    args = parser.parse_args()

    object_det_handle = RockX(RockX.ROCKX_MODULE_OBJECT_DETECTION, target_device=args.device)

    cap = cv2.VideoCapture(args.camera)
    cap.set(3, 1280)
    cap.set(4, 720)
    last_face_feature = None

    while True:
        # Capture frame-by-frame
        ret, frame = cap.read()

        in_img_h, in_img_w = frame.shape[:2]

        ret, results = object_det_handle.rockx_face_detect(frame, in_img_w, in_img_h, RockX.ROCKX_PIXEL_FORMAT_BGR888)

        for result in results:
            cv2.rectangle(frame,
                          (result.box.left, result.box.top),
                          (result.box.right, result.box.bottom),
                          (0, 255, 0), 2)
            cv2.putText(frame, "%s" % RockX.ROCKX_OBJECT_DETECTION_LABELS_91[result.cls_idx],
                        (result.box.left, result.box.top - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))

        # Display the resulting frame
        cv2.imshow('RockX Object Detection - ' + str(args.device), frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()

    object_det_handle.release()

tchip_askquestions
Rockchip_Developer_Guide_RockX_SDK_CN.pdf (806 KB)
log_result.zip (1.51 KB)

你好,先确认一下有没有安装rknn相关包。

本帖最后由 KevinWu 于 2023-4-25 14:45 编辑

我确实也是按照他们的文档操作,安装对应的包【RockX-1.4.4-py3-none-any.whl】,好像也不行

我在终端输入Python3,然后输入 from rockx import RockX 是没问题的 ;在线求助

neutionwei 发表于 2023-4-25 14:35
你好,先确认一下有没有安装rknn相关包。

我之前有用你们的demo 来做单张图片推理,是可以的,你可以看看我楼下的评论

本帖最后由 KevinWu 于 2023-4-25 15:06 编辑

我之前有用官方提供的demo
Rock-X/RockX_SDK_V1.4.4_20210623/demo/command_line_demo/rockx_object_detection_demo/rockx_object_detection.cpp来做单张图片推理,是有安装RKNN 驱动,驱动版本是1.7.1, 麻烦你帮我确认一下,感谢!

之前OK的系统版本与现在的是一样嘛?

neutionwei 发表于 2023-4-25 15:17
之前OK的系统版本与现在的是一样嘛?

是的,一样的主板RK3399 PRO (2GB内存+1GB NPU),环境也是一样的

你的 rockx 是装在哪个用户上的,一时sudo 一时普通用户的,我看你的普通 python3 调试器都可以 import rockx 了

环境一样,按道理是没问题的,你看看是不是哪里改动了。

板蓝根 发表于 2023-4-25 17:20
你的 rockx 是装在哪个用户上的,一时sudo 一时普通用户的,我看你的普通 python3 调试器都可以 import roc …

我一直都是在firefly 用户操作,之前也是按照操作指示Opencv 编译和安装编译成功了opencv 3.4.15,然后接入USB摄像头是正常的,现在就是想用python代码来进行目标检测,一开始执行命令,说内存不够,无法正常运行,后面就是sudo权限可以执行,但是就是没有RockX模块。我等会尝试一下创建python3.7虚拟环境再测试,感谢指示

1.您好!我这边python环境,ubuntu 20.04默认自带python2.7 和 python3.8,之前编译opencv的时候,创建了python 3.7的虚拟环境。我在python3.7环境下执行python3 rockx_object_detection.py,报错提示是没有rock 模块,证明python3.7虚拟环境是无法执行;


2.我在python3.8执行了,但是这次又报新的错误AttributeError: /home/firefly/.local/lib/python3.8/site-packages/rockx/sdk/rockx-rk3399pro-Linux/lib64/librockx.so: undefined symbol: rockx_carplate_align_v2
这次报错和第一次报错有些差异 OSError: /home/firefly/.local/lib/python3.8/site-packages/rockx/sdk/rockx-rk3399pro-Linux/lib64/librockx.so: cannot allocate memory in static TLS block,我在猜测难道是这个librockx.so的文件有问题?

3.出现这个新的报错,不知道是否这个原因引起。 我昨天晚上根据教程【https://wiki.t-firefly.com/zh_CN/3399pro_npu/rknn_toolkit_lite.html】 在pythonn3.7 虚拟环境成功安装了RKNN Toolkit Lite,但是在安装后,我准备测试代码 python3 test.py,报错ModuleNotFoundError: No module named ‘cv2’,最后网上找到解决方法是执行

pip install --default-timeout=100 opencv-python

把原来的numpy-1.16.3版本升级到numpy-1.21.6,有以下错误提示,但最终还是成功运行python3 test.py,成功加载启用RKNN Toolkit-lite

ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
rknn-toolkit-lite 1.7.1 requires numpy==1.16.3, but you have numpy 1.21.6 which is incompatible. Successfully installed numpy-1.21.6 opencv-python-4.7.0.72

4.以上遇到的问题,我把终端打印出来,仅供参考
log_0426.tar.gz (4.72 KB)

板蓝根 发表于 2023-4-25 17:20
你的 rockx 是装在哪个用户上的,一时sudo 一时普通用户的,我看你的普通 python3 调试器都可以 import roc …

您好!你有空看一下我最新的评论,我今天遇到一个新的报错,感谢!

neutionwei 发表于 2023-4-25 17:24
环境一样,按道理是没问题的,你看看是不是哪里改动了。

您好!你有空看一下我最新的评论,我今天遇到一个新的报错,感谢!

我在其他论坛也看到类似的错误 https://t.rock-chips.com/forum.php?mod=viewthread&tid=3643