静静的小窝

记录自己的感受与收获

收到了一封邮件。
五年了啊,算上加入之前的时间,可能已经快六年了。​记得刚开始建站的时候,只是看到其他人有题解发在博客上,想着自己做的那些题,有些想法好像也是网上题解没有的,发出来分享记录一下。但其实好像也没有写出来什么,毕竟建站的时候基本已经不大oi竞赛了。​
一开始只是网上搜有什么免费的路子,开始在github上面搭网站,之后想着做更多的东西,就自己搞了一个服务器开始搭。那时候还什么都不懂呢,就在网上其他人发的内容里面抄抄改改。服务器系统也不懂。记得一开始在oi里面接触Linux的时候,我还想着这些cdls的真复杂啊,没想到建站过程中用的越来越多居然轻松记住了。​
那时候也不懂nginx,网上找到配置开始各种改勉强跑了起来,后面又知道了https,又是一堆代码的摘抄,当然现在我也没搞明白换caddy了。那时候也不懂git,也就是网上找到了hook代码,让服务器接收到推送之后自动复制到网站目录下,当然之后我也没用过hook了。也搞了cloudflare,逐渐学习互联网的构成,开始dns配置,搞缓存,防火墙。
我一开始找到的是hexo,没想到这就用下来了。为了做个性化,我又靠着自己那点c++的知识开始用js改,还有操作html和css,确实很难理解啊,属性太多了。也要处理npm的一堆包,更新后的各种变动,更换那些不维护的组件,东西逐渐多了起来。
上大学之后,反而操作变少了,也没再折腾什么一直拿着原来的框架跑,只是在平常的学习中,那些以前积累的东西倒是帮助了不少,用linux时候不用再手忙脚乱了。五年前我基本都是从开源社区拿东西,却好像没有给过什么,现在我逐渐也能写一点代码送回去了。
​十年这就过去了一半。当时我想着,十年好久啊,要等到我高考结束,大学本科毕业,现在不知不觉居然就已经过去了。有时候我想,如果我是小说中的人物,我是已经出场了还是已经退幕了呢?
​但,来年的事情,谁知道呢?

最近发现了一个感觉有点反常识的数学估算情况。假设现在我们知道了$\frac{52}{100} = 0.52$,想计算$\frac{(52+1)}{(100+1)}$。我一开始的想法是,分母基本没变,分子加了1,所以增加了略小于$\frac{1}{100}=0.01$的值。实际上$\frac{53}{101}$差不多是0.00524752,也就是只增加了$0.01$作为估算值的一半不到,误差很大。

另外一个估算方法是,原来是100的52份,现在我又加了一份,所以是加了原来分数的$\frac{1}{52}$,差不多是增加了百分之2,原来是$\frac{52}{100}$,差不多是百分之50,那么增加的就是百分之2个百分之50,增加了1个百分点(0.01),也是这样。

我发出去后得到了一些反馈(摘录已获得授权),一位朋友说

分子增加了1,增加的是原来的1/52 分母增加了1,增加的是原来的1/100 (1/52)/(1/100)=1.923就是原来的倒数 用1<<100不太合适,因为增量比率的比值是差不多是2,显然不符合“远大于”的定义

也有一位同学说

分子变化造成的比例影响:约+2% 分母变化造成的比例影响:约-1% 故总影响:+1%(比例影响) 数值在0.5左右,所以数值影响在0.5%左右

我还是想知道可以怎么样地估算呢,于是我尝试算一下增加值的表达式 $\frac{x+1}{y+1} - \frac{x}{y} = \frac{y(x+1) - x(y+1)}{y(y+1)} = \frac{xy + y - xy - x}{y^2 + y} = \frac{y-x}{y^2+y}$ 这里忽略一次项的$y$,那么我们就可以得到一个估算方法,分母减分子的差与分母作商。我们带入一下可以得到0.48,与实际值接近。

