<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[风斜夜的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fxy0325</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fxy0325]]></copyright><item><title><![CDATA[live555传输实时h264视频流和mp3音频流]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/102377858</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/102377858</guid><author>fxy0325</author><pubDate>Wed, 09 Oct 2019 12:35:30 +0800</pubDate><description><![CDATA[主要是利用live555的rtsp服务器发送实时视频和音频流，并扩大视频buffer的容量来防止视频帧较大时出现数据丢失的问题。

h264的实时视频流

live555的h264视频流是参考https://blog.youkuaiyun.com/caoshangpa/article/details/53200527

主要是创建服务器的时候 sms-&gt;addSubsession(H264VideoFi...]]></description><category></category></item><item><title><![CDATA[live555的rtsp客户端testRTSPClient代码分析]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/101356894</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/101356894</guid><author>fxy0325</author><pubDate>Tue, 01 Oct 2019 23:21:22 +0800</pubDate><description><![CDATA[在做rtsp流媒体传输过程，所以去了解了live555的客户端demo，testRTSPClient。

为了解testRTSPClient，需要大致清楚rtsp的协议，配合抓包知道RTSP的流程，便于我们清晰的了解testRTSPClient的整个过程。抓包使用wireshark。

抓包分析可以参考https://www.jianshu.com/p/409f20b7e813。



test...]]></description><category></category></item><item><title><![CDATA[pyinstaller打包出错 numpy.core.multiarray failed to import]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/99860358</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/99860358</guid><author>fxy0325</author><pubDate>Fri, 06 Sep 2019 19:07:10 +0800</pubDate><description><![CDATA[工程使用pyinstaller3.5打包，工程使用到了tensorflow2.0，opencv-contrib-python 4.1，numpy1.6，打包后运行exe提示与numpy相关的错误：


 File "d:\project\handwriting\ocrcn_tf2\venv\lib\site-packages\PyInstaller\loader\pyimod03_...]]></description><category></category></item><item><title><![CDATA[使用zinnia库进行中文手写识别]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/97938715</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/97938715</guid><author>fxy0325</author><pubDate>Tue, 20 Aug 2019 15:04:20 +0800</pubDate><description><![CDATA[研究手写识别的时候看到了zinnia，就进行了测试，存在问题是zinnia书写依赖笔画顺序，而且没有找到更多的可以用于训练的数据。

zinnia介绍


 zinnia是一个基于svm的开源的手写识别库。zinnia简单地接收用户笔划作为一系列坐标数据，并输出按SVM置信度排序的n个最佳字符。为了保持可移植性，Zinnia没有任何渲染功能。此外，Zinnia还提供训练模块，使...]]></description><category></category></item><item><title><![CDATA[github上传大于100M的单个大文件]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/95632658</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/95632658</guid><author>fxy0325</author><pubDate>Fri, 19 Jul 2019 22:05:53 +0800</pubDate><description><![CDATA[git push的时候，当单文件大于50M会出现警告，单文件大于100M会出现错误，导致push失败。

   大文件需要单独的上传，所以先对小文件进行push。但如果此时已经commit了大文件，则需要把这些超过100M的大文件从本地版本库中移除，使得Push小文件可以成功。

   此部分内容可参考：

https://www.jianshu.com/p/6d...]]></description><category></category></item><item><title><![CDATA[使用opencv实现基于Haar特征的人脸检测]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/93617897</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/93617897</guid><author>fxy0325</author><pubDate>Mon, 08 Jul 2019 14:52:14 +0800</pubDate><description><![CDATA[此文章主要是学习的记录。使用opencv的版本是 3.4.6。实现了图片的人脸检测及人的眼睛、鼻子和嘴巴的检测。里面使用的窗口显示相关的代码都是opencv的函数。



人脸检测

    openCV的人脸识别主要通过Haar特征分类器实现的，haar特征分类器是一个xml文件，文件描述了检测物体的Haar特征值。Haar分类器需要通过大量的数据来训练...]]></description><category></category></item><item><title><![CDATA[C++11的智能指针]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/91483608</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/91483608</guid><author>fxy0325</author><pubDate>Fri, 14 Jun 2019 00:18:25 +0800</pubDate><description><![CDATA[c++11摒弃了auto_ptr，支持 shared_ptr，unique_ptr，weak_ptr，包含在头文件&lt;memory&gt;中。

   智能指针是利用了一种叫做RAII（资源获取即初始化）的技术对普通的指针进行封装，用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。当超出了智能指针类的作用域是，类会自动调用析构函数，析构函数会自...]]></description><category></category></item><item><title><![CDATA[windows服务程序启动外部exe程序]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/90978322</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/90978322</guid><author>fxy0325</author><pubDate>Thu, 06 Jun 2019 00:07:48 +0800</pubDate><description><![CDATA[目的是service中检查某个exe是否运行了，没有则启动程序。

   启动的程序有界面。网上不少是使用ShellExecute来实现的，发现有问题，在win7下实现之后，service启动该程序时会出现一个提示，点击查看会切换到一个奇怪的界面来运行程序。这是因为已经调到session0了，如下图所示：

         

    出现这个...]]></description><category></category></item><item><title><![CDATA[repaint与update的区别]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/90710679</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/90710679</guid><author>fxy0325</author><pubDate>Fri, 31 May 2019 09:39:10 +0800</pubDate><description><![CDATA[repaint会立刻调用paintEvent重绘，而update是把绘制事件加入主事件循环。



Qt文档：


[slot] void QWidget::repaint()

Repaints the widget directly by calling paintEvent() immediately, unless updates are disabled or the widget i...]]></description><category></category></item><item><title><![CDATA[C++的volatile关键字的作用以及常见的误解]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89856871</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89856871</guid><author>fxy0325</author><pubDate>Sun, 05 May 2019 22:40:35 +0800</pubDate><description><![CDATA[近期看到C++标准中对volatile关键字的定义，发现和java的volatile关键字完全不一样，C++的volatile对并发编程基本没有帮助。网上也看到很多关于volatile的误解，于是决定写这篇文章详细解释一下volatile的作用到底是什么。

编译器对代码的优化

在讲volatile关键字之前，先讲一下编译器的优化。


int main() {
    int i = 0...]]></description><category></category></item><item><title><![CDATA[do{}while(0)在宏定义中的作用和消除goto语句]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89856623</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89856623</guid><author>fxy0325</author><pubDate>Sun, 05 May 2019 22:30:05 +0800</pubDate><description><![CDATA[目录

宏定义中使用do{}while(0)的好处

do...while(0)消除goto语句

宏定义中使用do{}while(0)的好处

do{}while(0)的格式:


#define MACRO_NAME(para) do{macro content}while(0)



总结了以下几个原因：

1，空的宏定义避免warning:

#define foo() do{}whil...]]></description><category></category></item><item><title><![CDATA[Qt的TCP粘包分包]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89713806</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89713806</guid><author>fxy0325</author><pubDate>Tue, 30 Apr 2019 23:42:54 +0800</pubDate><description><![CDATA[粘包只可能出现在流传输中，TCP是基于流传输的，而UDP是不会出现粘包，因为UDP是基于报文的，也就是说UDP发送端调用几次write，接收端必须调用相同次数的read读完，每次最多只能读取一个报文，报文与报文是不会合并的，如果缓冲区小于报文长度，则多出来的部分会被丢掉。TCP不同了，它会合并消息，并且以不确定方式合并，这样就需要我们去粘包处理了，TCP造成粘包可能是发送端也...]]></description><category></category></item><item><title><![CDATA[Qt两种线程方式的实现与优缺点对比（及信号槽连接方式）]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89608015</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89608015</guid><author>fxy0325</author><pubDate>Sat, 27 Apr 2019 22:07:50 +0800</pubDate><description><![CDATA[Qt的线程实现主要两种方式：子类化QThread和对象moveToThread。

子类化QThread

实现方法：

 继承QThread

 重写run

 其它线程里使用start函数来启动此线程。

缺点

线程中的对象必须在run函数中创建。

线程无法接收信号，只能发送信号。



对象moveToThread

实现方式：

新建类假设为Worker，在类的槽函数里实现逻...]]></description><category></category></item><item><title><![CDATA[Qt编译debug和release版本--CONFIG(debug,debug|release)]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89603211</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89603211</guid><author>fxy0325</author><pubDate>Sat, 27 Apr 2019 16:29:55 +0800</pubDate><description><![CDATA[在pro文件里添加：



INCLUDEPATH += depend/opencv
INCLUDEPATH += depend/opencv2

debug {
LIBS += -lopencv_core2413d
}
release {
LIBS += -lopencv_highgui241
}

如果打开看项目生成的makefile文件，会发现Makefile.Debug和Makefi...]]></description><category></category></item><item><title><![CDATA[客户端七牛方式上传文件]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89506209</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89506209</guid><author>fxy0325</author><pubDate>Thu, 25 Apr 2019 00:38:40 +0800</pubDate><description><![CDATA[上传流程

在七牛云存储中，整个上传流程大致分为以下几步：


	业务服务器颁发上传凭证给客户端（终端用户）
	
	
	客户端凭借上传凭证上传文件到七牛
	
	
	在七牛获得完整数据后，发起一个 HTTP 请求回调到业务服务器
	
	
	业务服务器保存相关信息，并返回一些信息给七牛
	
	
	七牛原封不动地将这些信息转发给客户端（终端用户）
	


注意：回调到业务服务器的过程是可选的，它...]]></description><category></category></item><item><title><![CDATA[使用PortAudio获取音频和lame库压缩成mp3]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/88089229</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/88089229</guid><author>fxy0325</author><pubDate>Thu, 18 Apr 2019 00:07:53 +0800</pubDate><description><![CDATA[PortAudio

PortAudio是一个免费、跨平台、开源的音频I/O库。得到的数据是PCM数据。

重要参数：

sampleFormat：精度（采样宽度），一秒钟内对声音信号的采样次数。

sampleRate：音频采样率 ，比如16bit，表示可以用2的16次方=65536种数据来区分一个音符。

framesPerBuffer ： 回调的点数，采集到多少个点调用回调函数。



使...]]></description><category></category></item><item><title><![CDATA[C++的四种强制类型转换]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89324063</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89324063</guid><author>fxy0325</author><pubDate>Tue, 16 Apr 2019 00:48:16 +0800</pubDate><description><![CDATA[前言

   C风格的强制类型转换(Type Cast)很简单，不管什么类型的转换统统是：TYPE b = (TYPE)a。如


int a=1;
char b=(char)a;

    这种转换适用于面向过程的没有类的概念的c语言的转换，然而这样的转换符也能随意地应用于类和类的指针，没有安全检查。

  C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用：...]]></description><category></category></item><item><title><![CDATA[静态变量的方式实现的单例类和单例模板]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/89304021</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/89304021</guid><author>fxy0325</author><pubDate>Sun, 14 Apr 2019 23:14:50 +0800</pubDate><description><![CDATA[分析

  在C++11标准中，要求局部静态变量初始化具有线程安全性。描述（在标准草案的6.7节中）：


such a variable is initialized the first time control passes through its declaration; such a variable is considered initialized upon the comp...]]></description><category></category></item><item><title><![CDATA[Centos6 安装Python3.6及设置对应版本pip的简单方式]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/88779831</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/88779831</guid><author>fxy0325</author><pubDate>Sun, 24 Mar 2019 18:32:36 +0800</pubDate><description><![CDATA[Python3其中已经是默认安装了pip及setuptools，所以安装完Python后创建pip3对应的软链接，就可以使用 pip install xxx，网上太多的教程重复安装了pip。部分文章按安装Python2的安装方式写了 Python3 的安装方式，比如安装setuptools等，反而容易出现了各种问题。



1.提前安装需要的环境


yum install openssl-de...]]></description><category></category></item><item><title><![CDATA[改文件导致 could not open session]]></title><link>https://blog.youkuaiyun.com/fxy0325/article/details/88327190</link><guid>https://blog.youkuaiyun.com/fxy0325/article/details/88327190</guid><author>fxy0325</author><pubDate>Fri, 08 Mar 2019 09:21:22 +0800</pubDate><description><![CDATA[修改/etc/security/limits.conf文件



	root soft nproc unlimited
	
	
	root hard nproc unlimited
	
	
	root soft nofile unlimited
	
	
	root hard nofile unlimited
	


导致出现问题

重新登录后，无法登陆，提示 could not open sess...]]></description><category></category></item></channel></rss>