1. 程式人生 > 其它 >基於視訊AI+GIS的創新實踐開發了面向公安行業的二三維一體化服務公安實戰應用

基於視訊AI+GIS的創新實踐開發了面向公安行業的二三維一體化服務公安實戰應用

基於視訊AI+GIS的創新實踐開發了面向公安行業的二三維一體化服務公安實戰應用。二三維一體化服務公安實戰應用是以“雪亮工程”為背景,把治安防範措施延伸到群眾身邊,發動社會力量和廣大群眾共同監看視訊監控,共同參與治安防範,從而真正實現治安防控“全覆蓋、無死角”。在這套系統中,視訊AI與二三維GIS應用充分結合,實現了基於二三維地圖的視訊AI解析、視訊影象智慧預警、三維融合實景指揮排程。

  (1)視訊AI解析應用

  在GIS地圖上,基於視訊AI解析應用,實現人員資訊、車輛資訊、探頭資訊、建築資訊的自動識別和上圖。人員資訊主要識別其臉部特徵、體貌特徵、姿態、狀態、著裝顏色、紋理、體型、膚色、髮型等。車輛資訊主要識別車牌號、顏色、車輛型別、品牌、行駛速度、方向、貼膜顏色、改裝標誌、經過時刻、道路等。探頭資訊主要對攝像頭點位資訊進行上圖、實現短視距、最長視距、平均視距、二維可視域、三維可視域等。建築資訊主要識別提取其建築物特徵、建築物內各層、各房間屬性資訊、建築物窗戶等。

  (2)視訊影象智慧預警

  基於視訊AI解析應用結果,結合二三維GIS地圖,實現人員資訊、車輛資訊、探頭資訊的圖上實時預警、預警資訊查詢、以及預警資訊的統計分析。

  (3)三維融合實景指揮排程

  三維融合實景指揮排程基於三維GIS實現指揮排程、預案管理、資訊統計、綜合預警等功能,為日常勤務、重大任務提供可視、直觀的決策環境,大大提高作戰效率與輔助決策水平。


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title data-i18n="resources.title_queryByWFS"></title>
<style type="text/css">
        .editPane {
            position: absolute;
            right: 50px;
            top: 50px;
            text-align: center;
            background: #FFF;
            display: inline-block;
            z-index: 1000;
        }
    </style>
</head>
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
<div class='panel panel-primary editPane' id='editPane' style="z-index: 99999">
<div class='panel-heading'>
<h5 class='panel-title text-center' data-i18n="resources.text_queryByWFS"></h5>
</div>
<div class='panel-body' id='params'>
<p></p>
<div align='center' class='button-group'>
<input type='button' id='btn1' class='btn btn-primary' data-i18n="[value]resources.btn_polygon" onclick="drawGeometry()"/>
<input type='button' id='btn2' class='btn btn-primary' data-i18n="[value]resources.text_input_value_clear" onclick="clearFeatures()"/>
</div>
</div>
</div>
<div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
<script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
<script type="text/javascript" exclude="iclient-classic" src="../../dist/classic/include-classic.js"></script>
<script type="text/javascript">
    var map, layer, vectorLayer, vectorLayer, vector_style, vector_style_select, myFilter, drawings = null, draw = null,
        host = window.isLocal ? window.server : "https://iserver.supermap.io",
        url = host + "/iserver/services/map-world/rest/maps/World",
        url2 = host + "/iserver/services/data-world/wfs100";
    map = new SuperMap.Map("map", {
        controls: [
            new SuperMap.Control.LayerSwitcher(),
            new SuperMap.Control.ScaleLine(),
            new SuperMap.Control.Zoom(),
            new SuperMap.Control.Navigation({
                dragPanOptions: {
                    enableKinetic: true
                }
            })]
    }, notice());

    layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", url, {
        transparent: true,
        cacheEnabled: true
    }, {maxResolution: "auto"});

    vector_style = new SuperMap.Style({
        fillColor: '#669933',
        fillOpacity: 0.8,
        pointRadius: 8,
        strokeColor: '#aaee77',
        strokeWidth: 3
    });

    vector_style_select = new SuperMap.Style({
        fillColor: '#000',
        fillOpacity: 0.9,
        fontColor: '#232323',
        strokeColor: '#ffffff'
    });

    myFilter = new SuperMap.Filter.Comparison({
        type: SuperMap.Filter.Comparison.EQUAL_TO,
        property: "CAPITAL",
        value: ""
    });

    vectorLayer = new SuperMap.Layer.Vector("World Capitals", {
        strategies: [new SuperMap.Strategy.BBOX()],
        protocol: new SuperMap.Protocol.WFS({
            version: "1.0.0",
            url: url2,
            featureType: "Capitals",
            featureNS: "http://www.supermap.com/World",
            featurePrefix: "World",
            geometryName: "the_geom"

            //類似的ArcGIS請求引數設定(已驗證返回資料)
            //version:"1.0.0",
            //url:"http://localhost:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer",
            //featureType:"cities",
            //featureNS:"http://localhost:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer",
            //featurePrefix:"SampleWorldCities",
            //geometryName:"shape"
        }),

        //filter使用方式一:
        //filter: new SuperMap.Filter.Logical({
        //    type: SuperMap.Filter.Logical.AND,
        //    filters: [
        //        new SuperMap.Filter.Comparison({
        //            type: SuperMap.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,
        //            property: "SMID",
        //            value: "50"
        //        }),
        //        new SuperMap.Filter.Comparison({
        //            type: SuperMap.Filter.Comparison.LESS_THAN_OR_EQUAL_TO,
        //            property: "SMID",
        //            value: "60"
        //        })
        //    ]
        //}),

        //filter使用方式二:
        filter: myFilter,
        styleMap: new SuperMap.StyleMap({
            'default': vector_style,
            'select': vector_style_select
        })
    });

    var select_feature_control = new SuperMap.Control.SelectFeature(vectorLayer);
    map.addControl(select_feature_control);
    select_feature_control.activate();
    layer.events.on({"layerInitialized": addLayer});

    //空間查詢
    drawings = new SuperMap.Layer.Vector("drawings");
    map.addLayer(drawings);
    draw = new SuperMap.Control.DrawFeature(drawings, SuperMap.Handler.Polygon);
    map.addControl(draw);

    function drawGeometry() {
        clearFeatures();
        draw.activate();
        draw.events.on({featureadded: drawCompleted});
    }

    function clearFeatures() {
        vectorLayer.removeAllFeatures();
        drawings.removeAllFeatures();
    }

    function addLayer() {
        map.addLayers([layer, vectorLayer]);
        map.setCenter(new SuperMap.LonLat(0, 0), 0);
    }

    function drawCompleted(event) {
        vectorLayer.filter = new SuperMap.Filter.Spatial({
            type: SuperMap.Filter.Spatial.INTERSECTS,
            value: event.feature.geometry
        });
        vectorLayer.refresh({force: true});
        vectorLayer.filter = myFilter;
        draw.deactivate();
        widgets.alert.clearAlert();
    }

    function notice() {
        widgets.alert.showAlert(resources.msg_drawPolygon, true);
    }

</script>
</body>
</html>