我们也可以从比值的角度算一下 $\frac{x+1}{y+1} \div \frac{x}{y} = \frac{x+1}{y+1} \frac{y}{x} = \frac{x+1}{x} \frac{y}{y+1} = (1+ \frac{1}{x}) - (1 - \frac{1}{y+1})$ 从而我们知道 $(\frac{x+1}{y+1} - \frac{x}{y})\div \frac{x}{y} = (1+ \frac{1}{x}) - (1 - \frac{1}{y+1}) - 1 = \frac{1}{x} - \frac{1}{y+1} - \frac{1}{x(y+1)}\approx \frac{1}{x} - \frac{1}{y+1}$ 忽略掉分母里面的高次项。或者如果这里不够明显的话计算下去$\frac{1}{x}(1 - \frac{1}{y+1}) -\frac{1}{y+1} =\frac{1}{x}(\frac{y}{y+1}) - \frac{1}{y+1}$这里我们估算$\frac{y}{y+1}$ 为1可以得到一样的结果。
这样带入$x\approx 50,y=100$得到$\frac{1}{50} - \frac{1}{100} = \frac{1}{100}$也就是说增加值是原值的百分之一,也和真实值接近。

那么为什么一开始的两个估算法不对呢?和后面计算出来的式子,进行比较,发现我们的估算在一开始是算了分子变化的影响略去了分母变化的影响而在这里分母的变化很大。分母增加一后会让前面的52份都变小,虽然每份都不大,但是加起来却是不可以省略的。

前面一篇博文写了一些之前做虚拟主播的过程,得到了一些反馈,根据反馈又做了一些调整,做了一些改变,现在来写一下调整后的情况。

皮套

一些反馈说皮套颜色不太好,太像灭霸了,所以修改了一下颜色,现在不知道大家觉得会不会好一点呢?我自己有一些色弱,对于色彩科学相关的了解也不多,也就是看着感觉改了一些,不一定好,大家有好的建议也可以提出来。

虚拟麦克风

之前以为必须要虚拟一个麦克风出来作为OBS和虚拟机之间的中介,后来发现好像不需要,直接连线把OBS的输出连到虚拟机输入上面就可以了。至少我Pipewire没什么问题。

OBS

原来的OBS是在Flatpak上面的包,但是感觉附加插件不是很支持,遇到了一些问题,然后转成了snap上面的包,然后装了一个显示鼠标的插件。同时snap包自己还带了一个VST的变声模块,我不怎么会用,就改了一下pitch,好处是不需要再担心linux的音频问题了,直接obs内部就处理好了。

AI字幕

试了一些集成方案,现在自己用上游的whisper.cpp的项目跑,但是whisper的模型不太好设置简体和繁体,网上的方案是prompt上面写,可惜自带的stream代码不能处理prompt,只能自己改了一改,发现自己好久不写C++已经有些生疏了。

LLM接入

解释一下为什么不接入LLM。目前没有在直播上面太盈利的打算,所以不会挂机直播。我真人回复就可以了,还达不到需要LLM回复的地步。

这不是一个常规的虚拟直播需求,而是有一些怪异点的需求(Linux&直播pk&3d皮&免费&变声),所以实现得很别扭,如果你是普通用户,可能和你关系不大。

一直想着做虚拟形象来直播,遇到了蛮多的状况的,有一些网上也没有搜到的,这里写出来和大家分享一下。

皮套

皮套有3D和2D两种的,可以使用不同的软件绘制。这里我是用来steam上面的VRoid Studio来画的,目前可以用proton兼容层跑,做出来.vrm的模型格式。我是在默认给的皮上面随便改了改,有更高要求的可以尝试一下自己搞,或者找人搞。画出来的皮套保存在本地,之后动捕软件需要读取这个皮套。

生成画面

虽然有一些软件是直接完成从摄像头捕捉到生成整个画面的过程,一些工具链会按2个部分单独完成,中间的结构图像是LLVM的IR。

动捕

动捕是需要读取摄像头的话画面,识别其中的人脸(以及肢体)画面并转换为抽象的结构图。有一些软件可以从iPhone等设备上拍,但是鉴于我没有,所以就用了笔记本上面的。在软件上有OpenSeeFace,这个是用python写的脚本,可以纯CPU识别。

合成

在获得了动捕软件的结构图之后,这一部分需要把机构图绑定到皮套的骨骼上面,并同时渲染场景光照等内容。这部分是比较麻烦的,很多软件在这里会间或出现渲染的问题,可能和环境有关系,毕竟Linux下的很乱。

