公司博客

最近更新 RSS 隐藏评论 | 快捷方式

  • 短距离无线传输技术Zigbee介绍

    12:21 上午 十一月 16, 2011 | 0 链接地址 | 回复
    标签: zigbee
    分类: IT信息,

    Zigbee是基于IEEE802.15.4标准的低功耗个域网协议。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。

     

    ZigBee, 在中国被译为”紫蜂”,它与蓝牙相类似。是一种新兴的短距离无线技术.

       

    用于传感控制应用(sensor and control).

    此想法在IEEE 802.15工作组中提出,于是成立了TG4工作组,并制定规范IEEE 802.15.4.

    2002年,ZigBee Alliance成立。

    2004年,ZigBee V1.0诞生。它是zigbee的第一个规范.但由于推出仓促,存在一些错误。

    2006年,推出ZigBee 2006,比较完善.

    2007年底,ZigBee PRO推出

    ZigBee的底层技术基于IEEE 802.15.4.

    物理层和MAC层直接引用了IEEE 802.15.4

    在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。对工业,家庭自动化控制和工业遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化,对无线数据通信的需求越来越强烈,而且,对于工业现场,这种无线数据传输必须是高可靠的,并能抵抗工业现场的各种电磁干扰。因此,经过人们长期努力,ZigBee协议在2003年正式问世。另外,Zigbee使用了在它之前所研究过的面向家庭网络的通信协议Home RF Lite。

    长期以来,低价、低传输率、短距离、低功率的无线通讯市场一直存在着。自从Bluetooth出现以后,曾让工业控制、家用自动控制、玩具制造商等业者雀跃不已,

       

    但是Bluetooth的售价一直居高不下,严重影响了这些厂商的使用意愿。如今,这些业者都参加了IEEE802.15.4小组,负责制定ZigBee的物理层和媒体介质访问层。IEEE802.15.4规范是一种经济、高效、低数据速率(<250kbps)、工作在2.4GHz和868/928MHz的无线技术,用于个人区域网和对等网络。它是ZigBee应用层和网络层协议的基础。ZigBee是一种新兴的近距离、低复杂度、低功耗、低数据速率、低成本的无线网络技术,它是一种介于无线标记技术和蓝牙之间的技术提案。主要用于近距离无线连接。它依据802.15.4标准,在数千个微小的传感器之间相互协调实现通信。这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个网络节点传到另一个节点,所以它们的通信效率非常高。

     

    玩转芯片还是玩转模块

    ZigBee作为一种个人网络的短程无线通信协议,已经日益为大家所熟知,它最大的特点就是低功耗、可组网,特别是带有路由的可组网功能,理论上可以使ZigBee覆盖的通讯面积无限扩展。相对蓝牙,红外的点对点通信,和WLAN的星状通信,ZigBee的协议就要复杂得多了。那么我们究竟是该选择ZigBee芯片去自己开发协议呢,还是直接选择已经带有了ZigBee协议的模块直接应用呢?

    玩转芯片的代价:开发时间周期长;人力和技术储备雄厚。

    目前市场上的ZigBee射频收发“芯片”实际上只是一个符合物理层标准的芯片,它只负责调制解调无线通讯信号,所以必须结合单片机才能完成对数据的接收发送和协议的实现。而单芯片也只是把射频部分和单片机部分集成在了一起,不需要额外的一个单片机,它的好处是节约成本,简化设计电路,但这种单芯片也并没有包含ZigBee协议在里面。

    这两种情况都需要用户根据单片机的结构和寄存器的设置并参照物理层部分的IEEE802.15.4协议和网络层部分的ZigBee协议自己去开发所有的软件部分。这个工程量对于做实际应用的用户来讲是很大的,开发周期以及测试周期都是非常之长的,更由于是无线通讯产品,它的产品质量也不是很容易得到保障的。

    即便现在许多ZigBee公司都提供自家芯片的ZigBee协议栈,但这只是提供一种协议的功能,而并不代表它具有真正的可应用性和可操作性,因为它并没有提供一个对用户的数据接口的详细描述,用户怎么才能不顾及芯片内部的程序而很简单轻松的就把自己的数据通过芯片发送出去,甚至组成路由获取传送更远方产品的数据,这都不是只包括了ZigBee协议栈的芯片就能简单实现的,ZigBee协议栈只是说它有了协议的所有组成部分,而究竟怎么把每部分结合并有条不紊的运转起来,并怎么实现和用户自己数据的协议通讯?一个只包含了ZigBee协议栈的芯片是不可能实现得了的。

    直白点讲,这些需要用户根据完整的协议代码和自己上层的通讯协议,再去一点一点每个部分的去修改协议栈中的内容,才能完成简单的数据无线收发,而要完成一条路由,甚至整个网络的通信,那调试测试的时间则会需要更长的。那么对于做实际应用的用户来讲将会大大耽误开发周期,并且这种具有复杂协议的无线产品会具有更多的不定因素,更易受到外界环境条件的影响,在实际开发中遇到的问题将会五花八门,难于应付.。

    玩转模块的代价:省去ZigBee开发周期,能在推广项目上抢到先机。

    ZigBee模块是已经包含了所有外围电路和完整协议栈的能够立即投入使用的产品,已经经过了厂家的优化设计,和老化测试,有一定的质量保证。优秀可靠的zigBee应用“模块”具有在硬件上设计紧凑,体积小,贴片式焊盘设计,可以内置Chip或外置SMA天线,通讯距离从100米到1200米不等,还包含了ADC,DAC,比较器,多个IO,I2C等接口和用户的产品相对接。软件上包含了完整的ZigBee协议栈,并有自己的PC上的配置工具,采用串口和用户产品进行通讯,并可以对模块进行发射功率,信道等网络拓扑参数的配置,使用起来简单快捷。

    透传模块的好处在于用户不需要考虑模块中程序如何运行的,用户只需要将自己的数据通过串口发送到模块里,然后模块会自动把数据用无线发送出去,并按照预先配置好的网络结构,和网络中的目的地址节点进行收发通讯了,接收模块会进行数据校验,如数据无误即通过串口送出。不过目前来说,大多数用户应用Zigbee技术,都会有自己的数据处理方式,以致每个节点设备都会拥有自己的CPU以便对数据进行处理,所以仍可以把模块当成一种已经集成射频、协议和程序的“芯片”。国内外各个ZigBee芯片厂商及模块厂商产品比对

    各厂商及芯片型号 Jennic
    (JN5148)
    TI(Chipcon)
    (CC2530)
    Frescal
    (MC13192)
    EMBER
    (EM260)
    ATMEL
    (LINK-23X)
    ATMEL
    (Link-212)
    工作频率(Hz) 2.4~2.485G 2.4~2.485G 2.4~2.485G 2.4~2.485G 2.4~2.485G 779~928M
    可用频段数(个) 16 16 16 16 16 4
    无线速率(Kbit/s) 250 250 250 250 250~2000 20~1000
    发射功率(dBm) +2.5 +4.5 +3.6 +3 +3 +10
    接收灵敏度(dBm) -97 -97 -92 -97 -101 -110
    最大发射电流(mA) 15 35 35 37.5 21 30
    最大接收电流(mA) 18 24 42 41.5 20 14
    休眠电流(uA) 0.2 1 1 1 0.28 0.5
    工作电压范围(V) 2.0~3.6 2.0~3.6 2.0~3.4 2.1~3.6 1.8~3.6 1.8~3.6
    硬件自动CSMA-CA
    硬件自动帧重发
    硬件自动帧确认
    硬件自动地址过渡
    硬件FCS计算功能
    硬件清除无线通道确认
    硬件RSSI计算功能
    硬件AES/DES
    硬件开放度 不开放 部分开放 部分开放 部分开放 全开放 全开放
    各大公司ZigBee模块 DIGI 赫立讯 上海数传 上海顺舟 深圳鼎泰克 北京云天创
    XBee模块 IP-LINK 1223 IP-LINK 1324 DT8836AA DT8836BB SZ05 DRF1601 ATZGB-780F1 ATZGB-2400F1
    工作频率(Hz) 2.4G 2.4G 454~472M 2.4G 2.4G 2.4G 2.4G 779~
    936M
    2.4G
    可用频段数(个) 16 16 不详 16 16 16 16 4 16
    无线速率(Kbps) 250 250 2.4~256 1000 1000 250 250 250 20~1000
    发射功率(dBm) 0 0 20 不详 不详 25 4 10 3
    接收灵敏度(dBm) -92 -95 -110 不详 不详 -94 -96 -110 -101
    发射电流(mA) 45 29 <94 35 200 <70 34 29 21
    接收电流(mA) 50 27 25 不详 不详 <55 25 19 20
    休眠电流(uA) <10 <4 <1 5 10 30 不详 0.5 0.3
    工作电压范围(V) 2.8~3.4 1.8~3.6 1.8~3.6 1.8~3.6 3.3~5.5 5 5~12 1.8~3.6 1.8~3.6
    工作温度范围(℃) -40~80 -20~70 -40~80 -40~80 -40~80 -40~80 -40~80 -40~80 -40~80
    无PA室内通信距离(m) 30 不详 不详 不详 不详 不详 100 100 100
    无PA室外通信距离(m) 100 100 1500 100 100 2000 400 700 350

    此对比表格都仅对于贴片式便于嵌入的模块并仅依据各厂商的产品手册提供的性能参数进行对比,但是如上海数传等厂商,本人在官网上并没法找到详细的产品手册,也有部分厂商是模棱两可的参数说明,如此表格有错误的地方,欢迎使用过的或者了解其模块的朋友可以对表格进行修改完善。

    目前来说国内做zigbee模块的厂商并不多,本人也只是挑选了部分个人熟知的厂商进行了一个小对比,部分厂商的产品本人也并未入手进行过测试,所以室内室外的通信距离本人并不是很清楚。有些厂商会加外部功放,有些并没有加,以至于通信距离上来说都是不同的,并且目前来说无线通信产品特别是ZigBee,环境对其的通信距离影响很大,各厂商的实测环境也各不相同(有些是置高,有些是功放较大),产品手册上的通信距离最好只是作为一个衡量标准,仅供参考之用。

    假如对这方面有兴趣的朋友,或者正想使用ZigBee进行现场应用的朋友,询问相关模块的时候最好将自己的需求进行一个较为清晰的定位,如距离、数据量、组网、应用场景等。因为Zigbee为近距离、低功耗、小数据量的技术,所以具体应用要求比较高,如在不考虑功耗的情况下,对于距离要求较高的应用,可以使用号称点对点能传10Km~20Km的XBEE模块;如温湿度等数据采集,需要功耗较低,数据量不大,距离近的可以使用一些公司的低功耗模块(距离远就牺牲了功耗),可以使用赫立讯、北京云天创等公司的模块。值得一提的是,由于ZigBee采用随机接入MAC层,且不支持时分复用的信道接入方式,部分ZigBee模块一般会对数据进行校验,返回ACK等操作(一般射频芯片等硬件层会自带,部分公司模块会在程序上也进行相应操作),网络节点数越多,整个网络所有节点采集的数据到服务器的时间就越长,因此不能很好的支持一些实时性要求较高的业务。

     

     

    ZigBee读写设备

       

    ZigBee读写器是短距离、多点、多跳无线通讯产品,能够简单、快速的为串口终端设备增加无线通讯的能力。产品有效识别距离可达1500m,最高识别速度可达200公里/小时,同时识别200 张标签。性能稳定、工作可靠,信号传输能力强,使用寿命长等优势。该设备已广泛应用于门禁、考勤、会议签到、及高速公路、油站、停车场、公交等收费系统等各种领域。该产品的主要功能优势是防水、防雷、防冲击,满足工业环境要求。

    产品性能

    工作频率: 2.4GHz―2.5GHz ISM 微波段

    识别距离: 有效识别距离可达1500m

    识别速度: 最高识别速度可达200公里/小时

    识别能力: 同时识别200 张标签

    识别方式: 全方向识别、定向识别

    环境温度: 在-40℃-85℃

    使用寿命: 30年

    抗干扰性: 使用频道隔离技术,多个设备互不干扰

    安全性能: 防水、防雷、防冲击,满足工业环境要求

    通信接口: RS232/RS485/RJ45

    电 源: 9V/12V-3A DC电源

    天线极化: 垂直

    数据速率: 最高10M bit/s

    外形尺寸: 15.5cm*14cm*5.5cm

    产品重量: 1kg

    外壳材料: 金属材质

    产品颜色: 银灰色

    安装方式: 螺丝安装或者侧挂

     

    ZigBee无线数据传输网络描述

       

    简单的说,ZigBee是一种高可靠的无线数传网络,类似于CDMAGSM网络。ZigBee数传模块类似于移动网络基站。通讯距离从标准的75m到几百米、几公里,并且支持无限扩展。

    ZigBee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,在整个网络范围内,每一个ZigBee网络数传模块之间可以相互通信,每个网络节点间的距离可以从标准的75m无限扩展。

    移动通信的CDMA网或GSM网不同的是,ZigBee网络主要是为工业现场自动化控制数据传输而建立,因而,它必须具有简单,使用方便,工作可靠,价格低的特点。而移动通信网主要是为语音通信而建立,每个基站价值一般都在百万元人民币以上,而每个ZigBee“基站”却不到1000元人民币。每个ZigBee网络节点不仅本身可以作为监控对象,例如其所连接的传感器直接进行数据采集和监控,还可以自动中转别的网络节点传过来的数据资料。除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。

     

     

    ZigBee采用的自组织网通信方式

    ZigBee技术所采用的自组织网是怎么回事?举一个简单的例子就可以说明这个问题,当一队伞兵空降

      zigbee自组织网通信方式

    后,每人持有一个ZigBee网络模块终端,降落到地面后,只要他们彼此间在网络模块的通信范围内,通过彼此自动寻找,很快就可以形成一个互联互通的ZigBee网络。而且,由于人员的移动,彼此间的联络还会发生变化。因而,模块还可以通过重新寻找通信对象,确定彼此间的联络,对原有网络进行刷新。这就是自组织网。

    ZigBee技术为什么要使用自组织网来通信?

    网状网通信实际上就是多通道通信,在实际工业现场,由于各种原因,往往并不能保证每一个无线通道都能够始终畅通,就像城市的街道一样,可能因为车祸,道路维修等,使得某条道路的交通出现暂时中断,此时由于我们有多个通道,车辆(相当于我们的控制数据)仍然可以通过其他道路到达目的地。而这一点对工业现场控制而言则非常重要。

    为什么自组织网要采用动态路由的方式?

    所谓动态路由是指网络中数据传输的路径并不是预先设定的,而是传输数据前,通过对网络当时可利用的所有路径进行搜索,分析它们的位置关系以及远近,然后选择其中的一条路径进行数据传输。在我们的网络管理软件中,路径的选择使用的是“梯度法”,即先选择路径最近的一条通道进行传输,如传不通,再使用另外一条稍远一点的通路进行传输,以此类推,直到数据送达目的地为止。在实际工业现场,预先确定的传输路径随时都可能发生变化,或者因各种原因路径被中断了,或者过于繁忙不能进行及时传送。动态路由结合网状拓扑结构,就可以很好解决这个问题,从而保证数据的可靠传输。

     

     

    ZigBee自身的技术优势

    ①低功耗。在低耗电待机模式下,2 节5 号干电池可支持1个节点工作6~24个月,甚至更长。这是ZigBee的突出优势。相比较,

       

    蓝牙能工作数周、WiFi可工作数小时。

    现在,TI公司和德国的Micropelt公司共同推出新能源的ZigBee节点。该节点采用Micropelt公司的热电发电机给TI公司的ZigBee提供电源。

    ②低成本。通过大幅简化协议(不到蓝牙的1/10) ,降低了对通信控制器的要求,按预测分析,以8051的8位微控制器测算,全功能的主节点需要32KB代码,子功能节点少至4KB代码,而且ZigBee免协议专利费。每块芯片的价格大约为2 美元。

    ③低速率。ZigBee工作在20~250 kbps的较低速率,分别提供250 kbps(2.4GHz)、40kbps (915 MHz)和20kbps(868 MHz) 的原始数据吞吐率,满足低速率传输数据的应用需求。

    ④近距离。传输范围一般介于10~100 m 之间,在增加RF 发射功率后,亦可增加到1~3 km。这指的是相邻节点间的距离。如果通过路由和节点间通信的接力,传输距离将可以更远。

    ⑤短时延。ZigBee的响应速度较快,一般从睡眠转入工作状态只需15 ms ,节点连接进入网络只需30 ms ,进一步节省了电能。相比较,蓝牙需要3~10 s、WiFi 需要3 s。

    ⑥高容量。ZigBee可采用星状、片状和网状网络结构,由一个主节点管理若干子节点,最多一个主节点可管理254 个子节点;同时主节点还可由上一层网络节点管理,最多可组成65000 个节点的大网。

    ⑦高安全。ZigBee提供了三级安全模式,包括无安全设定、使用接入控制清单(ACL) 防止非法获取数据以及采用高级加密标准(AES 128) 的对称密码,以灵活确定其安全属性。

    ⑧免执照频段。采用直接序列扩频在工业科学医疗( ISM) 频段,2. 4 GHz (全球) 、915 MHz(美国) 和868 MHz(欧洲) 。

     

    ZigBee的频带

    1) 868MHZ 传输速率为20Kb/S 适用于欧洲

       

    2) 915MHZ 传输速率为40Kb/S 适用于美国

    3) 2.4GHZ 传输速率为250Kb/S 全球通用

    由于此三个频带物理层并不相同,其各自信道带宽也不同,分别为

    0.6MHZ,2MHZ和5MHZ.分别有1个10个和16个信道。

    不同频带的扩频调制方式有区别.虽然都使用了直接扩频(DSSS)的方式,但从比特到码片的变换方式有较大的差别。

    调制方式都用了调相技术,但868MHZ和915MHZ频段采用的是BPSK

    而2.4GHZ频段采用的是OQPSK

    在发射功率为0dBm的情况下,BLUETOOTH通常能用10M的作用范围。

    而基于IEEE 802.15.4的ZigBee在室内通常能达到30-50米作用距离,在室外空旷地带,甚至可以达到400米作用距离(TICC2530不加入功率放大时的数据)。

    所以ZigBee可归为低速率的短距离无线通信技术.

    ZigBee性能分析

    1.数据速率比较低在2.4GHZ的频段只有250Kb/S,而且只是链路上的速率,除掉信道竞争应答和重传等消耗,真正能被应用所利用的速率可能不足100Kb/S,并且余下的速率可能要被邻近多个节点和同一个节点的多个应用所瓜分。因此不适合做视频之类事情.

    适合的应用领域——–传感和控制

       

    2.可靠性在可靠性方面,ZigBee有很多方面进行保证。物理层采用了扩频技术,能够在一定程度上抵抗干扰

    MAC应用层(APS部分)有应答重传功能.

    MAC层的CSMA机制使节点发送前先监听信道,可以起到避开干扰的作用。

    当ZigBee网络受到外界干扰,无法正常工作时,整个网络可以动态的切换到另一个工作信道上.

    3.时延由于ZigBee采用随机接入MAC层,且不支持时分复用的信道接入方式,因此不能很好的支持一些实时的业务。

    4.能耗特性 能耗特性是ZigBee的一个技术优势.

    通常ZigBee节点所承载的应用数据速率都比较低,在不需要通信时,节点可以进入很低功耗的休眠状态,此时能耗可能只有正常工作状态下的千分之一。由于一般情况下,休眠时间占总运行时间的大部分,有时正常工作的时间还不到百分之一,因此达到很高的节能效果.

    5.组网和路由性——网络层特性

    ZigBee大规模的组网能力——–每个网络65000个节点

    bluetooth——-每个网络8个节点。

    因为ZigBee底层采用了直扩技术,如果采用非信标模式,网络可以扩展得很大,因为不需同步而且节点加入网络和重新加入网络的过程很快,一般可以做到1秒以内,甚至更快.

    bluetooth通常需要3秒

    在路由方面,ZigBee支持可靠性很高的网状网的路由,所以可以布置范围很广的网络,并支持多播和广播特性,能够给丰富的应用带来有力的支持。

     

    ZigBee的应用前景

    ZigBee并不是用来与蓝牙或者其他已经存在的标准竞争,它的目标定位于现存的系统还不能满足其需求的特定的市场,它有着广阔的应用前景。ZigBee联盟预言在未来的四到五年,每个家庭将拥有50 个ZigBee 器件,最后将达到每个家庭150 个。据估计,到2007 年,ZigBee市场价值将达到数亿美元。其应用领域主要包括:

       

    ◆家庭和楼宇网络:空调系统的温度控制、照明的自动控制、窗帘的自动控制、煤气计量控制、家用电器的远程控制等

    ◆工业控制:各种监控器、传感器的自动化控制

    ◆商业:智慧型标签等

    ◆公共场所:烟雾探测器等

    ◆农业控制:收集各种土壤信息和气候信息

    ◆医疗:老人与行动不便者的紧急呼叫器和医疗传感器等。

     

    ZigBee 与开源软件无线电

    GNU Radio 是免费的软件开发工具套件。它提供信号运行和处理模块,用它可以在易制作的低成本的射频(RF)硬件和通用微处理器上实现软件定义无线电。这套套件广泛用于业余爱好者,学术机构和商业机构用来研究和构建无线通信系统。GNU Radio 的应用主要是用Python 编程语言来编写的。但是其核心信号处理模块是C++在带浮点运算的微处理器上构建的。因此,开发者能够简单快速的构建一个实时、高容量的无线通信系统。尽管其主要功用不是仿真器,GNU Radio 在没有射频RF 硬件部件的境况下支持对预先存储和(信号发生器)生成的数据进行信号处理的算法的研究。

     
  • 基于OpenCV的PHP图像人脸识别技术

    11:02 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签: opencv
    分类: PHP,

    本文所介绍的技术不是原创,而是从一个叫Robert Eisele的德国人那里学习来的。他写了一个PHP扩展openCV,只封装了两个函数,叫face_detect和face_count。 openCV是一个开源的用C/C++开发的计算机图形图像库,非常强大,研究资料很齐全。本文重点是介绍如何使用php来调用其中的局部的功能。人脸侦查技术只是openCV一个应用分支。

    OpenCV安装之前必须依赖的包:(请先安装好)

    pkgconfig

    libpng

    zlib

    libjpeg

    libtiff

    python

    1.安装
    从源代码编译成一个动态的so文件。

    1.1.安装 OpenCV (OpenCV 1.0.0)
    下载地址:http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948

    #tar xvzf OpenCV-1.0.0.tar.gz
    #cd opencv-1.0.0
    #./configure
    #make
    #make install
    #make check (检查是否安装全部正确)

    提示: 不要指定安装路径,否则后面编译facedetect会找不到OpenCV的路径。

    1.2 安装facedetect
    下载地址http://www.xarg.org/download/facedetect-1.0.0.tar.gz

    #tar xzvf facedetect-1.0.0.tar.gz
    #cd facedetect-1.0.0
    #phpize && ./configure && make && make install

    编译完之后会提示facedetect.so 文件所在的位置。

    最后确认在php.ini加入
    extension=facedetect.so,重启apache.

    2.函数使用
    在phpinfo()里检查是否有facedetect这个模块。
    从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下

    1. //检查有多少个脸型
    2. var_dump(face_count(‘party.jpeg’, haarcascade_frontalface_alt.xml’));
    3. //返回脸型在图片中的位置参数,多个则返回数组
    4. $arr = face_detect(‘party.jpeg’, haarcascade_frontalface_alt2.xml’);
    5. print_r($arr);

    3.应用
    结合imagick可以将图片做一下应用。因为 face_detect只返回一个矩形参数,包含x,y坐标和w,h长宽参数。下面是我的一个应用demo

    imagick 扩展需要安装 ImageMagick 和 imagick 扩展,请参考:

    ImageMagick官网:http://www.imagemagick.org

    imagick扩展下载:   http://pecl.php.net/package/imagick

    1. <?php
    2. if($_FILES){
    3. $img = $_FILES['pic']['tmp_name'];
    4. $arr = face_detect($img, ’haarcascade_frontalface_alt2.xml’);
    5. //$arr1 = face_detect($img, ’haarcascade_frontalface_alt_tree.xml’);
    6. if(is_array($arr1)) $all =array_merge($arr,$arr1);
    7. else $all = $arr;
    8. $im = new Imagick($img);
    9. //$draw =new ImagickDraw();
    10. //$borderColor = new ImagickPixel(‘red’);
    11. //$draw->setFillAlpha(0.0);
    12. //$draw->setStrokeColor  ($borderColor);
    13. //$draw->setStrokeWidth  (1);
    14. if(is_array($all)){
    15. foreach ($all as $v){
    16. $im_cl = $im->clone();
    17. $im_cl->cropImage($v['w'],$v['h'],$v['x'],$v['y']);
    18. $im_cl->swirlImage(60);
    19. $im->compositeImage( $im_cl, Imagick::COMPOSITE_OVER , $v['x'], $v['y'] );
    20. //$draw->rectangle($v['x'],$v['y'],$v['x']+$v['w'],$v['y']+$v['h']);
    21. //$im->drawimage($draw);
    22. }
    23. }
    24. header( ”Content-Type: image/png” );
    25. echo $im;
    26. }else{
    27. ?>
    28. <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
    29. <form method=”POST” enctype=”multipart/form-data”>
    30. 人脸识别试验:只支持jpg,png<br>
    31. 上传一张图片 <input type=”file” name=”pic”>
    32. <input type=”submit” value=”upload”>
    33. </form>
    34. <?
    35. }
    36. ?>

    参考资料:
    http://www.xarg.org/2008/07/face-detection-with-php/
    http://www.opencv.org.cn/index.php/首页
    http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.html

    以上文章来源:http://blog.csdn.net/zhongmao/archive/2009/01/11/3753377.aspx

    使用测试

    安装测试了一下,如果越是高清的大图,效果越明显,感觉不错

    一 安装
    1 安装opencv

    http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948

    下载opencv-1.1pre1.tar.gz(1.0版本没有安装成功)
    #tar zxvf opencv-1.1pre1.tar.gz
    # cd opencv-1.1.0/
    # /.configure
    #make
    #make install

    2 安装facedetect
    #wget http://www.xarg.org/download/facedetect-1.0.0.tar.gz
    #tar xzvf facedetect-1.0.0.tar.gz
    #cd facedetect-1.0.0
    #/usr/local/php/bin/phpize
    #./configure –with-php-config=/usr/local/php/bin/php-config
    #make
    #make install

    #vi /usr/local/php/etc/php.ini
    // 增加extension=facedetect.so

    3 重启web服务器,在phpinfo()里查看是否有facedetect这个模块

    二 简单测试
    从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下

    //检查有多少个脸型
    var_dump(face_count(’test.jpg’, ‘haarcascade_frontalface_alt.xml’));

    //返回脸型在图片中的位置参数,多个则返回数组
    $arr = face_detect(’test.jpg’, ‘haarcascade_frontalface_alt2.xml’);

    print_r($arr);

    三 测试代码
    <?
    if(empty($_POST)) {
    ?>
    <form name=”form” id=”form” method=”POST” enctype=”multipart/form-data” action=””>
    上传图片:<input type=”file” name=”pic” size=”20″><input type=”submit” name=”submit” value=”上传”>
    </form>
    <?
    } else {
    $img = $_FILES['pic']['tmp_name'];

    $arr = face_detect($img, ‘haarcascade_frontalface_alt2.xml’);

    if(is_array($arr1)) {
    $all = array_merge($arr,$arr1);
    } else {
    $all = $arr;
    }
    $allowtype = 1;
    switch($_FILES['pic']['type']){
    case ‘image/pjpeg’: $fix_pic.= “.jpg”; break;
    case ‘image/jpeg’: $fix_pic.= “.jpg”; break;
    case ‘image/x-png’: $fix_pic.= “.png”; break;
    case ‘image/png’: $fix_pic.= “.png”; break;
    default: $allowtype = 0; break;
    }

    if($allowtype == 0) {
    echo “文件格式错误:只运行jpg或png图片”;exit;
    }

    $tmp_name = time();
    $src_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name.$fix_pic;
    move_uploaded_file($_FILES['pic']['tmp_name'], $src_pic);

    $pic_src = $pic_dst = array();
    if(is_array($all)){
    foreach ($all as $k => $v){
    $tmp_name_new = $tmp_name.”_”.$k;
    $x = $v['x'];
    $y = $v['y'];
    $w = $v['w'];
    $h = $v['h'];
    $dst_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name_new.$fix_pic;
    // echo $src_pic.”<br>”;
    // echo $dst_pic.”<br>”;
    $cmd = “/usr/bin/convert -crop “.$w.”x”.$h.”+”.$x.”+”.$y.” “.$src_pic.” “.$dst_pic;
    // echo $cmd.”<br>”;
    echo `$cmd`;
    $pic_src[] = “upload/”.$tmp_name.$fix_pic;
    $pic_dst[] = “upload/”.$tmp_name_new.$fix_pic;
    }
    }

    foreach($pic_src as $key => $value) {
    echo “<img src=’”.$value.”‘> => <img src=’”.$pic_dst[$key].”‘><br>”;
    }
    }
    ?>

    以上文章来源:http://www.sysbus.com/?p=124

     
  • 您是否目前还在使用Mysql的默认配置?

    10:54 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签:
    分类: Mysql,

    My favorite question during Interview for people to work as MySQL DBAs or be involved with MySQL Performance in some way is to ask them what should be tuned in MySQL Server straight after installation, assuming it was installed with default settings.

    在面试MySQL DBA或者那些打算做MySQL性能优化的人时,我最喜欢问题是:MySQL服务器按照默认设置安装完之后,应该做哪些方面的调节呢?

    I’m surprised how many people fail to provide any reasonable answer to this question, and how many servers are where in wild which are running with default settings.

    令我很惊讶的是,有多少人对这个问题无法给出合理的答案,又有多少服务器都运行在默认的设置下。

    Even though you can tune quite a lot of variables in MySQL Servers only few of them are really important for most common workload. After you get these settings right other changes will most commonly offer only incremental performance improvements.

    尽管你可以调节很多MySQL服务器上的变量,但是在大多数通常的工作负载下,只有少数几个才真正重要。如果你把这些变量设置正确了,那么修改其他变量最多只能对系统性能改善有一定提升。

    key_buffer_size - Very important if you use MyISAM tables. Set up to 30-40% of available memory if you use MyISAM tables exclusively. Right size depends on amount of indexes, data size and workload – remember MyISAM uses OS cache to cache the data so you need to leave memory for it as well, and data can be much larger than indexes in many cases. Check however if all of key_buffer is used over time – it is not rare to see key_buffer being set to 4G while combined size of .MYI files is just 1GB. This would be just a waste. If you use few MyISAM tables you’ll want to keep it lower but still at least 16-32Mb so it is large enough to accommodate indexes for temporary tables which are created on disk.

    key_buffer_size - 这对MyISAM表来说非常重要。如果只是使用MyISAM表,可以把它设置为可用内存的 30-40%。合理的值取决于索引大小、数据量以及负载 — 记住,MyISAM表会使用操作系统的缓存来缓存数据,因此需要留出部分内存给它们,很多情况下数据比索引大多了。尽管如此,需要总是检查是否所有的 key_buffer 都被利用了 — .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB 的情况是非常少的。这么做太浪费了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。

    innodb_buffer_pool_size This is very important variable to tune if you’re using Innodb tables. Innodb tables are much more sensitive to buffer size compared to MyISAM. MyISAM may work kind of OK with default key_buffer_size even with large data set but it will crawl with default innodb_buffer_pool_size. Also Innodb buffer pool caches both data and index pages so you do not need to leave space for OS cache so values up to 70-80% of memory often make sense for Innodb only installations. Same rules as for key_buffer apply – if you have small data set and it is not going to grow dramatically do not oversize innodb_buffer_pool_size you might find better use for memory available.

    innodb_buffer_pool_size - 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了。

    innodb_additional_pool_size This one does not really affect performance too much, at least on OS with decent memory allocators. Still you might want to have it 20MB (sometimes larger) so you can see how much memory Innodb allocates for misc needs.

    innodb_additional_pool_size - 这个选项对性能影响并不太多,至少在有差不多足够内存可分配的操作系统上是这样。不过如果你仍然想设置为 20MB(或者更大),因此就需要看一下Innodb其他需要分配的内存有多少。

    innodb_log_file_size Very important for write intensive workloads especially for large data sets. Larger sizes offer better performance but increase recovery times so be careful. I normally use values 64M-512M depending on server size.

    innodb_log_file_size 在高写入负载尤其是大数据集的情况下很重要。这个值越大则性能相对越高,但是要注意到可能会增加恢复时间。我经常设置为 64-512MB,跟据服务器大小而异。

    innodb_log_buffer_size Default for this one is kind of OK for many workloads with medium write load and shorter transactions. If you have update activity spikes however or work with blobs a lot you might want to increase it. Do not set it too high however as it would be waste of memory – it is flushed every 1 sec anyway so you do not need space for more than 1 sec worth of updates. 8MB-16MB are typically enough. Smaller installations should use smaller values.

    innodb_log_buffer_size 默认的设置在中等强度写入负载以及较短事务的情况下,服务器性能还可以。如果存在更新操作峰值或者负载较大,就应该考虑加大它的值了。如果它的值设置太高了,可能会浪费内存 — 它每秒都会刷新一次,因此无需设置超过1秒所需的内存空间。通常 8-16MB 就足够了。越小的系统它的值越小。

    innodb_flush_logs_at_trx_commit Crying about Innodb being 100 times slower than MyISAM ? You probably forgot to adjust this value. Default value of 1 will mean each update transaction commit (or each statement outside of transaction) will need to flush log to the disk which is rather expensive, especially if you do not have Battery backed up cache. Many applications, especially those moved from MyISAM tables are OK with value 2 which means do not flush log to the disk but only flush it to OS cache. The log is still flushed to the disk each second so you normally would not loose more than 1-2 sec worth of updates. Value 0 is a bit faster but is a bit less secure as you can lose transactions even in case MySQL Server crashes. Value 2 only cause data loss with full OS crash.

    innodb_flush_logs_at_trx_commit 是否为Innodb比MyISAM慢1000倍而头大?看来也许你忘了修改这个参数了。默认值是 1,这意味着每次提交的更新事务(或者每个事务之外的语句)都会刷新到磁盘中,而这相当耗费资源,尤其是没有电池备用缓存时。很多应用程序,尤其是从 MyISAM转变过来的那些,把它的值设置为 2 就可以了,也就是不把日志刷新到磁盘上,而只刷新到操作系统的缓存上。日志仍然会每秒刷新到磁盘中去,因此通常不会丢失每秒1-2次更新的消耗。如果设置为 0 就快很多了,不过也相对不安全了 — MySQL服务器崩溃时就会丢失一些事务。设置为 2 指挥丢失刷新到操作系统缓存的那部分事务。

    table_cache - Opening tables can be expensive. For example MyISAM tables mark MYI header to mark table as currently in use. You do not want this to happen so frequently and it is typically best to size your cache so it is large enough to keep most of your tables open. It uses some OS resources and some memory but for modern hardware it is typically not the problem. 1024 is good value for applications with couple hundreds tables (remember each connection needs its own entry) if you have many connections or many tables increase it larger. I’ve seen values over 100.000 used.

    table_cache – 打开一个表的开销可能很大。例如MyISAM把MYI文件头标志该表正在使用中。你肯定不希望这种操作太频繁,所以通常要加大缓存数量,使得足以最大限度地缓存打开的表。它需要用到操作系统的资源以及内存,对当前的硬件配置来说当然不是什么问题了。如果你有200多个表的话,那么设置为 1024 也许比较合适(每个线程都需要打开表),如果连接数比较大那么就加大它的值。我曾经见过设置为 100,000 的情况。

    thread_cache Thread creation/destructions can be expensive, which happen at each connect/disconnect. I normally set this value to at least 16. If application has large jumps in amount of concurrent connections and I see fast growth of
    Threads_Created variable I boost it higher. The goal is not to have threads created in normal operation.

    thread_cache – 线程的创建和销毁的开销可能很大,因为每个线程的连接/断开都需要。我通常至少设置为 16。如果应用程序中有大量的跳跃并发连接并且 Threads_Created 的值也比较大,那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。

    query_cache If your application is read intensive and you do not have application level caches this can be great help. Do not set it too large as it may slow things down as its maintenance may get expensive. Values from 32M to 512M normally make sense. Check it however after a while and see if it is well used. For certain workloads cache hit ratio is lower than would justify having it enabled.

    query_cache – 如果你的应用程序有大量读,而且没有应用程序级别的缓存,那么这很有用。不要把它设置太大了,因为想要维护它也需要不少开销,这会导致MySQL变慢。通常设置为 32-512Mb。设置完之后最好是跟踪一段时间,查看是否运行良好。在一定的负载压力下,如果缓存命中率太低了,就启用它。

    Note: as you can see all of these are global variables. These variables depend on hardware and mix of storage engines, while per session variables are typically workload specific. If you have simple queries there is no reason to increase sort_buffer_sizeeven if you have 64GB of memory to waste. Furthermore doing so may decrease performance.
    I normally leave per session variable tuning to second step after I can analyze workload.

    注意:就像你看到的上面这些全局表量,它们都是依据硬件配置以及不同的存储引擎而不同,但是会话变量通常是根据不同的负载来设定的。如果你只有一些简单的查询,那么就无需增加sort_buffer_size 的值了,尽管你有 64GB 的内存。搞不好也许会降低性能。
    我通常在分析系统负载后才来设置会话变量。

    P.S Note MySQL distribution contains bunch of sample my.cnf files which may be great templates to use. Typically they would already be much better than defaults if you chose correct one.

    P.S,MySQL的发行版已经包含了各种 my.cnf 范例文件了,可以作为配置模板使用。通常这比你使用默认设置好的多了。

     
  • nginx的debug日志的具体配置

    10:51 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签:
    分类: Nginx,

    在nginx配置文件中设置日志级别为:

    error_log  /path/to/log  debug;
    在http段里面如果有多个server设置日志路径,需要如下设置:
    http {
        server {
            error_log  /path/to/log debug;
            ...
    由于有时候需要避免在大量数据中迷失debug的数据,我们可以设置只接受某些地址的debug信息,这个对于我们排查自写模块尤其有用,设置如下:
    error_log  /path/to/log;
    
    events {
        debug_connection   192.168.1.1;
        debug_connection   192.168.10.0/24;
    }
     
  • 快速人工神经网络 FANN

    10:46 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签: FANN, 人工智能
    分类: 人工智能, 未分类,

    快速人工神经网络在Web程序的应用相当广泛,我们通过引用该库,可以在做非线性问题时候得到极高解效率。

    该类库目前已经支持PHP的程序api,所以结合电子商务的智能推荐和搜索分析将会蕴含极高潜力和能量。

     

    Fast Artificial Neural Network Library is a free open source neural network library, which implements multilayer artificial neural networks in C with support for both fully connected and sparsely connected networks. Cross-platform execution in both fixed and floating point are supported. It includes a framework for easy handling of training data sets. It is easy to use, versatile, well documented, and fast. Bindings to more than 15 programming languages are available. An easy to read introduction article and a reference manual accompanies the library with examples and recommendations on how to use the library. Several graphical user interfaces are also available for the library.

    http://leenissen.dk/fann/wp/

     
  • PHP Web程序的自动化验收测试框架Mink

    10:43 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签: mink, 确认验收, 自动化测试
    分类: 未分类, 系统测试, 网站运维,

    我们知道目前网站的用户确认测试前往往需要做大量的工作进行检验。

    因此,一个自动化的框架来实现接受测试就非常关键。

    目前测试验收领域里面分为 基于浏览器的行为测试 和 基于输入输出数据校验的接口测试。

    这类似于一个做功能测试,模仿人工行为,另外一个做单元测试,模仿程序逻辑和分支判断。

    Mink是一个混合了两种测试套件的bundle,可以有效解决测试过程的两种行为结合。通过与外部API Driver交互:GoutteDriver,SahiDriver 或者最新的 ZombieDriver 。

     

    具体测试程序我们将会封装在系统模块中,更有效的排查多系统对接时候的数据输出输入校验和前端代码调整对不同浏览器的影响。

    http://mink.behat.org/

     
  • Gree的二次开发,让你更加熟悉日本SNS市场

    10:31 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签: gree
    分类: SNS,

    日本的SNS市场与所有其他国家都不相同,他们的SNS更多的是围绕手机客户端。

    所以我们在定位开发其应用时候主要抓住的是移动和交互,包括LBS和虚拟现实进入技术核心竞争。

    发挥了我们电子商务的经验,把电子商务社会网络化。更好的提供了游戏与商品的交互和结合点。

    具体SDK请访问:

    http://developer.gree.co.jp/

     
  • Mobage 的插件与系统对接

    10:28 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签: mobage, sns
    分类: SNS, 未分类,

    Mobage是一个非常强大的游戏SNS。开发基于其插件可以有效获得特定目标群体,并通过互动可以导入其行为进入另外一个系统。

     

    https://developer.mobage.com/

     
  • God - A Process Monitoring Framework in Ruby

    10:23 下午 十月 19, 2011 | 0 链接地址 | 回复
    标签: god, ruby
    分类: 系统测试, 网站运维,

    God s

     
  • RabbitMQ的php-amqplib

    4:08 下午 十月 12, 2011 | 0 链接地址 | 回复
    标签: amqplib, , RabbitMQ
    分类: Erlang, IT信息, PHP, 网站运维,

    物流系统,ERP系统对接往往需要消息机制来确保业务流程的稳定和一致性。这种对接往往需要异步通讯。所以消息队列和高性能的服务尤为关键。RabbitMQ这点表现突出。

     

    https://github.com/tnc/php-amqplib

     

    NOTE

    This library is a fork of the php-amqplib library.

    We modified that library in order to work with PHP 5.3 Strict.

    Also we improved the debug method to increase performance.

    We use it daily in prod for sending/consuming 600K + messages per day.

    Below is the original README file content. Credits goes to the original authors.

    Usage

    Start your RabbitMQ server, then get the source:

    $ git clone git://github.com/tnc/php-amqplib.git 

    Open two Terminals and on the first one execute the following commands to start the consumer:

    $ cd php-amqplib/demo $ php amqp_consumer.php 

    Then on the other Terminal do:

    $ cd php-amqplib/demo $ php amqp_publisher.php some text to publish 

    You should see the message arriving to the process on the other Terminal

    Then to stop the consumer, send to it the quit message:

    $ php amqp_publisher.php quit 

    Debugging

    If you want to know what’s going on at a protocol level then add the following constant to your code:

    <?php define('AMQP_DEBUG', true); ... more code ?> 

    Original README:

    PHP library implementing Advanced Message Queuing Protocol (AMQP).

    The library is port of python code of py-amqplib http://barryp.org/software/py-amqplib/

    It have been tested with RabbitMQ server.

    Project home page: http://code.google.com/p/php-amqplib/

    For discussion, please join the group:

    http://groups.google.com/group/php-amqplib-devel

    For bug reports, please use bug tracking system at the project page.

    Patched are very welcome!

    Author: Vadim Zaliva lord@crocodile.org

     

     

     

     
c
发布
j
下一条
k
上一条
r
回复
e
编辑
o
显示/隐藏 评论
t
返回顶部
esc
取消