jetson nano使用python脚本打开摄像头

目录

背景

1. 安装pycuda

2. 重装opencv


背景

这篇文章主要针对前面yolov8系列进行编写的,旨在解决使用python脚本使用opencv无法打开摄像头进行检测的问题,注意这些部署的环境都是安装在虚拟环境中的,千万不要忘记activate你的虚拟环境

1. 安装pycuda

安装pycuda之前,先安装一个projects

pip3 install projects

pucuda官网中可以找到你想要的版本

但我使用的是2022.1版本的pycuda

2022.1版本icon-default.png?t=N7T8https://pypi.org/project/pycuda/2022.1/#files下载网页中的压缩包,然后传到jetson nano上

接下来就是使用压缩包中的源代码进行安装

tar zxvf pycuda-2022.1.tar.gz    
cd pycuda-2022.1/  
python3 configure.py --cuda-root=/usr/local/cuda-10.2
sudo python3 setup.py install

等待安装完成后,使用以下代码进行验证

import numpy as np
import pycuda.autoinit
import pycuda.driver as cuda
from pycuda.compiler import SourceModule


mod = SourceModule("""
#define BLOCK_SIZE 16

typedef struct {
    int width;
    int height;
    int stride; 
    int __padding;    //为了和64位的elements指针对齐
    float* elements;
} Matrix;

// 读取矩阵元素
__device__ float GetElement(const Matrix A, int row, int col)
{
    return A.elements[row * A.stride + col];
}

// 赋值矩阵元素
__device__ void SetElement(Matrix A, int row, int col, float value)
{
    A.elements[row * A.stride + col] = value;
}

// 获取 16x16 的子矩阵
 __device__ Matrix GetSubMatrix(Matrix A, int row, int col) 
{
    Matrix Asub;
    Asub.width    = BLOCK_SIZE;
    Asub.height   = BLOCK_SIZE;
    Asub.stride   = A.stride;
    Asub.elements = &A.elements[A.stride * BLOCK_SIZE * row + BLOCK_SIZE * col];
    return Asub;
}

__global__ void matrix_mul(Matrix *A, Matrix *B, Matrix *C)
{
    int blockRow = blockIdx.y;
    int blockCol = blockIdx.x;
    int row = threadIdx.y;
    int col = threadIdx.x;

    Matrix Csub = GetSubMatrix(*C, blockRow, blockCol);

    // 每个线程通过累加Cvalue计算Csub的一个值
    float Cvalue = 0;

    // 为了计算Csub遍历所有需要的Asub和Bsub
    for (int m = 0; m < (A->width / BLOCK_SIZE); ++m) 
    {
        Matrix Asub = GetSubMatrix(*A, blockRow, m);
        Matrix Bsub = GetSubMatrix(*B, m, blockCol);
 
        __shared__ float As[BLOCK_SIZE][BLOCK_SIZE];
        __shared__ float Bs[BLOCK_SIZE][BLOCK_SIZE];
       
        As[row][col] = GetElement(Asub, row, col);
        Bs[row][col] = GetElement(Bsub, row, col);

        __syncthreads();
        
        for (int e = 0; e < BLOCK_SIZE; ++e)
            Cvalue += As[row][e] * Bs[e][col];

        __syncthreads();
    }

    SetElement(Csub, row, col, Cvalue);
}
""")


class MatrixStruct(object):
    def __init__(self, array):
        self._cptr = None

        self.shape, self.dtype = array.shape, array.dtype
        self.width = np.int32(self.shape[1])
        self.height = np.int32(self.shape[0])
        self.stride = self.width
        self.elements = cuda.to_device(array)                      # 分配内存并拷贝数组数据至device,返回其地址

    def send_to_gpu(self):
        self._cptr = cuda.mem_alloc(self.nbytes())                 # 分配一个C结构体所占的内存
        cuda.memcpy_htod(int(self._cptr), self.width.tobytes())    # 拷贝数据至device,下同
        cuda.memcpy_htod(int(self._cptr)+4, self.height.tobytes())
        cuda.memcpy_htod(int(self._cptr)+8, self.stride.tobytes())
        cuda.memcpy_htod(int(self._cptr)+16, np.intp(int(self.elements)).tobytes())

    def get_from_gpu(self):
        return cuda.from_device(self.elements, self.shape, self.dtype)  # 从device取回数组数据
   
    def nbytes(self):
        return self.width.nbytes * 4 + np.intp(0).nbytes