我大致跑下来有这几种方案。

  1. 使用https://3d.kalidoface.com/ 这是一个在线的系统,可以自己读取摄像头输出渲染后的画面,优点就是只依赖浏览器,缺点也是纯浏览器,导出画面相对复杂。
  2. 使用vpuppr + 动捕,目前vpuppr已经停止维护了。个人感觉操作比较麻烦,有时候会卡住。
  3. 使用steam上面的VTube Studio,需要proton套一层,很看运气,需要能正常跑出来, 经常会崩溃。
  4. 使用SysMocap,有原生的Linux版本,但是不知道为什么,放大之后渲染会出问题。

推流

使用OBS捕捉生成的画面然后填写rtmp推出去就行了。如果是绿幕的皮套配上一个色度键就可以了,比较简单,OBS在Linux上面没什么大问题。但是声音问题比较大,Linux的音频系统叠岭层峦的,再加上我想要变声,目前比较无解。我自己放弃监听,直接麦克风导入输出出去。变声的软件还没搞定,试了好几只方案都不是太好。

互动

如果是OBS推流B站的话是没法使用各种互动功能的,必须使用b站的直播姬。有浏览器版本但是功能不全,不能用,所以只能想办法用win版本的。
设置OBS虚拟摄像头,然后让直播姬直接捕捉摄像头画面输出出去。或者可以自己设置一个服务器一边推一边拉,延迟比较大,但是因为是基于网络的,相对来说问题少一点,只要能配得明白网络。

  1. wine套上直播姬。在bottles里面尝试了很多配置最后能进去,但是不稳定,重启以后可能就不行了,需要再配来配去。导入的摄像头画面有问题,不确定是什么原因,可能和分辨率有关系。
  2. KVM上Windows,之后打开直播姬。问题是KVM没法捕捉/dev/video流,只能USB重定向,故对于虚拟摄像头不管用。在网上看到好像有新的patch可以导入,但是没搜到太多的使用的文档,还没试过。
  3. VirtualBox开Windows,使用增强功能包之后可以导入摄像头。目前在使用这个方案。

录播

开了服务器挂上了biliup,另外开了一个号上传录播。
https://space.bilibili.com/3546737394321661

总结

Linus_Nvidia.jpg

本文所指AI,仅包括ChatGPT(GPT3.5),Copilot以及文心一言。其他模型没有进行尝试。

用AI写代码在过去的一年中可能已经很常见了,不过我则是几乎没有使用过。这一周为了迁移代码从Python到C++,可是和AI斗法废了一番功夫。

先介绍一下背景吧,毕设涉及到了汽车的图像识别,考虑各种情况最后选择了intel的神经计算棒加速,自然也就用了OpenVINO。因为我负责的是项目其他部分,所以并没有在意这个部分,直到我们的Python版本测试效果不错,需要合入C++版本的时候,“噩梦”才开始了。

因为之前在RoboMaster时有干过Python转C++的活,干的也是Opencv的东西。所以一开始听说转换有问题的时候,觉得我应该能搞定,就跟着一起搞,觉得opencv的api在cpp和python上基本一样,一行行照抄改不就是了。然后就发现遇到了问题,有这样一行代码:image = image.transpose((2, 0, 1))用于对opencv读到的图片进行维度转换以符合模型的输入要求,然而当我去查opencv的api时,发现opencv的transpose并不长这样,只有一个输入和输出。搜索后发现,这里是用了numpy的函数进行了转换。可是cpp没有numpy啊,为了一个这个功能再搞eigen?好像也不合适。此时cpp的代码已经写好了可以编译运行,只是模型结果和python的不一样,识别不出车子来。于是去看cpp代码是怎么写的,发现是cvtColor,emm?于是队友就开始问了AI,给出的方案是手动三重循环转换,copy进代码跑,发现还是不行。于是反复循环问ai,copy进代码,发现不行。我也试了copilot的翻译代码功能到cpp,结果照样不行。反复尝试换模型(FP32,FP16),修改遍历顺序,修改不同的api,都不行。

我于是尝试搞到自己电脑上跑。原来的编译是直接g++跑,但是换了环境之后自然是跑不了了,再加上其他部分代码都是cmake编译的,便尝试搞成cmake,弄了好久搞定了,在编译时会提示使用了2024要被废弃(如废)的框架。于是我想到不如用新框架也许能更好写,便问了队友初始的python代码是从哪个文档里面学来的,得知也是AI生成的。

