opengl

Web上的MediaPipe

拟墨画扇 提交于 2020-08-17 06:22:27
由MediaPipe团队的Michael Hays和Tyler Mullen发布 MediaPipe 是用于构建跨平台多模式应用ML管道的框架。我们之前已经演示了如何 在移动设备(Android,iOS) 和 边缘设备(例如Google Coral ) 上 以MediaPipe图形的形式构建和运行ML管道。在这篇文章中,我们很高兴现在 MediaPipe图表 运行住在Web浏览器中,通过WebAssembly启用并加速 XNNPack ML推理库 。通过将此预览功能集成到我们基于Web的Visualizer工具中,我们提供了一个游乐场,可以快速迭代图形设计。由于所有内容都直接在浏览器中运行,因此视频永远不会离开用户的计算机,并且每次迭代都可以在实时网络摄像头流(以及很快的任意视频)上立即进行测试。 图1显示了在Visualizer中 运行MediaPipe人 脸检测示例 MediaPipe可视化器 MediaPipe Visualizer(参见图2)位于 viz.mediapipe.dev 。可以通过将图形代码粘贴到“编辑器”选项卡中或将图形文件上传到可视化器中来检查MediaPipe图形。用户可以使用鼠标和滚轮来平移和放大图形的图形表示。该图形还将实时响应编辑器中所做的更改。 图2托管在 https://viz.mediapipe.dev的 MediaPipe

GLUT Tutorials 19:glutPostRedisplay vs. Idle Func

别来无恙 提交于 2020-08-16 20:25:57
博客转自: http://www.lighthouse3d.com/tutorials/glut-tutorial/glutpostredisplay-vs-idle-func/ . GLUT将会调用显示函数知道没有事件函数去处理,也就是说,只要没有事件函数处理,主程序尽可能调用显示函数。我们将建立一个很简单的交互程序,当我们按下键盘,触发键盘事件之后,显示函数将会被调用,屏幕将会被重新绘制。我们需要做的就是 注册显示函数和空闲处理函数为同一函数。 如果只有我们的OpenGL程序运行,或者仅仅是想要测试,这样设置是OK的。但是当OpenGL程序仅仅是我们想要运行的程序其中之一时,计算机资源此时将显得匮乏。导致这个问题的当然是GLUT程序,因为他一直持续调用显示函数,即使在没有任何需要更新的时候。Try checking the task manager tab for the processes and you can see that even if the render does not change from frame to frame, our GLUT app is eating CPU resources. GPU resources are also being used, of course. 当我们需要CPU或者GPU去处理其他事情的时候

程序员如何圆飞行梦想(一)

你说的曾经没有我的故事 提交于 2020-08-16 08:10:26
写在前面 疫情期间宅在家里,你有没有培养一样自己的兴趣爱好呢。笔者作为一个程序员在这期间,除了带娃和工作之外,借着疫情期间,就实现了自己的一个梦想---飞行。 都说一个程序员,特殊时期要么是一个狙击手,要么是一个飞行员。当然我们都热爱和平。那么,作为一个程序员,你是否也曾有一颗飞翔的心呢?这里我跟大家推荐X-PLANE。 关于这个游戏 X Plane是目前模拟飞行游戏人气比较高的,主要因为这个游戏还算比较新,相比另外的平台比如P3D以及FSX已经许久没更新了。所以现在直播平台大多都是X Plane。 这个游戏模拟的机型多数都有对应飞机制造商的官方认可,据说很多飞行员也会用这个作为练习工具,甚至积累飞行小时数。 所以这个游戏真的可以玩的很真,除了飞机之外,你还可以自己去制定航线,甚至加入连飞活动,甚至还有专门的空管角色。 如果你是一个程序员,那么你会有一些优势,比如如何从github获取开源的插件,如果为一个插件去配置相应的Python环境等等。 游戏的获取 游戏购买平台推荐steam,目前价格158,带一部分DLC地景。如果只是想体验下,网络上很容易找到“试玩”的版本。 这个游戏最新的版本是11.41,未来会有11.50版本的发布。区别在于,由于这个游戏的引擎是基于OPENGL的,好的一点是可以兼容windows,macos以及LINUX三大主流平台,缺点是只能调度一个CPU

SharpGL学习笔记(七) OpenGL的变换总结