a = np.random.randn(400,400).astype(np.float32)
b = np.random.randn(400,400).astype(np.float32)
c = np.zeros_like(a)

A = MatrixStruct(a)
B = MatrixStruct(b)
C = MatrixStruct(c)
A.send_to_gpu()
B.send_to_gpu()
C.send_to_gpu()

matrix_mul = mod.get_function("matrix_mul")
matrix_mul(A._cptr, B._cptr, C._cptr, block=(16,16,1), grid=(25,25))
result = C.get_from_gpu()
print(np.dot(a,b))
print(result)

出现如下结果即安装成功

2. 重装opencv

使用摄像头主要是通过opencv打开摄像头,如果你反复测试还是无法打开摄像头 ,可能就需要重装opencv了,但这个是没有办法的事情,虽然每次编译opencv都会很耗时间

这次在重装opencv之前,除了要安装原先教程中需要安装的依赖之外,还需要多安装几个依赖,代码如下

sudo apt-get install libgtk2.0-dev pkg-config

千万记得你要将opencv安装在什么环境中,不然你后面重装opencv等待的时间就白费了

将这些依赖都准备好后,就可以重新开始安装opencv了

等待完成后,就可以正常在虚拟环境中使用opencv打开摄像头了

### 回答1: Jetson Nano默认已经预装了Python,但是可能需要安装一些额外的Python库。如果你需要安装Python的其他版本或者包,可以按照以下步骤进行: 1. 打开终端并更新系统软件包列表: ``` sudo apt-get update ``` 2. 安装Python和pip: ``` sudo apt-get install python3 python3-pip ``` 3. 确认Python和pip已经正确安装: ``` python3 --version pip3 --version ``` 4. 如果需要安装其他Python库,可以使用pip命令进行安装: ``` pip3 install <package-name> ``` 其中,`<package-name>`是需要安装的包的名称。 注意:Jetson Nano的操作系统是基于Ubuntu的,因此安装Python和其他软件包的方法与Ubuntu类似。 ### 回答2: Jetson Nano是一款强大的开发板,它支持在其上安装Python编程语言。下面我将简要介绍如何在Jetson Nano上安装Python。 首先,Jetson Nano默认使用的是Linux操作系统。因此,我们可以通过在终端中运行以下命令来确认是否已经安装了Python: ``` python --version ``` 如果终端输出Python的版本号,则说明Python已经安装在Jetson Nano上。如果没有输出或者输出的版本不符合要求,我们需要进行安装。 Jetson Nano预先安装了Python 2.7版本,但是为了获得更好的性能和功能,我们更建议安装Python 3。我们可以使用apt命令来安装Python 3: ``` sudo apt-get update sudo apt-get -y install python3 ``` 这些命令将更新软件库并安装Python 3。安装完成后,我们可以在终端中再次运行`python --version`命令来确认Python 3是否已经成功安装。 此外,为了在Python使用一些额外的功能和库,我们还可以安装pip工具。pip用于管理Python包和模块的安装。我们可以使用以下apt命令来安装pip: ``` sudo apt-get -y install python3-pip ``` 安装完成后,我们可以使用`pip3 --version`命令来确认pip是否已经成功安装。 总之,对于Jetson Nano上的Python安装,我们可以通过这些简单的步骤来安装Python 3和pip。这样,我们就可以开始在Jetson Nano上进行Python编程了。 ### 回答3: Jetson Nano是一款由英伟达公司设计的开发板,它支持使用Python进行编程。以下是在Jetson Nano上安装Python的步骤: 1. 打开Jetson Nano的电源并连接到显示器和键盘。 2. 在Jetson Nano上打开终端或通过SSH远程登录。 3. 确保Jetson Nano已经连接到互联网,以便下载和安装Python。 4. 在终端中输入以下命令来更新软件包列表: ``` sudo apt-get update ``` 5. 安装Python: ``` sudo apt-get install python3 ``` 6. 安装Python的包管理工具pip: ``` sudo apt-get install python3-pip ``` 7. 验证Python是否成功安装。在终端中输入以下命令来检查Python的版本: ``` python3 --version ``` 8. 这样就成功安装了Python。你可以通过编写Python脚本或在Python交互式环境中运行代码来开始使用它。 请注意,Jetson Nano还可以安装其他Python版本,例如Python 2.7。但是,由于Python 2已经过时,建议使用Python 3进行开发。另外,你还可以使用包管理工具pip来安装Python的各种库和框架,以便进行更丰富的开发和数据科学工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值