我想着AI只能出旧框架,那我要不上网搜索有没有新框架。于是花了可能就一分钟就找到了知乎上的文章,然后照着抄,抄的时候看到文章里面的转换,感觉和我们的代码一样,可能还是不行的时候,突然反应过来不一样的地方:之前的尝试,都只是在改模型部分的类型在各种变化,但是Mat读的时候,一直是at成float读的,但是我们的图片读进来是int啊,到原来代码里面一改,模型输出正确了。

关键的修改

唉,与其去搞AI问答,不如当初就直接搜索引擎搜索,早解决了。看起来C++开发暂时还是不会被AI取代的,需要的各类信息比Python一类的代码多得多。

静评旨在抛砖引玉。

https://linux.cn/article-16094-1.html

很多人常常把浏览器和操作系统放在一起讨论,不论这是否是一个工程难度和代码量的级别,浏览器在当代的地位已是越来越重要的,不管是出现了基于浏览器而打造的操作系统(Chrome OS)还是基于electron开发的跨平台应用的不断上涨还是套壳网页的手机应用程序。但是,尽管操作系统有一个占领市场大量份额的微软,仍旧有包括GNU/Linux,FreeBSD,MacOS等的众多选择,而且市场份额基本稳定,而浏览器方向上则是另外一个光景,谷歌携带着它的开源浏览器,已几乎是所向披靡,连微软都在多年的挣扎后放弃,投入怀抱。Firefox等其他内核的浏览器份额不断下滑,仅有苹果的Safari靠着“垄断”保持自己的成绩,当然,随着苹果被迫在手机上开放侧载,允许用户使用其他内核可能也会发生,那时苹果还能占有今天的份额吗?

商业上的成绩外,谷歌也几乎干掉了可能的中国挑战者,不同于其他各式的产品的“国产化”基本不选择易被控制的技术路线,浏览器方面,几乎所有人都是在谷歌的开源框架上制作(360,QQ一类)。而尽管谷歌在中国的服务甚少,乃至有收缩,chrome(国内一般称谷歌浏览器)在包括党政等地方仍旧被推荐使用,甚至有时是唯一推荐浏览器。显然,谷歌并未引起一定的中国政府的安全担忧,想比起不断强调国产的操作系统等。

谷歌的成功,毫无疑问是包括开源等的政策下的成功,但是我们不免会问,在一统江湖后,谷歌会成为前辈那样的“恶龙”吗?应当注意到,谷歌近些来在chromium上提出了许多争议性的目标,也被曝光利用其他方式劣化其他浏览器体验。同时,谷歌也是其主要的竞争对手,Firefox的主要开发者,Mozilla重要的资金来源(用于在Firefox上让google为默认搜索引擎)。所谓“卡脖子”,不过如此。

如果谷歌真的成功地控制了浏览器,我们能期待的,除了那个早已被删去的“No evil”,还能剩下什么吗?

本静评对象为此篇文章,对于其真实性完整性等无法保证,如有错误漏洞,请大家指出。

静评原为我发布在学校内部平台的内容,现同步到这里。
原文地址 https://shuiyuan.sjtu.edu.cn/t/topic/187269

静评旨在抛砖引玉。

https://mp.weixin.qq.com/s/_nS7aQUcgs5shiCgcSGm_A

静静发现,这个样例中的人普遍被想变“美”但是在社会规约下难以变“美”而困扰,末尾的做整容手术与看心理医生这一已是不太被认可的行为做比较,进一步凸显出来了这些人的矛盾处境。

静静觉得,她们的境遇有多个因素。一个是外界他人的“精致”与自身的不“精致”带来的冲突与压力,让这些人看到其他人的“精致”而感到一定的自卑,同时这也是传统“万般皆下品,惟有读书高”式微,外貌愈加被看重后的自我认同的冲突的结果。

静静想,在评价方式撕裂的当下,如何良好地认识自己可能越来越重要,正如文末提到的心理医生一样,多元化的问题不断出现。

静静还想,和那些更早“精致”的人比,文章中的主人公们是晚的,但也有人还没开始,那是换一条赛道还是和那些已经进场的玩家比赛,先追赶再超越呢?文章中的这种撕裂的苦恼,是否也是中国在发展中遇到的复杂方向选择的一个缩影呢?

静静也想,人作为一种自以为高级的物种,是否有能力超脱出此时的“精致”定义呢?是否有可能,我们有着更复杂混合的“精致”呢?

源友们,你们怎么看呢?

本静评对象为此篇文章,对于其真实性完整性等无法保证,如有错误漏洞,请大家指出。