懵懂的女人 提交于 2020-08-16 06:58:39
笔者接触OpenGL最大的困难是: 经常调试一份代码时, 屏幕漆黑一片, 也不知道结果对不对,不知道如何是好! 这其实就是关于OpenGL"变换"的基础概念没有掌握好, 以至于对"将三维体正确的显示在屏幕上指定位置"这样的操作都无法完成. OpenGL变换包括计算机图形学中最基本的三维变换,即几何变换、投影变换、裁剪变换、视口变换,以及针对OpenGL的特殊变换概念理解和用法,如相机模拟、矩阵堆栈等,这些基础是开始真正走进三维世界无法绕过的基础. 所以笔者在前面花了5篇的篇幅详细讲解了这些基础概念. SharpGL学习笔记(二) 模型变换(几何变换) SharpGL学习笔记(三) 投影变换和视点变换 SharpGL学习笔记(四) 正射投影 SharpGL学习笔记(五) 视口变换 SharpGL学习笔记(六) 裁剪变换 但是这些概念是零散的, 你可能感觉在实际应用中无法把它们有机的串联起来吧? 本节就是想把这些基础知识点按照应用时的逻辑关系理清楚, 并且要彻底搞清楚这些功能之间的关系. 我们拿日常使用相机的例子打个比方: 实际上,从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤 (括号内表示的是相应的图形学概念): 第一步,将相机置于三角架上,让它对准三维景物( 视点变换,Viewing Transformation )。 第二步,将三维物体放在适当的位置(

程序员如何圆飞行梦想(一)

我怕爱的太早我们不能终老 提交于 2020-08-15 15:12:54
写在前面 疫情期间宅在家里,你有没有培养一样自己的兴趣爱好呢。笔者作为一个程序员在这期间,除了带娃和工作之外,借着疫情期间,就实现了自己的一个梦想---飞行。 都说一个程序员,特殊时期要么是一个狙击手,要么是一个飞行员。当然我们都热爱和平。那么,作为一个程序员,你是否也曾有一颗飞翔的心呢?这里我跟大家推荐X-PLANE。 关于这个游戏 X Plane是目前模拟飞行游戏人气比较高的,主要因为这个游戏还算比较新,相比另外的平台比如P3D以及FSX已经许久没更新了。所以现在直播平台大多都是X Plane。 这个游戏模拟的机型多数都有对应飞机制造商的官方认可,据说很多飞行员也会用这个作为练习工具,甚至积累飞行小时数。 所以这个游戏真的可以玩的很真,除了飞机之外,你还可以自己去制定航线,甚至加入连飞活动,甚至还有专门的空管角色。 如果你是一个程序员,那么你会有一些优势,比如如何从github获取开源的插件,如果为一个插件去配置相应的Python环境等等。 游戏的获取 游戏购买平台推荐steam,目前价格158,带一部分DLC地景。如果只是想体验下,网络上很容易找到“试玩”的版本。 这个游戏最新的版本是11.41,未来会有11.50版本的发布。区别在于,由于这个游戏的引擎是基于OPENGL的,好的一点是可以兼容windows,macos以及LINUX三大主流平台,缺点是只能调度一个CPU

Qt编写安防视频监控系统29-掉线重连

自古美人都是妖i 提交于 2020-08-15 05:33:35
一、前言 掉线重连在很早很早以前就做了,基本上的方法都是搞个变量存储最后收到图片的时间,然后开个定时器判断,如果不在暂停模式下,当前时间和最后收到图片的时间差值超过了设定的超时时间,比如5s则认为掉线,然后调用close方法关闭,调用open重新打开视频流,依次重复。 最开始做的时候就发现如果这个最后收到图片的时间更新在视频流控件的widget中,时间久了会假死,明明还在绘制中,但是此时间不会更新,网上也看到有些人遇到了类似的问题,后面把此变量移到解码采集线程中,才正常,正确的做法也是必须放到采集线程才是对的,毕竟硬解码opengl显示以后,和painter就没啥关系了,或者视频流交给句柄以后,也跟painter没啥关系,必须从源头处理才对。 视频流控件自带了自动重连的机制,这样用户再使用的时候不用管如何重连,只需要开启自动重连属性即可,默认开,还有一种情况可能要关闭自动重连属性,比如播放本地视频文件,有时候只需要播放一次就行,不需要播放完成以后又重新播放,如果确实需要,则关联播放完毕信号自行重新open即可。 在具体的使用过程中发现,在视频监控系统中,比如有16个通道,如果自动重连在单个的视频流控件中,则会出现一种情况,网络断了,然后又恢复了,则16个通道很可能在同一时间瞬间恢复,此时CPU和内存暴增,甚至出现过程序崩溃的情况,那怎么搞呢

OpenGL compute shader - strange results

本秂侑毒 提交于 2020-08-15 05:26:43
问题 I'm trying to implement a multipass compute shader for image processing. There is an input image and an output image in each pass. The next pass' input image is the previous ones' output. This is the first time for me using compute shader in OpenGL so there may be some problems with my setup. I'm using OpenCV's Mat as the container to read/copy operations. There are some parts of the code which isn't related to the problem so I didn't include. Some of these parts include loading the image or

openGL学习笔记四十:获取屏幕数据并保存为图片

眉间皱痕 提交于 2020-08-14 17:58:36
   获取当前屏幕、FBO、PBuffer中的数据。 相关函数: glReadPixels ( 0 , 0 , WIDTH , HEIGHT , GL_RGBA , GL_UNSIGNED_BYTE , data ) ; //读取屏幕区域数据 到data数组中 代码如下: FrameBufferObject.h 文件 # pragma once # include <GL/glew.h> class FrameBufferObject { public : unsigned _width ; unsigned _height ; unsigned _FBOID ; unsigned _RBOID ; public : // 建立 bool setup ( int w , int h ) ; void begin ( GLuint textureId ) ; void end ( ) ; // 销毁 void destroy ( ) ; } ; FrameBufferObject.cpp 文件 # include "FrameBufferObject.h" bool FrameBufferObject :: setup ( int w , int h ) { _width = w ; _height = h ; glGenFramebuffers ( 1 , & _FBOID ) ;

Qt音视频开发9-ffmpeg录像存储

拟墨画扇 提交于 2020-08-14 16:17:19
一、前言 上一篇文章写道直接将视频流保存裸流到文件,尽管裸流文件有一定的好处,但是 毕竟大部分用户需要的不是裸流而是MP4视频文件,所以需要将视频流保存成MP4文件,毕竟电脑上的播放器包括默认的播放器,可以直接播放MP4文件,而未必能播放裸流文件,裸流文件需要安装K-Lite解码器才行,关于ffmpeg解码保存成MP4文件,有两种处理方式,一种是先保存成裸流,然后开个后台线程,当裸流文件保存完成以后,自动触发H264转MP4的命令执行,也可以很快的完成转换,另外一种方法就是直接解码的时候保存成MP4文件,两种方法都可以,一般建议后者。 保存成MP4文件流程: 调用avformat_alloc_output_context2开辟一个格式上下文AVFormatContext用来处理视频流输出。 调用avformat_new_stream开辟一个视频流AVStream用来输出MP4文件。 重新设置输出视频流的各种参数。 调用avio_open打开输出文件。 调用avformat_write_header写入头部标识。 循环解码后调用av_write_frame写入数据到文件。 结束后调用av_write_trailer写入结束标识。 关闭解码输出,关闭文件,释放资源, 二、功能特点 多线程实时播放视频流+本地视频+USB摄像头等。 支持windows+linux+mac

openGL学习笔记三十九: FBO

笑着哭i 提交于 2020-08-14 13:53:44
PBuffer:   是opengl的扩展,在opengles 中称作surface,在一个应用程序中建立多个opengl对象,主要用途:离屏渲染(离开屏幕进行渲染),建立一个PBuffer就是建立一个opengl对象,这个opengl对象是在后台绘制,并不把数据绘制到我们的窗口上。 Frame Buffer Object(FBO):   帧缓冲对象,另一种离屏渲染方式,比PBuffer更加高效, opengl2.0以上才有的扩展功能。用于缓存一帧数据。   当创建一个fbo对象后,它并不占用显存,它只是一个对象,你可以给它绑定颜色缓冲区、深度缓冲区等等,(也可以不绑定颜色、深度等等缓冲区)。 相关函数: glGenFramebuffers ( 1 , & _FBOID ) ; //产生一个fbo对象 glBindFramebuffer ( GL_FRAMEBUFFER , _FBOID ) ; //绑定 告诉opengl这是一个framebuffer glGenRenderbuffers ( 1 , & _RBOID ) ; //产生一个reader buffer 绘制使用 glBindRenderbuffer ( GL_RENDERBUFFER , _RBOID ) ; // 告诉opengl这是一个reader buffer glRenderbufferStorage (