-
实战保存摄像头录制的视频通过上面的讲解,我们已经知道了如何保存摄像头的视频。下面,我们来实战保存摄像头录制的视频影像,具体代码如下所示:import cv2 cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter.fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480)) while (cap.isOpened()): ret, frame = cap.read() if ret: out.write(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break else: break cap.release() out.release() cv2.destroyAllWindows() 运行之后,我们就会捕获摄像头录制的视频,直到你按下ESC键后停止。录制Canny边缘检测视频通过上文,我们知道如果如果后期处理视频,就需要对其每一帧的图像进行处理。现在,我们来实现Canny边缘检测,具体代码如下:import cv2 cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter.fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480)) while (cap.isOpened()): ret, frame = cap.read() if ret: frame=cv2.Canny(frame,100,200) out.write(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break else: break cap.release() out.release() cv2.destroyAllWindows() 运行之后,我们的视频效果如下:作者:极客学编程链接:https://juejin.cn/post/6989915535341273095来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
VideoWriter在OpenCV中,它给我们提供了cv2.VideoWriter类将图片序列保存为视频。同时,通过该类,我们也可以修改视频的各种属性,完成对视频类型的转换。一般我们使用cv2.VideoWriter类,需要如下3个步骤。构造函数OpenCV为cv2.VideoWriter类提供了构造函数,用它来实现初始化工作。该函数的完整定义如下:cv2.VideoWriter(filename,fourcc,fps,frameSize[,isColor]) filename:需要输出保存的视频文件名。如果文件名存在,覆盖原文件。fourcc:视频的编码类型。在OpenCV中,cv2.VideoWriter_fourcc()函数用来指定视频的编码格式。该函数的参数有4个,这4个字符构成了编/解码器的“4字标记”,每个编/解码器都有一个这样的标记。常用标记如下表:取值含义cv2.VideoWriter_fourcc('I','4','2','0')未压缩的YUV颜色编码格式,色度子采样为4:2:0,该编码格式具有较好的兼容性,但生成的视频文件较大,文件扩展名为.avicv2.VideoWriter_fourcc('P','I','M','I')MPEG-1编码格式,生成的文件扩展名为.avicv2.VideoWriter_fourcc('X','V','I','D')MPEG-4编码格式,如果希望得到的视频大小为平均值,可以选用这个参数组合。文件扩展名为.avicv2.VideoWriter_fourcc('T','H','E','O')Ogg Vorbis编码格式,文件扩展名为.ogvcv2.VideoWriter_fourcc('F','L','V','I')Flash视频格式,文件扩展名为.flvcv2.VideoWriter_fourcc('M','P','4','V')文件扩展名.mp4fps:帧速率,比如录制视频每秒30帧,或者60帧等。frameSize:帧的长宽isColor:是否为彩色图像write函数cv2.VideoWriter类中还提供了cv2.VideoWriter.write()函数用于写入下一帧视频。其完整定义如下:cv2.VideoWriter.write(image) image参数是需要写入的视频帧,也就是前篇博文最后实战项目中的frame。释放同样的,在不需要cv2.VideoWriter类对象时,需要将其释放。释放所使用的函数为cv2.VideoWriter.release()。作者:极客学编程链接:https://juejin.cn/post/6989915535341273095来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
问题现象当在Notebook中使用opencv.imshow后,会造成Notebook崩溃。原因分析opencv的cv2.imshow在jupyter这样的client/server环境下存在问题。 而matplotlib不存在这个问题。解决方法参考如下示例进行图片显示。注意opencv加载的是BGR格式, 而matplotlib显示的是RGB格式。Python语言:from matplotlib import pyplot as plt import cv2 img = cv2.imread('图片路径') plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.title('my picture') plt.show()
-
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。OpenCV可以在Windows,Android,Maemo,FreeBSD,OpenBSD,iOS,Linux 和Mac OS等平台上运行。使用者可以在 SourceForge 获得官方版本,或者从 SVN 获得开发版本。OpenCV也是用CMake。在Windows上编译OpenCV中与摄像输入有关部分时,需要DirectShow SDK中的一些基类。该SDK可以从预先编译的Microsoft Platform SDK(or DirectX SDK 8.0 to 9.0c / DirectX Media SDK prior to 6.0)的子目录Samples\Multimedia\DirectShow\BaseClasses获得。于2010年12月06日,OpenCV 2.2.0 正式版发布
-
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。1、人机互动2、物体识别3、图像分割4、人脸识别5、动作识别6、运动跟踪7、机器人8、运动分析9、机器视觉10、结构分析11、汽车安全驾驶ModelArts同样涉及不少应用领域,ModelArts一站式AI开发平台是华为技术有限公司研发的一款技术产品。提供全流程的AI开发服务,海量数据处理、大规模分布式训练、端·边·云模型按需部署,运维管理,帮助用户快速创建和部署模型、管理全周期 AI 工作流,满足不同开发层次的需要,降低AI开发和使用门槛,实现系统的平滑、稳定、可靠运行。获得荣誉该技术产品在2019年5月26日获得2019中国国际大数据产业博览会“领先科技成果奖之黑科技”奖项。
-
OpenCV开源计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:1、研究代码(慢,不稳定,独立并与其他库不兼容)2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。
-
【功能模块】OPENCV【操作步骤&问题现象】办法我是想了一个,可以通过AIPP转,模型只有一个ADD 0的算子就可以。但是这种方案也有局限性,模型输入尺度固定,只能对缩放后的图片进行处理。acldvppVpcConvertColorAsync接口未提供。请问一下,你们内部有什么方法做这块么?谢谢!~【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 为Intel® Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的 IPP 库,OpenCV 将在运行时自动加载这些库。 1999年1月,CVL项目启动。主要目标是人机界面,能被UI调用的实时计算机视觉库,为Intel处理器做了特定优化。2000年6月,第一个开源版本OpenCV alpha 3发布。2000年12月,针对linux平台的OpenCV beta 1发布。2006年,支持Mac OS的OpenCV 1.0发布。2009年9月,OpenCV 1.2(beta2.0)发布。2009年10月1日,Version 2.0发布。2010年12月6日,OpenCV 2.2发布。2011年8月,OpenCV 2.3发布。2012年4月2日,发布OpenCV 2.4。2014年8月21日,发布OpenCv 3.0 alpha。2014年11月11日,发布OpenCV 3.0 beta。2015年6月4日,发布OpenCV 3.0。2016年12月,发布OpenCV 3.2版(合并969个修补程序,关闭478个问题)2017年8月3日,发布OpenCV 3.3版(最重要的更新是把DNN模块从contrib里面提到主仓库)OpenCV 使用类BSDlicense,所以对非商业应用和商业应用都是免费(FREE)的。(细节参考 license)OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和ARM嵌入式系统中,这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。
-
grab()与retrieve()一般情况下,我们都只使用一个摄像头,上面这些步骤与函数完全能够应付。但是,如果需要同步一组或一个多头摄像头,上面的函数就无法胜任了。这个时候,我们就需要使用cv2.VideoCapture.grab()与cv2.VideoCapture.retrieve()函数。你可以把函数cv2.VideoCapture.read()理解为这两个函数的组合。函数cv2.VideoCapture.grab()用于指向下一帧,函数cv2.VideoCapture.retrieve()用来解码并返回一帧。所以,对于一组摄像头我们可以这样操作:cap0=cv2.VideoCapture(0) cap1=cv2.VideoCapture(0) isCamera0=cap0.grab() isCamera1=cap1.grab() if isCamera0 and isCamera1: frame0=cap0.retrieve() frame1=cap1.retrieve()当然,这两个函数也可以读取视频文件。作者:极客学编程链接:https://juejin.cn/post/6989452450365341710来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
有时,我们需要获取cv2.VideoCapture摄像头的一些属性,比如其分辨率,像素什么的。就需要通过OpenCV提供给我们的cv2.VideoCapture.get()函数。其完整定义如下:cameraInfo=cv2.VideoCapture.get(propId) 复制代码这里参数propId对应着就是cv2.VideoCapture类对象的属性。比如,我们获取摄像头图像的宽度,代码如下:cap=cv2.VideoCapture(0) print(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 复制代码既然能获取宽度,肯定也能获取摄像头图像的高度,亮度等信息,包括饱和度,对比度都能够获取到。作者:极客学编程链接:https://juejin.cn/post/6989452450365341710来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
视频视频是非常重要的视觉信息来源,它是视觉处理过程中经常要处理的一类信号。实际上,视频是由一系列图像构成,这一系列的图像被称为帧,帧是以固定时间间隔从视频中获取的。获取帧的速度称为帧速率,其单位通常使用“帧率/每秒”表示,代表在1秒内所出现的帧数,也就是游戏迷称为的FPS。如果我们从视频中提取出独立的帧,就可以使用图像处理的方法对其进行处理,达到处理视频的目的。VideoCapture类在OpenCV中,它给我们提供了cv2.VideoCapture类来处理视频。通常我们使用 VideoCapture类有以下几个步骤:初始化VideoCapture类提供了构造函数:cv2.VideoCapture(),用于打开摄像头并完成摄像头的初始化操作。其构造函数定义如下:cv2.VideoCapture(摄像头ID号)摄像头ID号默认值为-1,表示随机选取一个摄像头。如果你运行该程序的设备有多个摄像头,则用0表示设备的第一个摄像头,1表示设备的第二个摄像头,依次类推。当然,一般台式机只有一个摄像头,用0或者-1都可以。比如,下面代码都行:video=cv2.VideoCapture(0) video=cv2.VideoCapture(-1) 检查摄像头是否初始化成功为了程序的健壮性,我们一般在获取摄像头初始化之后,检验摄像头是否初始化成功。检查摄像头是否初始化成功的函数为cv2.VideoCapture.isOpened(),其完整定义如下:result=cv2.VideoCapture.isOpened() 如果成功,result返回True,如果失败,result返回False。当我们初始化摄像头失败后,我们还可以使用函数cv2.VideoCapture.open()打开摄像头。具体代码如下:video=cv2.VideoCapture(0) result=cv2.VideoCapture.isOpened() if result is False: result=cv2.VideoCapture.open(0) 其中,open参数也是摄像头的ID号,与前面构造函数一样。同时,使用open()函数打开摄像头后,也返回成功True或失败False。不过,cv2.VideoCapture.open()函数还可以直接打开视频文件。比如:result=cv2.VideoCapture.open(filename) 捕获帧摄像头初始化完成之后,我们就可以从摄像头中捕获帧信息了。在OpenCV中,它给我们提供的捕获帧函数为cv2.VideoCapture.read()。其完整定义如下:retval,image=cv2.VideoCapture.read() 其中,retval表示是否捕获成功,返回布尔类型。image返回捕获的帧信息(也就是图像)。如果没有捕获帧信息,该值为空。释放在我们捕获帧,或者使用玩摄像头资源之后,我们需要释放该资源,也就是关闭摄像头。在OpenCV中,它提供函数cv2.VideoCapture.release()关闭摄像头,其使用方式如下:cv2.VideoCapture.release() 以上,就是OpenCV使用摄像头捕获信息的基本步骤。作者:极客学编程链接:https://juejin.cn/post/6989452450365341710来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
【功能模块】mxpi_opencvosd0模块检测结果标记【操作步骤&问题现象】实现图像检测+检测结果标记+图像保存pipline构建如下:【截图信息】错误信息:【日志信息】(可选,上传日志内容或者附件)
-
背景使用800-3000服务器运行gitee代码仓中WAV_to_word样例。驱动固件:3.3.0,;cann:5.0.1。配套服务器:Linux ubuntu 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:41:03 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux代码地址(WAV_to_word):https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/5_nlp/WAV_to_word过程1、下载驱动固件cann包,这里以root为运行对象。因此npu相关软件安装在/usr/local/Ascend目录下。完成各种安装后,导出必要的环境变量。如LD_LIBRARY_PATH。2、导出该仓库编译过程需要的环境变量 ${install_path}, ${DDK_PATH}, ${NPU_HOST_LIB}。这些环境变量在Makefile或者CMakeLists.txt中会用到。这里的配置如下图3、参考WAV_to_word文档,下载pb模型并进行atc模型转化(注意atc的环境变量设置)。同时下载wav文件。atc环境变量设置可以参考sdk文档。得到om文件4、由于代码需要用到atlasutil库,而本机无此库。因此需要先将此库编译安装,再返回wav2word案例。4.1 此链接描述了Atlas300下,c++样例的环境安装部署。由于本机已经配置好cann环境,同时安装了ffmpeg与opencv。因此跳过了12步骤。4.2 但是由于34步骤是基于12步骤的,相关的安装路径,环境变量等设置都有所关联。因此在编译atlasutil的时候,不能直接make 与 make install。需要进行一下修改。(若用户从头开始,按照4.1链接进行部署,则跳过下面的修改步骤)4.2.1 根据ffmpeg与opencv安装文档第3条,选择将ffmpeg与opencv安装在$HOME/ascend_ddk/${arch}目录下。因此官方默认必要的库文件都在${HOME}/ascend_ddk/${arch}/lib下。4.2.2 而本机已经安装了opencv与ffmpeg,分别在/usr/local/opencv与/usr/local/ffmpeg下。4.2.3 以此为基础修改atlasutil的Makefile。首先打开Makefile。添加头文件。找到INC_DIR =,所在位置,添加内容如下4.2.4 接着找到LINK_FLAGS,添加内容如下。4.2.5 这样就能找到ffmpeg与opencv必要的库文件了。接着按照文档编译安装即可。结果会保存在${HOME}/ascend_ddk/${arch}/lib下5、atlasutil库已经编译好,回到WAV_to_word样例中。此时需要修改WAV_to_word的CMakeLists.txt,同样需要添加ffmepg与opencv头文件与库文件路径。修改如下5.1 打开WAV_to_word路径下src/CMakeLists.txt,找到include_directories,添加以下内容(按照实际安装路径修改)。5.2 找到link_directories,添加以下内容(按照实际安装路径修改)。5.3 编译链接,得到main可执行文件6、将data/*.wav文件转化成 .bin文件,需要用到script/preparedata.py。这里有一个地方需要注意,原代码通过 . 分割。而代码仓解压名称为sample-v0.4.0,这样分割会有问题,所以我做了一点修改最终需要的是这样的文件,在data下生成对应的.bin文件7、运行main,得到结果注意事项1、代码仓中,环境部署文档以HwHiAiUser为运行用户,而这里使用的是root为运行用户。因此npu相关安装路径不一样,用户需要以实际安装路径为准。2、文档中涉及200dk使用,而这里使用的是800-3000服务器,开发运行环境一体,因此所有部署操作都省略3、相关环境变量最好写入bashrc中,避免重启终端后环境变量消失,导致链接库找不到,或者找错的情况。4、编译找不到库文件时,检查是否将是否将正确库文件路径加入。总结跑通样例还是比较简单,需要多注意环境变量,最好把环境变量加入bashrc中。
-
提取图像前景既然我们了解了原理,也知道了OpenCV提供的方法。下面,我们来试着提取上述图像的前景,代码如下:import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread("4.jpg") plt.subplot(121) plt.imshow(img, cmap="gray") plt.axis('off') mask = np.zeros(img.shape[:2], dtype=np.uint8) bgdModel = np.zeros((1, 65), dtype=np.float64) fgdModel = np.zeros((1, 65), dtype=np.float64) mask[10:200, 95:220] = 3 cv2.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK) mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8') ogc = img * mask2[:, :, np.newaxis] plt.subplot(122) plt.imshow(ogc, cmap="gray") plt.axis('off') plt.show()运行之后,我们可以完全分离出人脸与背景,效果如下:至于mask取值为什么会是这样,我们先来看看如下代码:import cv2 img = cv2.imread("4.jpg") rect=img[10:200,95:220] cv2.imshow("4",rect) cv2.waitKey() cv2.destroyAllWindows()运行之后,效果如下:可以看到,10:200, 95:220是坐标(10,95)宽高200,220的矩形框,也就是可能前景的矩形框。通过可能前景加上CrabCut算法,我们获取确定前景(这里是人物头部)。使用模板提取图像前景下面,我们直接使用cv2.GC_INIT_WITH_MASK来提取。代码如下:import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread("4.jpg") mask = np.zeros(img.shape[:2], dtype=np.uint8) bgdModel = np.zeros((1, 65), dtype=np.float64) fgdModel = np.zeros((1, 65), dtype=np.float64) rect = (60, 10, 400, 500) cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT) mask2 = cv2.imread("37.jpg",0) plt.subplot(121) plt.imshow(mask2, cmap="gray") plt.axis('off') mask[mask2 == 0] = 0 mask[mask2 == 255] = 1 mask, bgd, fgd = cv2.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK) mask = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8') ogc = img * mask[:, :, np.newaxis] plt.subplot(122) plt.imshow(ogc, cmap="gray") plt.axis('off') plt.show()运行之后,效果如下:这里,我们构造了一个模板,并没有使用矩形框。通过模板,我们可以获取另一个图像中,大致的确定前景。这里,我们使用像素0标注确定背景,使用像素1标注确定前景。本文来源掘金。
-
在OpenCV中,它给我们提供了cv2.grabCut()函数来实现交互式前景提取,其完整定义如下:def grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode=None): img:输入图像,8位3通道mask:掩模图像,8位单通道。该参数用于确定前景区域,背景区域和不确定区域,可以设置为4种形式:取值含义cv2.GC_BGD表示确定背景,也可以用数值0表示cv2.GC_FGD表示确定前景,也可以用数值1表示cv2.GC_PR_BGD表示可能的背景,也可以用数值2表示cv2.GC_PR_FGD表示可能的前景,也可以用数值3表示在使用模板提取前景时,会将参数值0和2合并为背景(均当作0处理),将参数值1和3合前景(均当作1处理)。在通常情况下,我们可以使用白色笔刷和黑色笔刷在掩模图像上做标记,再通过转换将其中的白色像素设置为0,黑色像素设置为1。rect:指包含前景对象的区域,该区域外的部分被认为是“确定背景”。因此,在选取时务必保证前景包含在rect指定的范围内;否则,rect外的前景部分时不会被提取出来的。只有当参数mode的值被设置为矩形模式cv2.GC_INIT_WITH_RECT时,参数rect才有意义。其格式为(x,y,w,h),分别表示区域的左上角像素的X轴和Y轴坐标以及区域的长宽。如果前景位于右下方,又不想判断原始图像的大小,对于w和h可以直接用一个很大的值。使用掩模模式时,将该值设置为none即可。bgdModel:算法内部使用的数组,值需要创建大小为(1,65)的numpy.float64数组。fgdModel:算法内部使用的数组,值需要创建大小为(1,65)的numpy.float64数组。iterCount:迭代的次数mode:迭代模式,具体取值如下表:取值含义cv2.GC_INIT_WITH_RECT使用矩形模板cv2.GC_INIT_WITH_MASK使用自定义模板。需要注意cv2.GC_INIT_WITH_RECT和cv2.GC_INIT_WITH_MASK能组合使用。所有ROI区域外(也就是不在模板或矩形指定范围内)的像素会自动被处理为背景cv2.GC_EVAL修复模式cv2.GC_EVAL_FREEZE_MODEL使用固定模式作者:极客学编程链接:https://juejin.cn/post/6989182925539377189来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
上滑加载中
推荐直播
-
OpenHarmony应用开发之网络数据请求与数据解析
2025/01/16 周四 19:00-20:30
华为开发者布道师、南京师范大学泰州学院副教授,硕士研究生导师,开放原子教育银牌认证讲师
科技浪潮中,鸿蒙生态强势崛起,OpenHarmony开启智能终端无限可能。当下,其原生应用开发适配潜力巨大,终端设备已广泛融入生活各场景,从家居到办公、穿戴至车载。 现在,机会敲门!我们的直播聚焦OpenHarmony关键的网络数据请求与解析,抛开晦涩理论,用真实案例带你掌握数据访问接口,轻松应对复杂网络请求、精准解析Json与Xml数据。参与直播,为开发鸿蒙App夯实基础,抢占科技新高地,别错过!
回顾中 -
Ascend C高层API设计原理与实现系列
2025/01/17 周五 15:30-17:00
Ascend C 技术专家
以LayerNorm算子开发为例,讲解开箱即用的Ascend C高层API
回顾中
热门标签