- 博客(280)
- 资源 (4)
- 收藏
- 关注
原创 数字人:试用FACEGOOD-Audio2Face的不愉快经历
就像名字中的那样,这其实是一个Audio2Face。主要就是将语音转口型的一个算法,内含了tensorflow的预训练模型,也提供了训练代码。但是该方案还包含了ASR和TTS的流程,包含了一整个问答的流程。中间只缺了连gpt生成内容的部分,这部分代码可以自己加。整体框图如下:上图ASR和TTS之间插入调用大预言模型的代码。不加的话会比较奇怪,自己识别后又TTS。facefood的这个开源不走心,没法用于自己的ARKit方案。除非你打算用官方的116维权重的3D模型。
2024-03-25 11:27:29 964
原创 布料放大100倍后是什么样子
生活中绝大多数面料都是人造化学材料做成的。将纺织面料放大100X以上看到的样子都是那种塑料的感觉,和宏观的外观差别很大。我最近在做这方面的事情,这里分享几张布料的放大图片。这些布料看上去都很普通,但是放大后各有特点。
2024-03-19 16:12:45 147
原创 在Qt中使用线程类QThread
QThread是qt中的一个线程类。目前我了解到的共有两种用法,一种是作为普通的线程,就像c++标准库中的std::thread一样,另一种就是作为信号槽的容器,负责调用qt的时间循环。
2024-03-19 15:42:46 554
原创 QT之QString.arg输出固定位数
最后一个参数是QChar,这是一个16位的字符类型,并不是c++中的char。我需要用QString输出一个固定位数的数字字符串。
2024-02-23 10:17:41 358
原创 python/numpy读取二进制文件
我有一个文件,内容是摄像头的BGR数据,分辨率是1920X1080, 每个像素3个字节,共6220800字节。我已经写到磁盘上的文件里,需要用python读取到numpy中进行处理。使用open打开文件,二进制读取后用np.frombuffer转换为numpy.ndarray。使用numpy的fromfile函数直接从磁盘读取。
2024-02-21 17:02:35 214
原创 PySimpleGUI:让spin支持循环
自己用PySimpleGUI写了个小工具,但是发现它的spin不支持循环。Tkinter本身的Spinbox有wrap这个开关可以觉得是否支持循环,但是没看到PySimpleGUI也支持这个特性。
2024-01-22 18:18:46 404
原创 PySimpleGUI主题窗口样式
PySimpleGUI是一个基于Tthinter的简单GUI框架,可以作为python下跨平台的轻量级UI来使用。我看到示例代码里有设置主题的代码,所以找官方文档看了下,可以预览素有主题,方法是:这个代码会生成所有窗口的预览样式。窗口较多,我这里截图分开来展示。在自己的代码头部,使用以下代码设置主题:这里的主题名称在下面的主题样式中有显示,填写对应的名称即可。PySimpleGUI定义的主题就是设置了按钮、窗口、背景等元素的颜色等信息。所有的主题列表如下:参考资料PySimpleGUI 教程官网
2024-01-08 15:24:26 522
原创 解决pyuvc无法读取yuv格式的问题
我使用pyuvc访问uvc摄像头,但是发现pyuvc只支持了MJPEG的格式和GRAY格式。后面通过阅读pyuvc的代码,发现libuvc本身没有限制YUV的格式,是pyuvc限制的。首先修改_supported_formats,增加对uvc.UVC_FRAME_FORMAT_YUYV和uvc.UVC_FRAME_FORMAT_ANY的支持。编译生成新的whl文件在源码的wheelhouse/目录下。我的摄像头返回的是packaged格式的YUV420数据,我直接保存到磁盘文件中。在编译中我遇到的问题在。
2024-01-05 11:38:50 475
原创 delvewheel进行repair时报Unable to find library: msvcr100.dll【已解决】
我系统是64位的windows,我系统上在C:\Windows\SysWOW64这个目录下是存在msvcr100.dll这个文件的,但是它是32位的,delvewheel 把它忽略了。如果whl是64位CPU,则要求dll也要是64位的。可以看到,这里的类型判断和上面截图里二进制内容是对应的,PE后面跟着0x8664就是64位,跟着0x14c就是32位。网上各种修复方法,试了都不靠谱,还是下载了delvewheel源码一点点加打印分析,发现是dll和whl的CPU位宽类型不一样导致的。
2024-01-05 10:56:32 908
原创 使用python访问uvc摄像头
我有个支持uvc的摄像头,想通过python获取图像并设置其参数。如果在linux下,使用v4l2的相关库即可,在windows下我想了两个办法,一是使用opencv-python,二是安装一个叫pyuvc的库。
2023-12-27 17:06:49 1458 3
原创 linux下使用v4l2-ctl查看摄像头数据
我有一个支持uvc的相机,通过USB线和我的linux开发机连起来了。为了查看它的信息,我上网发现有v4l-utils这个包。这个包的工具可以让我在写代码前就对相机的参数有个大概了解。摄像头的有些参数是可调的,有些甚至支持zoom和云台的控制,具体的情况是看相机端实现的。虽然下面显示/dev下两个设备,但是实际上就一个摄像头(Webcam gadget),下面用/dev/video0来访问。我主要是用v4l2-ctl来查看摄像头的信息。我这个相机是4K的,可以看到4K的格式。
2023-12-27 15:13:51 1128
原创 label_studio中uwsgi内存占用高的问题排查
在大内存的host系统上申请的内存多,在内存不那么富裕的host系统上,docker起来后申请的内存就少。本来发现问题的是label_stuido17.3, 我下载了18.02版本的docker,问题也是一样的,看github上的issues,没看到跟我一样的问题。我用docker-compose控制docker看到的内存大小,结果只要不够的话,uwsgi根本就起不来,我猜测它有办法获取host系统上实际的内存大小,然后计算预申请的内存大小,不够的话就死给你看。箭头左边是默认值,右边是我修改的值。
2023-09-20 14:17:55 274
原创 transformer大语言模型(LLM)部署方案整理
大模型的基本特征就是大,单机单卡部署会很慢,甚至显存不够用。毕竟不是谁都有H100/A100, 能有个3090就不错了。目前已经有不少框架支持了大模型的分布式部署,可以并行的提高推理速度。不光可以单机多卡,还可以多机多卡。
2023-09-13 11:25:55 2858
原创 ARM汇编1:如何在C语言中使用汇编
我最近对ARM的NEON编程有兴趣,主要是为了想学习一些矩阵计算加速相关的知识。但是我又不想写纯粹的汇编语言,我想在C语言中嵌入汇编来使用。经过检索学习,我找到两种可行的方式。我在阅读ncnn代码的时候,发现下面这两种方式都有用到。为了后续能愉快的阅读ncnn代码,将相关知识做个简单的整理。
2023-03-11 15:31:10 994 1
原创 将pytorch的pth文件固化为pt文件
上面代码保存了state_dict, 所以保存的文件中是不含模型结构的,固化时需要从代码构造网络结构。好在项目是完全开源,将原项目下的model目录拷贝过来就行。,这个项目提供了预训练模型,我想要将该模型固化,然后转换格式后在嵌入式端使用。另外不能忘记调用eval() 来固化参数。我参考了一个开源的人像语义分割项目。
2023-03-08 15:13:54 2317 1
原创 c++中使用dlopen加载动态库中带类参数的函数
我一直都知道dlopen的大概用法。但是dlopen毕竟是c语言的函数,能否加载带c++类型传参的函数,我有点不确定。今天有空验证了下,是可以的。extern “C”只影响了函数在动态库中的Name Mangling,并不排斥参数和回参使用c++类型。代码比较 简单,一目了然。
2023-02-17 15:50:02 629
原创 活体识别6:小视科技开源的静默活体检测
按照官方的说明,该方案是一个集成了俩小模型的方案,就是不知道俩小模型的侧重点。总的来说,开源这么一个可用的RGB单帧模型,很值得欣赏。
2023-02-02 18:08:14 1932 1
原创 活体识别5:论文笔记之FeatherNets
我觉得作者做了两件事,一件是通过“集成+级联”的方式拿到了比赛的好成绩,一个是设计了一个轻量级的人脸任务分类网络。这两件事不一定有特别大的关系。要是作者能把只用两个FeatherNet级联的结果写出来就更好了,这样才是一个更有针对性的论文。作为一个开发者,我打算用作者开源的FeatherNetBForIR试试效果。毕竟我只有NIR相机,没有深度相机。
2023-02-01 17:15:41 535 5
原创 活体识别4:论文笔记之《Face Spoofing Detection Using Colour Texture Analysis》
在和打印假脸、视频假脸的对比中,灰度图无法有效区分假脸,因为它们与真脸图片的相似度都比较高(距离小),而在YCbCr空间中,Cb通道和Cr通道中真脸图片和假脸图片相似度较低(距离大),有较明显的区分度。本文的出发点仍然没变,由于缺乏高频信息,假的人脸经过两个不同型号的相机成像和一次打印或显示,将会导致图像质量下降,而且复制的图像也会引入额外的噪声。这个论文是芬兰奥卢大学(Oulu)课题组的一篇很有代表性的论文,写于2016年,使用的是“手工特征+SVM分类器”这种比较传统的方案,方案不复杂,效果还不错。
2023-02-01 11:19:24 506
原创 活体识别3:论文笔记之《FACE ANTI-SPOOFING BASED ON COLOR TEXTURE ANALYSIS》
主要思路就是使用一篇参考文献里描述的LBP特征来提取人脸的color-texture信息,该文献中最终的LBP直方图是由各个色彩通道的LBP直方图组合起来形成的。作者在论文里说,HSV和YCbCr两个色彩空间的特征合并后得到的直方图尺寸是59x3x2,所以可以推测,作何使用的直方图灰阶的数量是59,而不是256。这个论文是芬兰奥卢大学(Oulu)课题组的一篇很有代表性的论文,写于2015年,使用的是“LBP特征+SVM分类器”这种比较传统的方案,方案不复杂,效果还不错。本文的活体检测方法如图 2 所示。
2023-02-01 10:42:36 466 1
原创 活体识别1:近红外(NIR)图像特性
第一行从左到右分别为近红外光下的真实人脸、打印黑白人脸以及打印彩色人脸,第二行为相同情况下的可见光成像图。通过图4可以看出,在近红外光下真实人脸能够保留较为完善的边缘轮廓信息,而打印照片的边缘信息丢失较为严重,同时可以看出在近红外下真实人脸的对比度比打印人脸高。来自:[1]隋孟君,茅耀斌,孙金生.基于近红外图像特征的活体人脸检测[J].自动化与仪器仪表,2021(09):25-29.最近在接触活体识别,在网上找到一个介绍近红外光(NIR)特性的论文,我简单做个笔记。原文的全文在文末参考资料里。
2023-01-31 09:43:29 2790
原创 opencv鱼眼镜头矫正
鱼眼镜头是一种视场角很大的镜头,但是得到的图片有很大的畸变,所以需要对鱼眼镜头进行标定,标定所得的参数可以对鱼眼镜头的图像进行矫正。
2022-12-29 16:42:34 5687 4
原创 onnx模型输入输出维度修改
费了半天劲搭环境,解决onnx转换过程的各种问题,最后发现rknn-toolkit2-v1.3不支持onnx的hardswish算子,白干了。最后,在rknn-toolkit-v1.7环境下将ckpt固化为pb文件,拷贝到rknn-toolkit2-v1.3下,再转换为rknn成功。可以看到右侧inputs和outputs的信息,第一个维度都是无效的,所以我需要把他们固定为1,因为我本来也不需要批量推理。代码运行输出(unk__207和unk__208应该是引起上述保存的原因,改了它们就好了)
2022-10-27 20:01:41 3862 2
原创 tensorflow-ckpt转savemode记录
直接用tf2onnx转有问题,所以使用savemode作为中间格式,先将ckpt转为savemode,再将savemode转为onnx。搞个转换onnx的活,tf2.X的环境下怎么都不行,我后来安装了一个py36+tf1.15+tf2onnx的环境才走通全流程。解决方法在上面代码里,就是在add_meta_graph_and_variables第二个参数里指定“serve”为tag.我有一个tf1.X训练输出的ckpt格式的模型,需要转换为onnx格式。我在tf2.0里好用的代码,在tf2.2就出错了。
2022-10-27 19:43:24 1157
转载 Linux graphic subsytem(1)_概述[转]
图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异的、性能各异的显示相关的器件;对上,它要向应用程序提供易用的、友好的、功能强大的图形用户界面(GUI)。因此,它是linux系统中少有的、和用户空间程序(甚至是用户)息息相关的一个子系统。本文是图形子系统分析文章的第一篇,也是提纲挈领的一篇,将会从整体上,对linux显示子系统做一个简单的概述,进而罗列出显示子系统的软件构成,后续的文章将会围绕这些软件一一展开分析。
2022-10-23 11:55:35 190
原创 opencv中使用copyMakeBorder为图片填充边框
在使用深度学习模型推理的时候,通常输入图片都是一个正方形,而摄像头采集的图片通常是长方形的,这就要把图片的边上填充一些像素,从而变成所需的正方形。在opencv中copyMakeBorder可做填充的工作,非常适合做深度学习图片的前处理。这个例子把图片转换为320X320的正方形图片。
2022-10-21 09:31:54 1356
原创 到底有几个鸿蒙OS? 谈谈我眼里的鸿蒙操作系统
目前鸿蒙是华为的一个大IP,其长远规划就是“理想鸿蒙”的样子。但是普通消费者拿着华为手机用着“AOSP鸿蒙”,却以为自己用的是“理想鸿蒙”。华为在营销上也混淆了“理想鸿蒙”和“AOSP鸿蒙”,导致招来很多人的反感。但是华为作为被美国精准狙击的公司,必须找退路,而且这个退路不是一朝一夕能建好的,所以推出了“AOSP鸿蒙”作为暂时的应敌之策,并对外宣称退路已经建好了,不怕美国制裁,保持消费者对华为的信心。但是私底下也在推进OpenHarmony,将来成熟后就能成为不惧制裁的底牌。结论就是。
2022-10-15 15:20:36 11942 19
原创 tensorflow2.x:构建tf.keras.Model实例的几种方式
我看到教程里搭建模型主要就是实例化一个tf.keras.Model并对它进行各种设置,实例化一个tf.keras.Model对象竟然同时存在多种方式,这也不是“灵活”能解释的通的,感觉还是没有实现一种好用的方式达到“一招鲜”,多种方式并存的原因可能还是设计不够简单。如果是多输入输出的话,输入用[inoput1, input2]这样的方式来传入就可以,输出用[out1,out2]的方式来返回。Sequential只能搭建简单的网络,如果内部有复杂的结构,就需要直接使用tf.keras.Model构造。
2022-08-24 12:36:20 1849
原创 pytorch模型转换问题记录
我在forward()函数里把tensor转换为python数值来显示,调用torch.jit.trace就会报错。在forward()函数里所有的操作都用tensor就没问题了。简单来说,原因就是我保存模型直接用torch.save(), 没法在其它脚本中直接加载,除非那个脚本中也有nn.Module子类的定义。为了在开发板上使用模型,我用转换脚本加载了我生成的pytorch模型文件,但是却报错了。我需要把我的模型保存为TorchScript格式。这样保存的pt就可以在其它python里加载了。...
2022-08-17 20:40:06 3221 2
原创 使用sqlite保存人脸特征
每个人至少要保存两个字段,一个id, 一个特征。其中id我计划用char类型,人脸特征用blob类型,也就是二进制类型。这样我就可以直接把c++里的数据直接存储到sqlite的文件里。我这里想说,使用sqlite3_prepare()+ sqlite3_step()是非常优雅的一种方式,比那种回调的方式要好的多。在做人脸识别的时候,需要在嵌入式端保存底库人脸的特征,我自然想到了sqlite。查询的方法可以从参考资料里的《这里只贴一段读取特征的代码。》里看到具体的例子。...
2022-08-17 20:20:20 803
原创 使用opencv的透视变换裁剪倾斜人脸
人脸检测以后,有了检测框,需要将眼睛扶正,并裁剪,然后resize成需要的大小。人脸检测结果如下:其中蓝色是检测框,内部的红色框是我根据长宽扩展的正方形,绿色框是根据眼睛倾斜角度计算的正方形区域,我需要的就是这个区域。为了得到绿色方框的区域。可以看到上述方法包含两次裁剪和一次旋转。这不是一个好的方案。经过搜索,我了解到opencv里还有透视变换函数cv::warpPerspective, 可以用一个函数替代上述一连串操作,而且速度还快(我是在arm上做的测试)。.........
2022-08-16 09:56:21 2159
原创 c++17操作文件并解析目录
c++17之后c++就已经支持文件系统操作了,用来解析目录方便很多。这里是自己写的一个例子,如果是gcc8,编译时需加-lstdc++fs。gcc9应该不用加了。但是都要开启 -std=c++17。
2022-08-09 10:31:34 566
纺织品 纤维定量分析 近红外光谱法 (FZ-T 01144-2018).pdf
2024-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人