zoukankan      html  css  js  c++  java
  • 300万高清车牌识别一体机Http推送

    搭建PHP服务器,阿里云虚拟Web空间有限制频繁发送数据的策略,WAMP在Windows下即可。分别建立路径:

    /devicemanagement/php/receivedeviceinfo.php;

    /devicemanagement/php/plateresult.php;

    /devicemanagement/php/gio.php;

    /devicemanagement/php/serial.php

    300万高清车牌识别一体机设置见图:

    plateresult.php源代码

    <?php
    $doc = file_get_contents("php://input");
    
    $fp = fopen("snap_shot.txt", "w");
    if(!$fp){
        return;
    }
    $flag=fwrite($fp, $doc); 
    //$flag=fwrite($fp, $jsondecode['AlarmInfoPlate']['result']['PlateResult']['imagePath']); 
    if(!$flag) 
    { 
        fclose($fp);
        return;
    } 
    fclose($fp);
    
    $jsondecode = json_decode($doc,true);
    
    if($jsondecode == null){
        return;
    }
    
    // 小图片
    if(isset($jsondecode['AlarmInfoPlate']['result']['PlateResult']['imageFragmentFile']))
    {
      $small_image = $jsondecode['AlarmInfoPlate']['result']['PlateResult']['imageFragmentFile'];
      if( $small_image != null){
          $fs_image = fopen("smallimage.jpg", "w");
          if(!$fs_image){
              return;
          }
          $simage_decoded = base64_decode($small_image);
          $flag2=fwrite($fs_image, $simage_decoded); 
          fclose($fs_image);
      }
    }
    
    // 大图片
    if(isset($jsondecode['AlarmInfoPlate']['result']['PlateResult']['imageFile']))
    {
      $image = $jsondecode['AlarmInfoPlate']['result']['PlateResult']['imageFile'];
      if( $image != null){
          $fp_image = fopen("image.jpg", "w");
          if(!$fp_image){
              return;
          }
          $image_decoded = base64_decode($image);
          $flag=fwrite($fp_image, $image_decoded); 
          fclose($fp_image);
      }
    }
    
    $license = $jsondecode['AlarmInfoPlate']['result']['PlateResult']['license'];
    $fp_license  = fopen("license.txt", "w");  //将W改为a参数  追加保存日志,  
      换行
    if($fp_license  )
    { 
        $flag=fwrite($fp_license  , $license ); 
        fclose($fp_license);
    }
    
    // 发送开闸命令
    //echo '{"Response_AlarmInfoPlate":{"info":"ok","content":"...","is_pay":"true"}}';
    
    ?>

    receivedeviceinfo.php源代码 服务器返回给相机心跳包,  是否在线

    <?php
    
    echo '{"heartbeat":{"countid":158,"timeStamp":{"Timeval":{"sec":1571932096,"usec":0}},"serialno":"e0fade1063f0fe93"}}';
    
    ?>

     两个相机,相隔几秒多次发送数据,排除相同的车号,可以利用session判断

    <?php

    date_default_timezone_set('PRC'); // 中国时区
    $timechuo = date('YmdHis');
    $license = $_GET["license"];
    session_start();
    $_SESSION['name'][$license][]=$timechuo;
    //unset($_SESSION['license']);
    $nameArray=$_SESSION['name'];
    //var_dump($chehaoArray[$license]);
    //echo json_encode($nameArray);
    if( count($nameArray[$license])==1){
    echo "<br>只有一个时间,执行任务";
    }
    if( count($nameArray[$license])>1){
    if ($timechuo-$nameArray[$license][count($nameArray[$license])-2]>15){
    echo "<br>时间大于15秒,执行任务";
    }else{
    echo "<br>有两个时间,但相邻时间未超过15秒,放弃<br>";
    }
    }

     相机文档:

    相机识别到车号后向服务器推送JSON格式数据,利用PHP 的函数file_get_contents("php://input");接收处理逻辑

    {"AlarmInfoPlate":{"channel":0,"deviceName":"default","ipaddr":"192.168.0.100","result":{"PlateResult":{"bright":0,"carBright":0,"carColor":0,"colorType":0,"colorValue":0,"confidence":0,"direction":0,"license":"_无_","location":{"RECT":{"bottom":0,"left":0,"right":0,"top":0}},"timeStamp":{"Timeval":{"sec":1441815171,"usec":672241}},"timeUsed":0,"triggerType":1,"type":0}},"serialno":"e10b2d6c8c07b422361457935b518642"}}

    说明: 字段名

    含义

    AlarmInfoPlate  

    推送结果为车牌识别结果

    serialno  

    设备序列号

    channel  

    默认通道号(预留)

    deviceName  

    设备名称

    ipaddr  

    设备ip地址

    result  

    实际数据

    PlateResult  

    车牌识别信息

    license  

    车牌号字符串,如“京AAAAAA”

    colorValue  

    (预留)

    colorType  

    车牌颜色 1:蓝色、2:黄色、3:白色、4:黑色、5:绿色、6:黄绿色

    type  

    车牌类型 0:未知车牌:、1:蓝牌小汽车、2::黑牌小汽车、3:单排黄牌、4:双排黄牌、 5:警车车牌、6:武警车牌、7:双层武警车牌、8:单排军车牌、9:双排军车牌、11:新能源小车、12:新能源大车、13:使馆牌、14:领馆牌、15:民航牌

    confidence  

    识别结果可行度 1-100  

    bright  

    (预留)

    direction  

    车的行进方向(预留)

    location  

    车牌在图片中位置

    RECT  

    位置为矩形区域;

    left ight opottom:车牌在图片中位置

    timeUsed  

    识别所用时间(预留)

    carBright  

    车身亮度(预留)

    carColor  

    车身颜色(预留)

    timeStamp  

    识别结果对应帧的时间戳

    Timeval  

    时间戳结构体类型

    sec/usec  

    从1970年1月1日到对应帧的秒和毫秒

    triggerType  

    当前结果的触发类型:由以下值取并的结果:1:手动抓拍、2:视频抓拍、3:线圈抓拍

    imageFile,  

    imageFileLen

    开启发送图片后,加入"imageFile"   :base64编码的图像数据,"imageFileLen"   : 图像数据实际长度,这两项内容。

    imageFragmentFile,  

    imageFragmentFileLen

    开启发送小图片后,加入"   imageFragmentFile " :base64编码的图像数据,"   imageFragmentFileLen " : 图像数据实际长度,这两项内容.

    中心服务器回复JSON数据,

    {"Response_AlarmInfoPlate":{"info":"ok",//回复ok开闸停止当前车牌信息重传(重传停止控制)"content":"retransfer_stop",//回复retransfer_stop停止当前车牌信息重传(重传停止控制)"is_pay":"true",//回复串口数据可以发送到相应串口“serialData”:[{“serialChannel”:0,“data”:”…”,“dataLen”:123},//数据1,可以有或者没有,收到后将发送到对应串口{“serialChannel”:1,“data”:”…”,“dataLen”:123}//数据2,可以有或者没有,收到后将发送到对应串口]}}

    端口触发信息推送

    当开启时,当有车检器输入有变化时,会推送json格式数据,内容如下:

    {"AlarmGioIn":{"deviceName":"default","ipaddr":"192.168.0.100","result":{"TriggerResult":{"source":0,"value":0}},"serialno":"e10b2d6c8c07b422361457935b518642"}}

    其中,TriggerResult中source=0代表是输入1,source=1代表输入2,value表示触发时输入的状态,其他参数的含义和车牌识别结果推送中相同。

    中心服务器回复内容:任意内容。

    串口数据推送:

    //推送串口接收到的数据
    
    {“SerialData”:{"channel":0,//通道号,当前为0"serialno":"e10b2d6c8c07b422361457935b518642",//设备序列号"ipaddr":"192.168.0.100"//设备ip“serialChannel”:0,//串口的通道号,通道0为485口1,通道1为485口2“data“:"MTEyMzQ1Njc4OQ==",//串口数据,采用base64编码“dataLen”:10//串口数据实际长度}}

    中心服务器回复内容:

    {"Response_SerialData":{"info":"ok",//暂时没有实际意义//回复串口数据可以发送到相应串口“serialData”:[{“serialChannel”:0,“data”:”…”,“dataLen”:123},//数据1,可以有或者没有,收到后将发送到对应串口{“serialChannel”:1,“data”:”…”,“dataLen”:123}//数据2,可以有或者没有,收到后将发送到对应串口]}}

    心跳包发送

    当开启时,会按指定间隔时间,发送心跳包:

    {"Heartbeat":{"countid":1,"timeStamp":{"Timeval":{"sec":1441815171,"usec":672241}},"serialno":"e10b2d6c8c07b422361457935b518642"}}

    对于心跳包,中心服务器可回复,可不回复  内容:

    {"Response_Heartbeat":{"info":"ok",//回复ok开闸//回复串口数据可以发送到相应串口“serialData”:[{“serialChannel”:0,“data”:”…”,“dataLen”:123},//数据1,可以有或者没有,收到后将发送到对应串口{“serialChannel”:1,“data”:”…”,“dataLen”:123}//数据2,可以有或者没有,收到后将发送到对应串口],"shutoff":"ok",//回复ok关闸,可以有或者没有"snapnow":"yes",//回复yes相机抓拍,可以有或者没有}}

    1,当超时时间大于心跳时间时,http 连接为长连接

    2,重传使能时,重传停止条件为相机端收到车牌信息应答中有”info”:”ok”或者 “content”:“retransfer_stop”

    白名单发送 中心请求白名单

    {“whiteList”:{“queryNumList”:5000 //请求名单数量,不能为0,最大1000“listPosition”:0                 //请求名单的位置}}

    相机回应

    {“Response_whiteList”:{“totalList”:5000,“queryNumList”:5000,

    “listPosition”:0                      //从0开始

    “data”:[{“carnum”:”粤B88888”,“startime”:”20181029165012”,“endtime”:”20181105165012”},...]}"serialno" : "e10b2d6c8c07b422361457935b518642"}

    中心添加白名单,一次可添加最多2000条

    {“addWhiteList”:{“add_data”:[{“carnum”:”粤B88888”,“startime”:”20181029165012”,“endtime”:”20181105165012”},...]}}

    相机回应

    {“addWhiteList”:{“reponse”:”ok”"serialno" : "e10b2d6c8c07b422361457935b518642"}}

    中心删除白名单,一次可删除最多10条

    {“deleteWhiteList”:{“del_data”:[{“carnum”:“粤B88888”},...]}}

    相机回应

    {“deleteWhiteList”:{“reponse”:”ok”,"serialno" : "e10b2d6c8c07b422361457935b518642"}}

    中心删除全部白名单

    {“deleteWhiteListAll”:1}

    相机回应

    {“deleteWhiteListAll”:{“reponse”:”ok”,"serialno" : "e10b2d6c8c07b422361457935b518642"}}

    另一个相机参数

    https://www.cnblogs.com/zclaude/p/9781645.html

  • 相关阅读:
    如何把SQLServer数据库从高版本降级到低版本
    关于如何利用Pocket CHM Pro制作帮助文档
    关于ASP.net TextBox控件的失去焦点后触发其它事件
    由window.history.back()引发的问题
    设置按钮不可用避免重复提交
    【转】一个高端.NET技术人才的2014年度总结
    Zabbix 各种报错信息和遇到的问题处理(持续总结更新~~~~~)
    ASP.NET调用Web Service
    ASP.NET导出bdf文件
    CS文件密码加密类
  • 原文地址:https://www.cnblogs.com/zhouein/p/14347980.html
Copyright © 2011-2022 走看看