- 博客(53)
- 资源 (2)
- 收藏
- 关注
原创 Tesseract-OCR 字符识别---样本训练
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护,目前发布在Googel Project上。地址为http://code.google.com/p/tesseract-ocr/。
2012-12-25 22:08:21 55731 27
原创 基于摄像头标定的实际应用
摄像头标定在视频处理的很多场景下需要用到,比如需要计算视频画面上的一个目标距离摄像头安装点的位置,又比如需要把摄像头画面上的目标映射到一个电子地图上等。其实这个问题的核心设计到两个平面的坐标转换。相机标定最著名的相关理论是张正友的相机标定理论,该理论在开源项目OpenCV下有具体实现Camera Calibration and 3D Reconstruction。这里面有一点需要注意的是
2017-05-27 18:19:40 2614
原创 基于Wininet异步模式实现的HttpClient
项目在使用Wininet API时一直采用的同步模式,通过开一个线程+等待超时的“假"异步方式来实现非阻塞调用。但是最近突然发现,同步调用InternetOpenUrl在处于阻塞状态时,在某些情况下,通过InternetCloseHandle无法强制InternetOpenUrl立即返回。导致程序退出时开启的线程无法正常退出。排查了很久,未找到问题原因,怀疑这是同步方式本身的bug。所以不得已引入
2016-04-08 15:58:23 2651
原创 通过live555实现H264 RTSP直播
前面的文章中介绍了《H264视频通过RTMP流直播》,下面将介绍一下如何将H264实时视频通过RTSP直播。 实现思路是将视频流数据发送给live555, 由live555来实现H264数据流直播。 视频采集模块通过FIFO队列将H264数据帧发送给live555. live555 在收到客户端的RTSP播放请求后,开始从FIFO中读取H264视频数据并通过RTSP直播
2013-11-20 17:57:07 38531 58
原创 linux创建进程和等待进程退出
在WIN32下,在一个进程里我们可以使用CreateProcess()创建一个进程,然后通过调用WaitForSingleObect(), WaitForMultipleObject()等待进程退出。那么在linux下该如何实现呢?
2013-08-01 00:00:15 2852
原创 RHEL5 SVN客户端安装和使用
1. 安装和配置yuml 下载yum软件包。l 在RedHat根目录下建立一个tools文件夹,将yum.tar.gz解压后拷贝到该目录下。l 打开命令行,执行:sh /tools/yum/ yum_stat.sh。l 安装完成。注:在使用yum命令安装或更新软件前,需确保Red Hat Liunx已完成网络配置并正常连接到互联网。2. 安装EPEL从地址http://
2013-06-30 22:15:23 2801
原创 Apache用户名和密码验证
Apache内置用户验证机制,通过打开httpd.conf文件中的 AllowOverride AuthConfig便可以开启apache权限认证功能。这样在访问apache服务器的页面时,会弹出一个类似如下的登录验证框,验证通过后才能继续访问页面。 但我们一般还需要在web页面中对密码进行配置和修改。那么如何通过页面修改密码呢? A
2013-05-31 23:08:00 4023
原创 H264视频编码成MP4文件
最近需要将H264视频编码成MP4格式。研究了一下,一种方法是采用ffmpeg库,可以先将H264文件解码,再编码生成MP4文件,但这种方式效率较低,10M的视频可能需要几秒钟才能完成。另一种方式根据MP4文件协议直接将H264包封装成MP4格式,由于是直接基于MP4的封装,因而效率很高。H264可以很方便的封装成FLV文件,但MP4格式格式相对比较复杂,封装起来会比较麻烦。由于没时间研究MP4协
2013-04-25 22:29:29 33131 23
原创 H264视频通过RTMP直播
前面的文章中提到了通过RTSP(Real Time Streaming Protocol)的方式来实现视频的直播,但RTSP方式的一个弊端是如果需要支持客户端通过网页来访问,就需要在在页面中嵌入一个ActiveX控件,而ActiveX一般都需要签名才能正常使用,否则用户在使用时还需要更改浏览器设置,并且ActiveX还只支持IE内核的浏览器,Chrome、FireFox需要IE插件才能运行,因此会
2013-04-10 23:29:04 40443 43
原创 RTSP流媒体播放器实现
最近需要做一个RTSP流媒体播放器,研究了一下,封装了一个RTSP播放类CRTSPPlayer,解码库采用ffmpeg。由于需求比较简单,时间也有限,目前只实现了播放、停止、暂停几个基本的接口。下面是基于CRTSPPlayer类实现的简单RTSP播放器。 目前视频只测试了H264格式,其它格式的视频还未做测试
2013-03-27 22:48:59 15856 15
原创 设计模式笔记之---桥接模式
桥接模式(Bridge):将抽象部分与它的实现分离,使它们都能够独立的变化。桥梁模式的设计思想是在软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化,以减少耦合。UML类图: 模式说明:Abstraction 抽象类,定义了一套使用和操作接
2013-01-25 17:26:37 2339
原创 设计模式笔记之---组合模式
组合模式(Composite):将对象组合成树状结构以表示“整体-部分”层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。UML类图: 模式说明:Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Compon
2013-01-24 17:58:59 1464 2
原创 STM32 休眠模式下如何喂狗?
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。其中独立看门狗的时钟由独立的RC振荡器(STM32F10x一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。而且独立看门狗一旦启动,除了系统复位,它不能再被停止。但这样引发的一个问题
2013-01-08 09:16:36 19446 4
原创 OpenCV 视频人数统计研究
最近有空研究了一下基于Opencv的视频人数统计。总结了一下,视频人数统计系统的工作流程主要包括以下几个部分:1.视频捕获 从视频源(摄像头或视频文件)获取到视频图像数据。2.目标提取(背景建模、前景分析) 由视频图像分割出视频图像中的运动区域。 常见的方法:高斯背景建模,帧差法,三帧差法。3.目标识别(模式识别、特征点分析)
2012-12-11 14:45:25 18744 47
原创 SQLite C++操作类
为了方便SQLite的使用,封装了一个SQLite的C++类,同时支持ANSI 和UNICODE编码。代码如下:头文件(SQLite.h)/********************************************************************filename: SQLite.hcreated: 2012-11-05author: fi
2012-11-14 16:15:32 8761 9
原创 WINCE下使用SQLite数据库
SQLite是一个开源的跨平台的轻型数据库,WINCE本身也有一个自带的数据库SQLCE ,但占用的资源会比较大。最近项目中考虑用到 SQLite,因此特别研究了一下,下面介绍一下具体的移植方法。一、下载SQLite源码 去SQLite官网http://www.sqlite.org/download.htm下载最新的source code。我下载的是sqlite-amalgam
2012-10-30 19:15:16 10766 7
原创 设计模式笔记之---状态模式
状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况,把状态的判断转义到表示不同状态的一系列类当中,可以把负责的判断逻辑简化。当遇到需要根据不同的状态进行不同的处理时,大多数是采用switch语句进行处理,但当逻辑过于复杂时,switch就会变得非常庞大,从而不利于
2012-10-26 17:38:32 1429
原创 设计模式笔记之---代理模式
代理模式(Proxy):为其它对象提供一种代理以控制这个对象的访问。 代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。UML类图: 模式说明: Subject
2012-09-29 09:32:43 1383
原创 设计模式笔记之---门面模式
门面模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。模式说明: 子系统(SubSystem) 负责处理复杂的逻辑处理。不直接跟客户打交道。 门面(Facade) 负责跟子系统进行交互,提供简单易用
2012-09-28 14:08:02 1541
原创 JavaScript调用ActiveX控件
一.实现MFC ActiveX控件1.在VS下新建一个MFC ActiveX项目,这里命名为ActiveXDeme。如下图所示:2.创建成功后,在VS菜单栏里点“视图"----"类视图”。3.选中_DActiveXDemo接口,右键选择“添加”----“添加方法”,弹出添加方法向导,如下图所示:这里添加一个SendMsg的方法,参数为BSTR pMSg,添加
2012-09-27 18:14:57 4728 1
原创 设计模式笔记之---建造者模式
建造者模式(Builder):将一个复杂对象的构造和它的表示分离,使得同样的构造过程可以创建不用的表示。 建造模式将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程可以生成具有不同内部表象的产品对象,建造者模式使得产品的内部表象可以独立的变化,客户端不用知道产品内部组成的细节。UML类图: 模式说明:
2012-09-27 15:54:37 1877
原创 设计模式笔记之---命令模式
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式把命令的请求者和命令的执行者分割开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。定义命令的接口,声明执行的方法。UML类图:
2012-09-26 14:49:21 1107
原创 设计模式笔记之---观察者模式
观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。实现过程: 1.观察者(Observer)将自己注册到被观察对象(Observer)中,被观察对象将观察者存放在一个列表(List)中。 2.被观察对象(Subject)发生了某种变化
2012-09-25 16:59:27 1738
原创 设计模式笔记之---单例模式
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 UML类图: 实现方法:1.创建一个指向唯一实例的静态指针,并且是私有的。2.提供一个公用的接口,已获取这个唯一的实例,如果唯一实例不存在,在接口内部首先将它创建出来。3.将类的构造函数设置为私有的,保证用户不
2012-09-25 10:57:05 1379
原创 设计模式笔记之---策略模式
策略模式(Strategy):定义了一系列的算法,将它们分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户端。 策略模式的主要目的是将算法的定义和使用分开,具体算法的定义放在专门的策略类中,每一种策略封装了一种实现算法,使用算法的环境类针对抽象策略(接口)进行编程,遵循了“依赖倒转原则”。由于算法和环境独立开来,减少了各种算法类和使用算法类之间的耦
2012-09-24 14:51:18 1287 1
原创 设计模式笔记之---抽象工厂模式
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 抽象工厂模式最大的好处是便于交换产品系列,由于具体工厂类只在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需改变具体的工厂即可使用不同的产品配置。同时,它让具体的创建实例的过程与客户端分离,客户端是通过它们的抽象接口操作实例,产品的具体
2012-09-24 11:03:40 1247 2
原创 设计模式笔记之---工厂方法模式
工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定去实例化那一个类,工厂方法使一个类的实例化延续到其子类。UML类图: 工厂方法模式基本代码如下:/********************************************************************filename: Fac
2012-09-21 22:15:01 1631
原创 STM32 IAP在线升级
STM32很强大的一个功能是支持IAP在线升级,IAP(In-Application Programming),即在“应用程序中编程 ", 通俗的来将是程序自己可以往程序存储器里写数据或修改程序。有了IAP功能, 即使在产品发布之后也可以方便的通过预留的通信端口(如串口、USB、IIC等)对产品中的程序固件进行更新升级,而无需通过传统的JTAG方式做烧录更新。IAP功能的固件一般包含两个部分:B
2012-08-31 12:01:01 14782 22
原创 STM32 简单多任务调度
STM32的开发目前大多数还开处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理,在main函数中你可能会写成如下方式:int main(void){ while (1) { Task1(); // 调用任务1 Task2(); // 调用任务2 }} 但简单这样写的话会存在一个
2012-07-27 18:08:10 16515 12
原创 汉字转化为拼音,支持多音字
最近需要在车机上增加蓝牙电话薄功能,其中最重要的一个功能是需要通过人名的拼音或首字母来查询电话薄,比较好的一个实现方式是首先将电话薄中中文姓名转化为拼音和拼音对应首字母,然后跟用户输入的拼音字符串进行匹配,如果匹配成功,则将电话薄中匹配的记录显示出来。所以第一个问题是解决汉字转化为拼音的问题。如何将汉字转化为拼音呢? 最好的期望是有一张汉字对应拼音的一个列表,里面列举出每个汉字对
2012-06-12 16:29:18 11393 6
原创 STM32 RDS解码
RDS(Radio Data System)无线数据广播系统是在调频广播发射信号中利用副载波把电台名称、节目类型、节目内容及其它信息以数字形式发送出去。通过具有RDS功能的调谐器就可以识别这些数字信号,变成字符显示在显示屏上。在收到节目的同时,通过RDS可知道接收到的是那个电台,它的发射频率,并给出该电台其余的频率,由此再使用“切换频率”钮来保证所接收的信号为最强的频率。RDS无线数据广播文件可显
2012-05-22 15:03:29 5407 2
原创 STM32 禁用或开启总中断
STM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败。ARM MDK中提供了如下两个接口来禁用和开启总中断:__disable_irq(); // 关闭总中断__enable_irq(); // 开启总中断 但测试发现这样一个问题,在关闭总中断后,如果有中断触发,虽然此时不会引发中断,但在调用__
2012-03-22 16:42:34 21221 2
原创 WinCE OpenGL绘制立方体和纹理贴图
最近工作之余,开始学习OpenGL, 想到WINCE也是支持OpenGL的,只不过是嵌入式的OpenGL ES。于是尝试写了一个WINCE下的OpenGL测试程序,实现了绘制立方体和纹理。效果图如下: 需要注意的是,WINCE系统上开发OpenGL程序需具备以下条件: 1. 处理器的支持,嵌入式处理器需支持3D加速渲染(测试使用的是Telichips
2012-01-05 16:45:16 5582 1
原创 WINCE下点阵转化为位图
在嵌入式开发中,有时候需要将外部设备发过来的点阵数据在ARM显示屏上显示,为了在屏上将点阵显示出来,需要首先想点阵数据转化为位图,然后将位图绘制到DC上,为了方便点阵数据的处理和绘制,封装了一个点阵类,参考代码如下,有问题的地方欢迎大家指点。头文件:/********************************************************************
2011-10-26 16:24:09 1961
原创 printf、fprintf变参函数封装
WINCE下开发的时候,为了方便调试,需要通过串口输出调试信息或者将调试信息已日志形式写入到文件。我们首先想到的的直接调用printf和fprintf输出调试信息和写文件。但这样存在的弊端是不利于编译控制,因为在出版本的时候我们一般是不需要输出或生成这些调试信息的,这就需要能够方
2011-09-26 17:35:11 4811
原创 循环队列
在WINCE开发中很多时候需要用到循环队列来缓存数据,比如在串口通信中,可以将接收到的数据流先缓存到循环队列中,然后再从循环队列中取出数据做下一步的处理。这样可以有效的避免解析数据帧时繁琐的拼接处理。 为了方便使用,封装了一个循环队列类,具体代码如下:
2011-08-24 21:28:28 2996
原创 Winodws HOOK 之键盘钩子
钩子(HOOK)是Windows消息处理机制的一个平台,应用程序以在上面设置子程以监视指定窗口的某种消息或键盘和鼠标事件等,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
2011-07-21 22:56:15 1979 1
原创 WINCE 文本读写操作总结
1.C语言函数fopen(),式例代码: // File.cpp : 定义控制台应用程序的入口点。//#include #include int _tmain(int argc, _TCHAR* argv[]){ // 创建或打开二进制文件,并以追加方式打开 FILE *pFile=_tfopen(_T("//NAND2//FileLog1.txt"), _T("wab+")); if(pFile) { fwprintf(pFile, _T("%s/n"),
2011-05-19 22:11:00 6123 3
原创 WINCE无窗口程序使用定时器
对于WINCE下有窗口的程序,可以通过简单的使用API SetTimer来创建一个定时器。当定时器超时时窗口会收到一个WM_TIMER消息,我们在WM_TIMER消息中去做定时器超时处理即可。而对于无窗口的程序,因为本身没有消息循环,所以无法收到WM_TIMER消息,定时器也就无法正常工作了。 那么无窗口程序如何通过SetTimer来定时呢?其实我们只需在无窗口程序里的主线程中加一个消
2011-05-17 18:34:00 4976 2
原创 STM32 串口DMA方式接收
STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M。最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USART1~USART5),支持DMA方式通信,DMA方式由于不需要CPU的参与,而是直接由DMA控制器完成串口数据的读写,因而可以很大程度的提高CPU的利用率。在使用STM32串口之前需要做一系列的初始
2011-04-02 18:13:00 13810 6
WinCE OpenGL绘制立方体和纹理贴图
2013-01-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人