From 5ae97eebd0dfcaad32e92f9df7b7f73caad922bf Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期四, 07 十一月 2019 18:20:43 +0800 Subject: [PATCH] merge module --- util/upload.go | 2 util/simpleCV.go | 46 + go.mod | 14 ruleserver/ruleToformula.go | 97 ++ ruleserver/attachInfo.go | 42 + ruleserver/personTrack.go | 158 +++-- ruleserver/readyDataForRule.go | 58 - structure/gragh.go | 3 labelFilter/req.go | 127 +++- /dev/null | 0 go.sum | 147 +++++ logger/logger.go | 50 + insertdata/config.go | 63 ++ insertdata/insertDataToEs.go | 548 +++++-------------- main.go | 38 ruleserver/geoPolygon_test.go | 38 + labelFilter/readyDataForLabel.go | 52 + labelFilter/ruleForLabel.go | 50 + structure/rule.go | 8 ruleserver/timeTicker.go | 50 + util/simpleCV_test.go | 10 ruleserver/geoPolygon.go | 8 22 files changed, 939 insertions(+), 670 deletions(-) diff --git a/go.mod b/go.mod index 3ebe584..8a6d4ab 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,24 @@ go 1.12 require ( - basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f + basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5 + basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477 basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48 - basic.com/pubsub/protomsg.git v0.0.0-20190824080957-7b44351cb40b - basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00 - basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 + basic.com/pubsub/protomsg.git v0.0.0-20191105082616-7a5fc5da9c09 + basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3 basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 - basic.com/valib/gosdk.git v0.0.0-20190531034110-0062fdaaa05a // indirect + basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159 + basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 // indirect github.com/Microsoft/go-winio v0.4.12 // indirect github.com/ajg/form v1.5.1 // indirect github.com/go-yaml/yaml v2.1.0+incompatible github.com/gogo/protobuf v1.2.1 github.com/golang/protobuf v1.3.1 - github.com/gorilla/websocket v1.4.0 // indirect + github.com/kirinlabs/HttpRequest v0.1.5 // indirect github.com/knetic/govaluate v3.0.0+incompatible github.com/pierrec/lz4 v2.2.3+incompatible github.com/satori/go.uuid v1.2.0 + github.com/spf13/viper v1.4.0 github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877 // indirect github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9 // indirect github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 // indirect diff --git a/go.sum b/go.sum index c82c1fe..e94eaee 100644 --- a/go.sum +++ b/go.sum @@ -1,58 +1,203 @@ +basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f h1:m7ONW0VqagpmWppr6GSa2Gykid202vCbV9worYCM+pg= basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q= +basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5 h1:OcZOgjBXfzhI1Ukxblacxu5xwKl448ADYyulJ02zdb8= +basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q= +basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477 h1:yr95Oko76zjDlPs60aHT2lAqApz8nzli9A6yJB/IrGA= +basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477/go.mod h1:oiXPn3wwwOi/Sbm6cDWpNWofoG5iV2Nb1V/DxLEAqYY= +basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48 h1:BBA30Rgljn6MRieC4gUncETJDyna3ObyubTo9HEQ2M0= basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY= -basic.com/pubsub/protomsg.git v0.0.0-20190824080957-7b44351cb40b/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= +basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99 h1:YSmWZPp/mHoq+/L5d0iTsqjiCcVwZqEQRQAXxQFSbvY= +basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= +basic.com/pubsub/protomsg.git v0.0.0-20191025080939-9b30ac3be52d h1:Lhny6vIq3GNjunE+r0ymLnpg+/n0lqwnsOAy6HbARfk= +basic.com/pubsub/protomsg.git v0.0.0-20191025080939-9b30ac3be52d/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= +basic.com/pubsub/protomsg.git v0.0.0-20191105075705-11a3749018a7 h1:6B15QTE96XgpT2Ry9a3xhJZzxYvP6rClT3l4r2WHrjE= +basic.com/pubsub/protomsg.git v0.0.0-20191105075705-11a3749018a7/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= +basic.com/pubsub/protomsg.git v0.0.0-20191105082616-7a5fc5da9c09 h1:wktnrfZLxcSEnmu/ptMdn4GF5UiHcUdRSlWQ0EllJxY= +basic.com/pubsub/protomsg.git v0.0.0-20191105082616-7a5fc5da9c09/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00 h1:sK+Tx7rvM9J2WnNIwrzMDjZSylWiKNfQO0prUBfKsDk= basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00/go.mod h1:8by33F9E1w17Pw/rDgJGJXAo122w0wDENG14hiMS+RE= basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM= basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY= +basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3 h1:VY23IpugB/FsU2hSnVeLjZKX5cSgNmhcSEiw6vxX+bg= +basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY= basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 h1:3hejanzPEBvZSSvjIqayB83/6/6SLLrX9oNZAdiYELg= basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28/go.mod h1:CQ+UJyZV8MRzwwckncdUDu6/RDTKAzSIPCxc9tFcwPs= basic.com/valib/gosdk.git v0.0.0-20190531034110-0062fdaaa05a h1:6QxKVo+2wR1fgqGVgpGJoQt9XZOqVkmxJCs1r7hJfJ8= basic.com/valib/gosdk.git v0.0.0-20190531034110-0062fdaaa05a/go.mod h1:mT/jbyl3++GmYjh/jBF65Ein6O6/yd4qIQbSFMCZoE4= +basic.com/valib/logger.git v0.0.0-20190926101623-99e2471fbbf5 h1:kBGQ+7tbDY4kIyZJVK3gLqAFzK8zS7o7323pSgfXXBs= +basic.com/valib/logger.git v0.0.0-20190926101623-99e2471fbbf5/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M= +basic.com/valib/logger.git v0.0.0-20190927065828-cb651da7c223 h1:LPTDC1cOb2ZhuAkflqWXrIQ2RPYPS+ntoRgvpnZm4bY= +basic.com/valib/logger.git v0.0.0-20190927065828-cb651da7c223/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M= +basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159 h1:e5KopUEW/E9qmE3gUS6m7uO+/ti/N2m8rMMHB/HVqPk= +basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M= +basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 h1:y0t0XG2uPSygF+hiSdLP3Lr959tip/FDPYJpHhbKRec= +basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627/go.mod h1:yYRM7bM9y0KKd4IfNt3myjsvkFVFIIWNjsvK14tNbq4= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc= github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-yaml/yaml v2.1.0+incompatible h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kirinlabs/HttpRequest v0.1.5 h1:BzOb6AmBii232R93birBsf663kt8N9y8N0TCQKoEzhA= +github.com/kirinlabs/HttpRequest v0.1.5/go.mod h1:XV38fA4rXZox83tlEV9KIQ7Cdsut319x6NGzVLuRlB8= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/knetic/govaluate v3.0.0+incompatible h1:wtCEE87YYq68awKAV9kYkNDvxS7MDzO3ABbKgDqO+tI= github.com/knetic/govaluate v3.0.0+incompatible/go.mod h1:7QMc3skGbZuD4ZSe6bVN885uWCaxvhpo1Fvwvgp7bF8= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pierrec/lz4 v2.2.3+incompatible h1:YpgKDCFg5dd0Eb+XlgrfJtH4fAqoRA1kBcKnBZ4EFSE= github.com/pierrec/lz4 v2.2.3+incompatible/go.mod h1:g2rHQ0wsQlPM7GZ66p1EVBh+VdeJ8s60jWWxl1M9t1Q= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/progressbar/v2 v2.12.1/go.mod h1:fBI3onORwtNtwCWJHsrXtjE3QnJOtqIZrvr3rDaF7L0= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877 h1:n65+IT/xy5+trHm3Zpg9+j7IO4n8pBcPzvaKbMolW8U= github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877/go.mod h1:sgTk9wg3WurMlziuB3hcfgHYTz3pEkjQpSCTT8V2pW8= github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9 h1:uVRQSWD6TOlWlLJ7IYYmbjRr0Xg35ADFN89HGQLPFGI= github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9/go.mod h1:vy1jksyhzuQOMkHXMEi+X2bZ47ZeCn3QTnYdFBesABs= github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 h1:5zW+TRr0WH4uN72/E/XYwb1PcaYN5BIB/FUbcQ0nHr0= github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290/go.mod h1:e9PZQr6zVezMTwj1v0j1YhGCNdS2zTCjXU9q9K+HHGk= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= gocv.io/x/gocv v0.20.0 h1:2q75zQ8Zel2tB69G6qrmf/E7EdvaCs90qvkHzdSBOAg= gocv.io/x/gocv v0.20.0/go.mod h1:vZETJRwLnl11muQ6iL3q4ju+0oJRrdmYdv5xJTH7WYA= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65 h1:+rhAzEzT3f4JtomfC371qB+0Ola2caSKcY69NUBZrRQ= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed h1:uPxWBzB3+mlnjy9W58qY1j/cjyFjutgw/Vhan2zLy/A= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= nanomsg.org/go-mangos v1.4.0 h1:pVRLnzXePdSbhWlWdSncYszTagERhMG5zK/vXYmbEdM= nanomsg.org/go-mangos v1.4.0/go.mod h1:MOor8xUIgwsRMPpLr9xQxe7bT7rciibScOqVyztNxHQ= diff --git a/insertdata/config.go b/insertdata/config.go new file mode 100644 index 0000000..64c6b67 --- /dev/null +++ b/insertdata/config.go @@ -0,0 +1,63 @@ +package insertdata + +import ( + "github.com/spf13/viper" + "log" +) + + + + +type weedfs struct { + Ip string `mapstructure: "ip"` + UploadPort int `mapstructure: "uploadport"` + VisitPort int `mapstructure: "visitport"` +} + +var WeedFs = &weedfs{} + +// wp add es 绱㈠紩 浠ュ強 IP port +type esinfo struct { + Masterip string `mapstructure:"masterip"` + Httpport string `mapstructure:"httpport"` + Shards string `mapstructure:"shards"` + EsIndex esindexlist `mapstructure:"index"` +} + +type esindexlist struct { + VideoPersons index `mapstructure:"videopersons"` + DbTables index `mapstructure:"dbtables"` + Dbtablepersons index `mapstructure:"dbtablepersons"` + Personaction index `mapstructure:"personaction"` +} +type index struct { + IndexName string `mapstructure:"index"` + IndexType string `mapstructure:"type"` +} + +type sopath struct { + Ip string `mapstructure:"ip"` + Port string `mapstructure:"port"` +} + +var SoPath = &sopath{} + +var EsInfo = &esinfo{} + +// Init is an exported method that takes the environment starts the viper +// (external lib) and returns the configuration struct. +func Init(env string) { + var err error + viper.SetConfigType("yaml") + viper.SetConfigName(env) + viper.AddConfigPath("/opt/vasystem/config/") + viper.AddConfigPath("") + err = viper.ReadInConfig() + if err != nil { + log.Fatal("error on parsing configuration file") + } + viper.UnmarshalKey("es", EsInfo) + viper.UnmarshalKey("weedfs", WeedFs) + viper.UnmarshalKey("sopath",SoPath) + //InitInsertEs() +} \ No newline at end of file diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go index b3196e1..a38b48d 100644 --- a/insertdata/insertDataToEs.go +++ b/insertdata/insertDataToEs.go @@ -4,15 +4,13 @@ "encoding/base64" "encoding/json" "errors" - "fmt" - "io/ioutil" "net" "ruleprocess/cache" - "ruleprocess/logger" + "ruleprocess/structure" + "strconv" "time" "basic.com/pubsub/protomsg.git" - "github.com/go-yaml/yaml" "github.com/golang/protobuf/proto" "github.com/satori/go.uuid" "ruleprocess/ruleserver" @@ -31,55 +29,63 @@ DbTablePersons string `yaml:"dbTablePersons"` } -func init() { - data, err := ioutil.ReadFile("./config/conf.yml") - if err != nil { - fmt.Println("璇诲彇閰嶇疆鏂囦欢鍑洪敊--", err) - logger.Error("璇诲彇閰嶇疆鏂囦欢鍑洪敊--", err) - } - c := conf{} - //鎶妝aml褰㈠紡鐨勫瓧绗︿覆瑙f瀽鎴恠truct绫诲瀷 - yaml.Unmarshal(data, &c) - weedfsUrl = c.PhotoUrl - videoPersonUrl = c.VideoPersons - personAction = c.PersonAction -} +//func InitInsertEs() { +// weedfsUrl = "http://"+WeedFs.Ip+":"+strconv.Itoa(WeedFs.UploadPort)+"/submit" +// videoPersonUrl = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.VideoPersons.IndexName+"/"+EsInfo.EsIndex.VideoPersons.IndexType +// personAction = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.Personaction.IndexName+"/"+EsInfo.EsIndex.Personaction.IndexType +//} // 浜鸿劯鐨勬暟鎹粨鏋� type PerVideoPicture struct { - Id string `json:"id"` - CameraId string `json:"cameraId"` - CameraAddr string `json:"cameraAddr"` - PicDate string `json:"picDate"` - PicMaxUrl string `json:"picMaxUrl"` - TaskId string `json:"taskId"` - TaskName string `json:"taskName"` - SdkName string `json:"sdkName"` - Content string `json:"content"` - AlarmRules []AlarmRule `json:"alarmRules"` - LikeDate string `json:"likeDate"` - Sex string `json:"sex"` - Age int32 `json:"age"` - AgeDescription string `json:"ageDescription"` - Race string `json:"race"` - SmileLevel int32 `json:"smileLevel"` - BeautyLevel int32 `json:"beautyLevel"` - FaceFeature string `json:"faceFeature"` - PicSmUrl []string `json:"picSmUrl"` - VideoUrl string `json:"videoUrl"` - AnalyServerId string `json:"analyServerId"` - AnalyServerName string `json:"analyServerName"` - AnalyServerIp string `json:"analyServerIp"` - ClusterId string `json:"clusterId"` - LinkId string `json:"linkId"` - DetectScore float64 `json:"detectScore"` - IsAlarm int `json:"isAlarm"` - IsAckAlarm int `json:"isAckAlarm"` - IsCollect int `json:"isCollect"` - IsDelete int `json:"isDelete"` + Id string `json:"id"` + CameraId string `json:"cameraId"` + CameraAddr string `json:"cameraAddr"` + PicDate string `json:"picDate"` + PicMaxUrl string `json:"picMaxUrl"` + TaskId string `json:"taskId"` + TaskName string `json:"taskName"` + SdkName string `json:"sdkName"` + Content string `json:"content"` + AlarmRules []AlarmRule `json:"alarmRules"` + LikeDate string `json:"likeDate"` + Sex string `json:"sex"` + Age int32 `json:"age"` + AgeDescription string `json:"ageDescription"` + Race string `json:"race"` + SmileLevel int32 `json:"smileLevel"` + BeautyLevel int32 `json:"beautyLevel"` + FaceFeature string `json:"faceFeature"` + PicSmUrl []string `json:"picSmUrl"` + VideoUrl string `json:"videoUrl"` + AnalyServerId string `json:"analyServerId"` + AnalyServerName string `json:"analyServerName"` + AnalyServerIp string `json:"analyServerIp"` + ClusterId string `json:"clusterId"` + LinkId string `json:"linkId"` + DetectScore float64 `json:"detectScore"` + IsAlarm int `json:"isAlarm"` + IsAckAlarm int `json:"isAckAlarm"` + IsCollect int `json:"isCollect"` + IsDelete int `json:"isDelete"` BaseInfo []*structure.BaseInfo `json:"baseInfo"` + TargetInfo Target } +type Target struct { + TargetId string `json:"targetId"` + TargetScore float64 `json:"targetScore"` + TargetLocation Points +} + +type Points struct { + TopLeft Point `json:"topLeft"` + BottomRight Point `json:"bottomRight"` +} + +type Point struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` +} // yolo琛屼负鐨勬暟鎹粨鏋� type Personaction struct { Id string `json:"id"` @@ -103,6 +109,7 @@ IsAckAlarm int `json:"isAckAlarm"` IsCollect int `json:"isCollect"` IsDelete int `json:"isDelete"` + TargetInfo []Target } type AlarmRule struct { @@ -110,8 +117,8 @@ AlarmLevel string `json:"alarmLevel"` RuleText string `json:"ruleText"` DefenceState bool `json:"defenceState"` - IsLink bool `json:"isLink"` - LinkInfo string `json:"linkInfo"` + IsLink bool `json:"isLink"` + LinkInfo string `json:"linkInfo"` } // 涓�涓猣ace瀵瑰涓鍒欑粍鐨勫綊缃汉鑴哥殑缁撴瀯浣� @@ -120,46 +127,21 @@ rules []structure.Result } -// 寰�ES鎻掓暟鎹� -//func InsertToEs(msg ruleserver.ResultMsg) { -// var timeLabel string -// // 鐩存帴浠庤鍒欑殑鏍囩鏁版嵁閲屾嬁绗﹀悎瑙勫垯鐨勪汉鑴哥粨鏋� -// if msg.RuleResult["timeLabel"] != nil { -// timeLabel = msg.RuleResult["timeLabel"].(string) -// } -// logger.Debug("鎻掑叆鏁版嵁鍓嶇湅鐪嬫姤璀︽爣蹇椾綅锛�", timeLabel) -// if timeLabel == "01" { // 鏃犲畾鏃跺櫒鐘舵�佽鎻掑叆鐨勬姤璀︽暟鎹� -// InsertFace(msg) -// flag := ruleserver.BodyIsSame(msg.SdkMessage) -// if !flag { -// InsertYolo(msg) -// } -// } -// if timeLabel == "10" { // 瀹氭椂鍣ㄧ姸鎬佽鎻掑叆鐨勯甯ф姤璀︽暟鎹�傝繛甯︾潃瀹氭椂鍣ㄥ紑鍚椂鐨勯偅甯� -// InsertFace(msg) -// InsertYolo(msg) -// } -// //if timeLabel == "12" { // 骞堕潪鎶ヨ鏁版嵁锛屽彧鏄姸鎬佹敼鍙樼殑鏁版嵁 -// // //ChangeStatusFace(msg) -// // ChangeStatusYolo(msg) -// //} -//} func InsertToEs(msg structure.ResultMsg) { - InsertFace(msg, "") - // 濡傛灉鏍囩涓惈鏈夋寔缁椂闂撮娆℃姤璀︾殑timeLabel鐨勮瘽鍒欎笉闇�瑕佽繃浜轰綋杩借釜锛屼笉鐒跺氨娌$殑鎻掑叆浜� - fk := ruleserver.TrackOrNot(msg.RuleResult) - if fk { - InsertYolo(msg, "") - //if msg.Cid == "61de081a-7ed9-4970-8432-41d642c35456" { - // logger.Warn("鎹曟崏188鎽勫儚鏈虹殑鎸佺画鏃堕棿浠诲姟.....") - // os.Exit(1) - //} - } else { - flag := ruleserver.BodyIsSame(msg.SdkMessage) - if !flag { - InsertYolo(msg, "") + defer func() { + if err := recover(); err != nil { + logger.Error("es妯″潡鍎跨殑寮傚父鎹曡幏锛�", err) } + }() + localConfig1, err := cache.GetServerInfo() + if err != nil { + panic("閰嶇疆鏂囦欢涓嶅悎娉�") } + weedfsUrl = "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/submit" + videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.VideoPersons.IndexName + "/" + EsInfo.EsIndex.VideoPersons.IndexType + personAction = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.Personaction.IndexName + "/" + EsInfo.EsIndex.Personaction.IndexType + InsertFace(msg, "") + InsertYolo(msg, "") } // 寰�es涓彃鍏ヤ汉鑴告暟鎹� @@ -167,10 +149,12 @@ if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 { logger.Info("寰�ES鎻掍汉鑴告暟鎹�") faces := []*FaceAndRules{} - faces = PutFace(faces,msg) + faces = PutFace(faces, msg) //logger.Info("鏁寸悊鍚庣殑鏁版嵁锛�",faces) if faces != nil { - for _,face := range faces { + var imgMaxUrl string = "" + var picTime string = "" + for _, face := range faces { // 涓婁紶澶у浘 // 瑙e帇缂╁苟涓婁紶鍥剧墖 bdata, err := util.UnCompress(msg.Data) @@ -178,35 +162,30 @@ panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒") } alarmRules := []AlarmRule{} - logger.Warn("浜鸿劯id涓猴細",face.Id,"浜鸿劯鐨勮鍒欓暱搴︿负锛�",len(face.rules)) + //logger.Warn("浜鸿劯id涓猴細", face.Id, "浜鸿劯鐨勮鍒欓暱搴︿负锛�", len(face.rules)) //os.Exit(1) - for _,faceResult := range face.rules { + for _, faceResult := range face.rules { alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel) - alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState,faceResult.IsLink,""}) + alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, faceResult.IsLink, ""}) } i := protomsg.Image{} err = proto.Unmarshal(bdata, &i) - bigPhotoUrl := make(map[string]interface{}) - bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String()) - logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl) - // 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛� - localConfig, err := cache.GetServerInfo() - if err != nil { - logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") - } - serverIp, err := GetLocalIP() - // 鏌ヨcameraName - camera, err := cache.GetCameraById(msg.Cid) - if err != nil { - logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") - } + // 鍏堜紶灏忓浘锛屽啀浼犲ぇ鍥撅紝闃叉鑴镐笂鏈夌嚎 bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height)) resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String()) if err != nil { logger.Error("涓婁紶灏忓浘鍑洪敊") } - //logger.Info("================灏忓浘鍦板潃:", resp["fileUrl"].(string)) + // 涓婁紶澶у浘 + if imgMaxUrl == "" { + bigPhotoUrl := make(map[string]interface{}) + bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.FaceResult), weedfsUrl) + logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl) + imgMaxUrl = bigPhotoUrl["fileUrl"].(string) + picTime = i.Timestamp + } sex := "" + logger.Info(sex) if face.ThftRes.Gender == 1 { sex = "鐢�" } else { @@ -214,35 +193,41 @@ } race := getRaceString(face.ThftRes.Race) ageDescription := getDescription(face.ThftRes.Age) - esDataId := uuid.NewV4().String() + logger.Info(ageDescription) + //esDataId := uuid.NewV4().String() linksId := "" if linkId != "" { linksId = linkId } + var target = new(Target) + target.TargetId = strconv.FormatUint(face.Id, 10) + target.TargetScore = face.Score + target.TargetLocation = Points{TopLeft:Point{face.Location.X,face.Location.Y},BottomRight:Point{face.Location.X+face.Location.Width,face.Location.Y+face.Location.Height}} + //logger.Info("浜鸿劯鐨刬d:",strconv.FormatUint(face.Id, 10)) pervideo := PerVideoPicture{ - esDataId, + msg.Push.PushId, msg.Cid, - camera.Addr, - i.Timestamp, - bigPhotoUrl["fileUrl"].(string), + msg.Push.Cam.Addr, + picTime, + imgMaxUrl, msg.Tasklab.Taskid, msg.Tasklab.Taskname, "浜鸿劯", "", alarmRules, time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿 - sex, + sex, //鏆傛敼涓轰汉鑴竔d strconv.FormatUint(face.Id, 10) face.ThftRes.Age, - ageDescription, + ageDescription, // 鏆傛敼涓哄垎鍊糵mt.Sprintf("%.2f",face.Score) race, face.ThftRes.Smile, face.ThftRes.Beauty, base64.StdEncoding.EncodeToString(face.Feature), []string{resp["fileUrl"].(string)}, - "鏆傛棤闆嗙兢", - localConfig.ServerId, - localConfig.ServerName, - serverIp, + "", + msg.Push.ServerId, + msg.Push.ServerName, + msg.Push.LocalIp, "", linksId, face.Score, @@ -251,6 +236,7 @@ 0, 0, face.Liker, + *target, } requstbody, err := json.Marshal(pervideo) @@ -264,7 +250,7 @@ } else { logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1) // 鍙戝嚭褰曞儚淇″彿 - ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 1}) + ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl:msg.Push.VideoUrl,ImgId: i.Id, SdkIds: []string{}, Type: 1}) } } } @@ -272,7 +258,7 @@ } // 褰掔疆浜鸿劯 -func PutFace(faces []*FaceAndRules,msg structure.ResultMsg)[]*FaceAndRules{ +func PutFace(faces []*FaceAndRules, msg structure.ResultMsg) []*FaceAndRules { if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 { for _, faceResult := range msg.RuleResult["face"].([]structure.FaceResult) { faces = hebingFace(faces, faceResult) @@ -282,28 +268,28 @@ return nil } } -func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules{ +func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules { for _, arg := range faceResult.Args { // 鎷垮埌姣忎竴寮犱汉鑴� - logger.Info("褰掔疆浜鸿劯鏃剁浉浼艰�呯殑鏁伴噺锛�",len(arg.Liker)) + //logger.Info("褰掔疆浜鸿劯鏃剁浉浼艰�呯殑鏁伴噺锛�", len(arg.Liker)) flag := false for _, face := range faces { - for _,lik := range face.Liker { - logger.Warn("--------鍚堝苟浜鸿劯鏃剁浉浼艰�咃細",lik.PersonId,lik.TableName) - } + //for _, lik := range face.Liker { + // //logger.Warn("--------鍚堝苟浜鸿劯鏃剁浉浼艰�咃細", lik.PersonId, lik.TableName) + //} if arg.Id == face.Id { flag = true - face.rules = append(face.rules,faceResult.Result) + face.rules = append(face.rules, faceResult.Result) // 鐩镐技鑰呭幓閲嶅綊骞� - for _,liker := range arg.Liker { + for _, liker := range arg.Liker { flag1 := true - for _,liker1 := range face.Liker { + for _, liker1 := range face.Liker { if liker.PersonId == liker1.PersonId { flag1 = false } } if flag1 { - face.Liker = append(face.Liker,liker) + face.Liker = append(face.Liker, liker) } } //face.Liker = append(face.Liker,arg.Liker...) @@ -331,6 +317,7 @@ logger.Info("寰�ES鎻抷olo鏁版嵁") var sdkNames string = "" alarmRules := []AlarmRule{} + var targetInfos []Target url := []string{} for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) { if yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10" { @@ -342,7 +329,7 @@ if yoloResult.IsLink { linkInfo = "鑱斿姩浠诲姟" } - alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState,yoloResult.IsLink,linkInfo}) + alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, yoloResult.IsLink, linkInfo}) // 涓婁紶缂撳瓨鏁版嵁鐨勫浘鐗囨嬁鍒皍rl if yoloResult.Others.CacheData != nil { //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg)) @@ -356,13 +343,34 @@ } i := protomsg.Image{} err = proto.Unmarshal(bdata, &i) - resp1, err1 := util.DrawPolygonOnImage(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl) + resp1, err1 := util.DrawPolygonOnImageForYolo(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl) if err1 != nil { logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err) } else { logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp1) } - url = append(url, resp1["fileUrl"].(string)) + if resp1["fileUrl"] != nil { + url = append(url, resp1["fileUrl"].(string)) + } + } + } + // 瑁呴厤鐩爣淇℃伅鏁版嵁 + for _,target := range yoloResult.Location { + // 鍘婚噸娣诲姞 + //logger.Info("瑁呴厤鍓嶇殑鍘熷鏁版嵁鏄細",target) + var flag = true + for _,selectTarget := range targetInfos { + if strconv.FormatUint(target.TargetId, 10) == selectTarget.TargetId { + flag = false + break + } + } + if flag { + var target1 = new(Target) + target1.TargetId = strconv.FormatUint(target.TargetId, 10) + target1.TargetScore = target.TargetScore + target1.TargetLocation = Points{TopLeft:Point{target.X,target.Y},BottomRight:Point{target.X+target.Width,target.Y+target.Height}} + targetInfos = append(targetInfos,*target1) } } } @@ -397,7 +405,7 @@ if len(alarmRules) > 0 { isAlarm = 1 //resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String()) - resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl) + resp, err = util.DrawPolygonOnImageForYolo(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl) if err != nil { logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err) return @@ -409,38 +417,26 @@ // 涓嶆槸鎶ヨ鏁版嵁涓嶅瓨 return } - // logger.Println("鍥剧墖涓婁紶杩斿洖鍊硷細", resp) - // 鏌ヨ鏈満淇℃伅 - localConfig, err := cache.GetServerInfo() - if err != nil { - logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") - } - // 鏌ヨcameraName - camera, err := cache.GetCameraById(msg.Cid) - if err != nil { - logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") - } - serverIp, err := GetLocalIP() if resp["fileUrl"] != nil { url = append(url, resp["fileUrl"].(string)) - esDataId := uuid.NewV4().String() + //esDataId := uuid.NewV4().String() linksId := "" if linkId != "" { linksId = linkId } peraction := Personaction{ - esDataId, + msg.Push.PushId, msg.Cid, - camera.Name, - camera.Addr, + msg.Push.Cam.Name, + msg.Push.Cam.Addr, msg.Tasklab.Taskid, msg.Tasklab.Taskname, sdkNames, "", alarmRules, - localConfig.ServerId, - localConfig.ServerName, - serverIp, + msg.Push.ServerId, + msg.Push.ServerName, + msg.Push.LocalIp, "", url, i.Timestamp, @@ -450,13 +446,13 @@ 0, 0, 0, + targetInfos, } requstbody, err := json.Marshal(peraction) if err != nil { logger.Info("json parse error ", err) return - } resp1, err2 := EsReq("POST", personAction, requstbody) if err2 != nil { @@ -464,7 +460,7 @@ } else { logger.Debug("鎻掑叆es杩斿洖鐨勬暟鎹俊鎭槸锛�", resp1) // 鍙戝嚭褰曞儚淇″彿 - ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 2}) + ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid,VideoUrl:msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{}, Type: 2}) logger.Warn("__________________________________________寰�ES鎻掑叆yolo鏁版嵁鎴愬姛") //os.Exit(1) } @@ -473,155 +469,6 @@ logger.Debug("timeLabel鏉′欢閮戒笉绗﹀悎锛�") } } -} -func ChangeStatusYolo(msg structure.ResultMsg) { - logger.Info("寰�ES鎻抷olo闈炴姤璀︾姸鎬佹敼鍙樻暟鎹�") - var sdkNames string = "" - alarmRules := []AlarmRule{} - bdata, err := util.UnCompress(msg.Data) - if err != nil { - panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒") - } - i := protomsg.Image{} - err = proto.Unmarshal(bdata, &i) - //resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String()) - resp, err := util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl) - if err != nil { - logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err) - } else { - logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp) - } - // logger.Println("鍥剧墖涓婁紶杩斿洖鍊硷細", resp) - // 鏌ヨ鏈満淇℃伅 - localConfig, err := cache.GetServerInfo() - if err != nil { - logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") - } - // 鏌ヨcameraName - camera, err := cache.GetCameraById(msg.Cid) - if err != nil { - logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") - } - serverIp, err := GetLocalIP() - esDataId := uuid.NewV4().String() - peraction := Personaction{ - esDataId, - msg.Cid, - camera.Name, - camera.Addr, - msg.Tasklab.Taskid, - msg.Tasklab.Taskname, - sdkNames, - "yolo闈炴姤璀︾姸鎬佹敼鍙樻暟鎹�", - alarmRules, - localConfig.ServerId, - localConfig.ServerName, - serverIp, - "", - []string{resp["fileUrl"].(string)}, - i.Timestamp, - "", - "", - 0, - 0, - 0, - 0, - } - requstbody, err := json.Marshal(peraction) - - if err != nil { - logger.Info("json parse error ", err) - return - - } - resp1, err1 := EsReq("POST", personAction, requstbody) - if err1 != nil { - logger.Error("寰�ES鎻掑叆鏁版嵁澶辫触", err) - } else { - logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1) - // 鍙戝嚭褰曞儚淇″彿 - ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 2}) - logger.Warn("__________________________________________寰�ES鎻掑叆yolo鏁版嵁鎴愬姛") - //os.Exit(1) - } -} -func ChangeStatusFace(msg structure.ResultMsg) { - logger.Info("寰�ES鎻掑叆浜鸿劯闈炴姤璀︿絾鏄姸鎬佽浆鎹㈡暟鎹�") - // 涓婁紶澶у浘 - // 瑙e帇缂╁苟涓婁紶鍥剧墖 - bdata, err := util.UnCompress(msg.Data) - if err != nil { - panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒") - } - i := protomsg.Image{} - err = proto.Unmarshal(bdata, &i) - bigPhotoUrl := make(map[string]interface{}) - bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String()) - logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl) - // 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛� - localConfig, err := cache.GetServerInfo() - if err != nil { - logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") - } - serverIp, err := GetLocalIP() - // 鏌ヨcameraName - camera, err := cache.GetCameraById(msg.Cid) - if err != nil { - logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") - } - - esDataId := uuid.NewV4().String() - pervideo := PerVideoPicture{ - esDataId, - msg.Cid, - camera.Addr, - i.Timestamp, - bigPhotoUrl["fileUrl"].(string), - msg.Tasklab.Taskid, - msg.Tasklab.Taskname, - "浜鸿劯", - "鐘舵�佽浆鎹㈡暟鎹紝闈炴姤璀︽暟鎹�", - []AlarmRule{}, - time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿 - "", - 0, - "", - "", - 0, - 0, - "", - []string{""}, - "鏆傛棤闆嗙兢", - localConfig.ServerId, - localConfig.ServerName, - serverIp, - "", - "", - 0, - 1, - 0, - 0, - 0, - []*structure.BaseInfo{}, - } - requstbody, err := json.Marshal(pervideo) - - if err != nil { - logger.Info("json parse error ", err) - return - } - resp1, err1 := EsReq("POST", videoPersonUrl, requstbody) - - if err1 != nil { - logger.Error("涓婁紶ES鍑洪敊锛�---", err1) - } else { - logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1) - // 鍙戝嚭褰曞儚淇″彿 - ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 1}) - } - //if msg.RuleResult["cacheData"] != nil { - // InsertFace(msg.RuleResult["cacheData"].(ruleserver.ResultMsg)) - //} } // 鑾峰彇鏈満ip @@ -706,100 +553,3 @@ } return race } - - -//for _, faceResult := range msg.RuleResult["face"].([]ruleserver.FaceResult) { -// for _, face := range faceResult.Args { -// // 涓婁紶澶у浘 -// // 瑙e帇缂╁苟涓婁紶鍥剧墖 -// bdata, err := util.UnCompress(msg.Data) -// if err != nil { -// panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒") -// } -// alarmRules := []AlarmRule{} -// alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel) -// alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState}) -// i := protomsg.Image{} -// err = proto.Unmarshal(bdata, &i) -// bigPhotoUrl := make(map[string]interface{}) -// bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String()) -// logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl) -// // 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛� -// localConfig, err := cache.GetServerInfo() -// if err != nil { -// logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") -// } -// serverIp, err := GetLocalIP() -// // 鏌ヨcameraName -// camera, err := cache.GetCameraById(msg.Cid) -// if err != nil { -// logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") -// } -// bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height)) -// resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String()) -// if err != nil { -// logger.Error("涓婁紶灏忓浘鍑洪敊") -// } -// logger.Info("================灏忓浘鍦板潃:", resp["fileUrl"].(string)) -// sex := "" -// if face.ThftRes.Gender == 1 { -// sex = "鐢�" -// } else { -// sex = "濂�" -// } -// race := getRaceString(face.ThftRes.Race) -// ageDescription := getDescription(face.ThftRes.Age) -// esDataId := uuid.NewV4().String() -// linksId := "" -// if linkId != "" { -// linksId = linkId -// } -// pervideo := PerVideoPicture{ -// esDataId, -// msg.Cid, -// camera.Addr, -// i.Timestamp, -// strings.Split(bigPhotoUrl["fileUrl"].(string), "/")[1], -// msg.Tasklab.Taskid, -// msg.Tasklab.Taskname, -// "浜鸿劯", -// "", -// alarmRules, -// time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿 -// sex, -// face.ThftRes.Age, -// ageDescription, -// race, -// face.ThftRes.Smile, -// face.ThftRes.Beauty, -// base64.StdEncoding.EncodeToString(face.Feature), -// []string{strings.Split(resp["fileUrl"].(string), "/")[1]}, -// "鏆傛棤闆嗙兢", -// localConfig.ServerId, -// localConfig.ServerName, -// serverIp, -// "", -// linksId, -// face.Score, -// 1, -// 0, -// 0, -// 0, -// face.Liker, -// } -// requstbody, err := json.Marshal(pervideo) -// -// if err != nil { -// logger.Info("json parse error ", err) -// return -// } -// resp1, err1 := EsReq("POST", videoPersonUrl, requstbody) -// if err1 != nil { -// logger.Error("涓婁紶ES鍑洪敊锛�---", err1) -// } else { -// logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1) -// // 鍙戝嚭褰曞儚淇″彿 -// ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 1}) -// } -// } -//} \ No newline at end of file diff --git a/labelFilter/readyDataForLabel.go b/labelFilter/readyDataForLabel.go index ff4fef3..28b5233 100644 --- a/labelFilter/readyDataForLabel.go +++ b/labelFilter/readyDataForLabel.go @@ -1,8 +1,8 @@ package labelFilter import ( - "ruleprocess/cache" "ruleprocess/logger" + "ruleprocess/cache" "ruleprocess/structure" "time" ) @@ -20,29 +20,41 @@ func (label *Label)DataFormatToLabel(result structure.ResultMsg) { logger.Debug("face缁撴灉锛�",result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0) logger.Debug("yolo缁撴灉锛�",result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) - if (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) { - logger.Info("---------------鏍囩杩囨护鍣ㄨ祴鍊�") - label.CameraId = result.Cid - camera, err := cache.GetCameraById(result.Cid) - if err != nil { - logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭嚭閿�") - } - label.CameraName = camera.Name - label.CameraAddr = camera.Addr - label.TaskId = result.Tasklab.Taskid - label.Time = time.Now().Format("2006-01-02 15:04:05") - if result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0 { - for _,faceGroup := range result.RuleResult["face"].([]structure.FaceResult) { - label.Persons = append(label.Persons,faceGroup) - label.DefenceLevel = append(label.DefenceLevel,faceGroup.AlarmLevel) + if (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) { // 寰楁湁浜鸿劯鎴栬�厃olo瑙勫垯鎵嶅彲浠� + + // 鍏堝垽鏂竴涓嬫暟鎹甫鐨勮鍒欐爣绛炬槸鍚︽湁鎶ヨ鐨勫彲浠ユ帹閫佺殑 + flag := false + for _, res := range result.RuleResult["yolo"].([]structure.Result) { + //logger.Info("瀹氭椂鍣ㄦ墦鐨勬暟瀛楁爣绛撅細",res.Others.TimeLabel) + if res.Others.TimeLabel == "01" || res.Others.TimeLabel == "10" { + flag = true } } - if result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0 { - for _,yoloGroup := range result.RuleResult["yolo"].([]structure.Result) { - label.DefenceLevel = append(label.DefenceLevel,yoloGroup.AlarmLevel) + if flag || (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0){ + logger.Info("---------------鏍囩杩囨护鍣ㄨ祴鍊�") + label.CameraId = result.Cid + camera, err := cache.GetCameraById(result.Cid) + if err != nil { + logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭嚭閿�") } + label.CameraName = camera.Name + label.CameraAddr = camera.Addr + label.TaskId = result.Tasklab.Taskid + label.Time = time.Now().Format("2006-01-02 15:04:05") + if result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0 { + for _,faceGroup := range result.RuleResult["face"].([]structure.FaceResult) { + label.Persons = append(label.Persons,faceGroup) + label.DefenceLevel = append(label.DefenceLevel,faceGroup.AlarmLevel) + } + } + if result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0 { + + for _,yoloGroup := range result.RuleResult["yolo"].([]structure.Result) { + label.DefenceLevel = append(label.DefenceLevel,yoloGroup.AlarmLevel) + } + } + logger.Info("------------鏍囩杩囨护鍣ㄨ祴鍊煎畬姣�") } - logger.Info("------------鏍囩杩囨护鍣ㄨ祴鍊煎畬姣�") } } diff --git a/labelFilter/req.go b/labelFilter/req.go index 8066479..2c08412 100644 --- a/labelFilter/req.go +++ b/labelFilter/req.go @@ -1,22 +1,27 @@ package labelFilter import ( + "basic.com/dbapi.git" + "basic.com/valib/logger.git" "fmt" "nanomsg.org/go-mangos" "nanomsg.org/go-mangos/protocol/rep" "nanomsg.org/go-mangos/protocol/req" "nanomsg.org/go-mangos/transport/ipc" "nanomsg.org/go-mangos/transport/tcp" - "os" - "github.com/golang/protobuf/proto" - "ruleprocess/logger" - "ruleprocess/ruleserver" "time" ) +var urlPool = make(map[string]chan []byte,100) +//var urlChans = make([]urlChan,100) +//type urlChan struct { +// url string +// ch chan *structure.ResultMsg +//} +//var pool chan *structure.ResultMsg = make(chan *structure.ResultMsg) func Die(format string, v ...interface{}) { - logger.Info("+++++++",format) - os.Exit(1) + logger.Info("+++++++",format,v) + //os.Exit(1) } func date() string { @@ -53,42 +58,108 @@ } } -func Push(url string,data ruleserver.ResultMsg) { - var sock mangos.Socket +func Init(){ + + var api dbapi.EventPushApi + b, allRules := api.FindAllDetails() + logger.Info("鍒濆鍖栦簨浠舵帹閫侊紝鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules) + if !b { + logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒") + } + for _, ruleGroup := range allRules { + if ruleGroup.Enable { // 澶ц鍒欏紑鍏冲紑鍚姸鎬� + for _, url := range ruleGroup.Urls { + // 涓烘瘡涓猽rl寤虹珛涓�涓猚han + if urlPool[url.Url] == nil { + urlPool[url.Url] = make(chan []byte,100) + logger.Info("鍒濆鍖栦俊鎭細",urlPool) + go GoPush(url.Url) + } + } + } + } +} + +func GoPush(url string) { var err error var msg []byte - + var sock mangos.Socket if sock, err = req.NewSocket(); err != nil { Die("鍒涘缓璇锋眰socket澶辫触: %s", err.Error()) } - errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024) + errSize := sock.SetOption(mangos.OptionMaxRecvSize,30*1024*1024) if errSize != nil { - fmt.Errorf("Failed set MaxRecvSize: %v", err) + logger.Error("浼犺緭鐨勬暟鎹秴杩囧ぇ灏忛檺鍒�") return } - //sock.AddTransport(ipc.NewTransport()) + errTimeOut := sock.SetOption(mangos.OptionRecvDeadline,time.Millisecond * 1500) + if errTimeOut != nil { + logger.Error("鎺ユ敹鍝嶅簲瓒呮椂") + return + } + errTimeOut1 := sock.SetOption(mangos.OptionSendDeadline,time.Millisecond * 1500) + if errTimeOut1 != nil { + logger.Error("鍙戦�佽秴鏃�") + return + } + errWrite := sock.SetOption(mangos.OptionWriteQLen,5) + if errWrite != nil { + logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触") + return + } + errRead := sock.SetOption(mangos.OptionReadQLen,5) + if errRead != nil { + logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触") + return + } sock.AddTransport(tcp.NewTransport()) - if err = sock.Dial(url); err != nil { - Die("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error()) + if err = sock.Dial("tcp://"+url); err != nil { + logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: ", err.Error()) } logger.Info("搴忓垪鍖栨暟鎹�") - bytes,err1 := proto.Marshal(data) - logger.Info("鏁版嵁闀垮害涓猴細",len(bytes)) - if err1 != nil { - logger.Info("搴忓垪鍖栧け璐ワ細",err1) + + //for v := range pool{ + // logger.Info("鏃犻檺寰幆",v.Cid) + //} + //var ch chan *structure.ResultMsg + //for _, v := range urlChans { + // if v.url == url{ + // ch = v.ch + // } + //} + logger.Info("chan淇℃伅锛�",urlPool[url]) + for { + select { + // case <-ctx.Done(): + // return + case data := <- urlPool[url]: + //logger.Info("鎺ユ敹鍒版暟鎹�",data.Cid) + //bytes,err1 := proto.Marshal(data) + go func(data []byte) { + logger.Info("鏁版嵁闀垮害涓猴細",len(data)) + //if err1 != nil { + // logger.Info("搴忓垪鍖栧け璐ワ細",err1) + //} + start := time.Now() + logger.Debug("groutine"+url+"鎺ㄩ�佹暟鎹�") + //bytes := []byte("ndfasojdfaidsos") + if err = sock.Send(data); err != nil { + Die("groutine"+url+"鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: ", err.Error()) + } + pushTime := time.Since(start) + msg, err = sock.Recv(); + if err != nil { + Die("groutine"+url+"鎺ユ敹鍝嶅簲澶辫触: ", err.Error(),pushTime,time.Since(start)) + } else { + logger.Debug("浜嬩欢鎺ㄩ�佹垚鍔燂紒groutine"+url+"鏀跺埌鍝嶅簲",string(msg),pushTime,time.Since(start)) + } + }(data) + default: + + } } - logger.Debug("鎺ㄩ�佹暟鎹�") - //bytes := []byte("ndfasojdfaidsos") - if err = sock.Send(bytes); err != nil { - Die("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error()) - } - if msg, err = sock.Recv(); err != nil { - Die("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error()) - } - logger.Debug("鏁版嵁鎺ㄩ�佹垚鍔燂紒鏀跺埌鍝嶅簲",string(msg)) sock.Close() } - //func main() { // url := "tcp://192.168.1.123:40011" // Push(url,"hahahaha") diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go index e2ad4ec..74a3f98 100644 --- a/labelFilter/ruleForLabel.go +++ b/labelFilter/ruleForLabel.go @@ -3,18 +3,33 @@ import ( "basic.com/dbapi.git" "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" + "github.com/golang/protobuf/proto" "github.com/knetic/govaluate" +<<<<<<< HEAD "ruleprocess/logger" +======= +>>>>>>> master "ruleprocess/structure" "strconv" "time" ) +<<<<<<< HEAD func Judge(msg structure.ResultMsg) { +======= +func PushSomthing(msg structure.ResultMsg) { + defer func() { + if err := recover(); err != nil { + logger.Error("浜嬩欢鎺ㄩ�佹ā鍧楀効鐨勫紓甯告崟鑾凤細",err) + } + }() + start := time.Now() +>>>>>>> master // 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁 label := new(Label) label.DataFormatToLabel(msg) - logger.Info("label鐨勪俊鎭細", label.CameraName, label.DefenceLevel, label.Time) + //logger.Info("label鐨勪俊鎭細", label.CameraName, label.DefenceLevel, label.Time) if label.CameraName == "" { logger.Error("鏃犳晥鏁版嵁锛岀洿鎺ヨ繑鍥�") return @@ -22,7 +37,7 @@ //鎷垮埌鎵�鏈夎鍒欑粍 var api dbapi.EventPushApi b, allRules := api.FindAllDetails() - logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules) + //logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules) if !b { logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒") } @@ -33,7 +48,7 @@ timeFlag := timeJudge(label, ruleGroup) if !timeFlag { logger.Info("涓嶅湪瑙勫垯鐨勬椂闂磋寖鍥村唴锛屼笉鎺ㄩ�侊紒") - return + continue } result := "" var Connector string @@ -77,6 +92,7 @@ logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細", result) // 鎺ㄩ�佹湇鍔″櫒 pushData(ruleGroup.Urls, msg) + logger.Info("鏃堕棿鎺ㄩ�佹墍鐢ㄦ椂闂达細",time.Since(start)) //os.Exit(1) } else { logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�", result) @@ -92,7 +108,7 @@ // 鏄惁绗﹀悎鏃堕棿瑙勫垯 func timeJudge(label *Label, groupRule protomsg.EventPush) bool { timeNow := time.Now().Format("2006-01-02 15:04:05") - logger.Info("鏍囩杩囨护鍣ㄨ捣濮嬫椂闂翠负锛�",groupRule.TimeStart,groupRule.TimeEnd) + //logger.Info("鏍囩杩囨护鍣ㄨ捣濮嬫椂闂翠负锛�",groupRule.TimeStart,groupRule.TimeEnd) flag1 := isBefore(groupRule.TimeStart, timeNow) flag2 := isBefore(timeNow, groupRule.TimeEnd) if flag1 && flag2 { @@ -129,7 +145,7 @@ if rule.TopicArg == "addr" { formula = "'" + label.CameraAddr + "'" + rule.Operator + "'" + rule.RuleValue + "'" } - logger.Info("-------鎵撳嵃鎽勫儚鏈鸿鍒欏叕寮忥細",formula) + //logger.Info("-------鎵撳嵃鎽勫儚鏈鸿鍒欏叕寮忥細",formula) expression, err := govaluate.NewEvaluableExpression(formula); if err != nil { logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula) @@ -144,7 +160,7 @@ logger.Info("绗﹀悎鎽勫儚鏈鸿鍒�!") return "true" } - logger.Info("涓嶇鍚堟憚鍍忔満瑙勫垯!") + //logger.Info("涓嶇鍚堟憚鍍忔満瑙勫垯!") return "false" } @@ -166,7 +182,7 @@ for _, liker := range arg.Liker { formula := "'" + liker.TableId + "'" + rule.Operator + "'" + rule.RuleValue + "'" expression, err := govaluate.NewEvaluableExpression(formula); - logger.Info("-------鎵撳嵃搴曞簱瑙勫垯鍏紡锛�",formula) + //logger.Info("-------鎵撳嵃搴曞簱瑙勫垯鍏紡锛�",formula) if err != nil { logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula) return "false" @@ -206,7 +222,7 @@ // 鍏朵粬杩欎釜鍊煎厛杩欎箞澶勭悊 return "true" } - logger.Info("-------鎵撳嵃浜哄憳瑙勫垯鍏紡锛�",formula) + //logger.Info("-------鎵撳嵃浜哄憳瑙勫垯鍏紡锛�",formula) expression, err := govaluate.NewEvaluableExpression(formula); if err != nil { logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula) @@ -230,7 +246,7 @@ } } else { formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + formate(rule.RuleValue) - logger.Info("-------鎵撳嵃浜哄憳绛夌骇瑙勫垯鍏紡锛�",formula) + //logger.Info("-------鎵撳嵃浜哄憳绛夌骇瑙勫垯鍏紡锛�",formula) expression, err := govaluate.NewEvaluableExpression(formula); if err != nil { logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula) @@ -267,7 +283,7 @@ } else { for _, def := range label.DefenceLevel { formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue - logger.Info("-------鎵撳嵃甯冮槻绛夌骇瑙勫垯鍏紡锛�",formula) + //logger.Info("-------鎵撳嵃甯冮槻绛夌骇瑙勫垯鍏紡锛�",formula) expression, err := govaluate.NewEvaluableExpression(formula); if err != nil { logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula) @@ -292,7 +308,7 @@ func taskJudge(label *Label, rule *protomsg.EventPushRule) string { formula := "'"+label.TaskId +"'"+ rule.Operator +"'"+ rule.RuleValue+"'" expression, err := govaluate.NewEvaluableExpression(formula); - logger.Info("-------鎵撳嵃浠诲姟瑙勫垯鍏紡锛�",formula) + //logger.Info("-------鎵撳嵃浠诲姟瑙勫垯鍏紡锛�",formula) if err != nil { logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula) return "false" @@ -314,8 +330,18 @@ func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) { for _, url := range urls { logger.Debug("鐪嬬湅鎺ㄩ�佸湴鍧�锛�",url.Url) - Push("tcp://192.168.1.123:40012", data) + bytes,err1 := proto.Marshal(data) + if err1 != nil { + logger.Info("搴忓垪鍖栧け璐ワ細",err1) + } + if _, ok := urlPool[url.Url] ; ok { + urlPool[url.Url] <- bytes + logger.Info("chan淇℃伅鑰岋細 ", urlPool[url.Url]) + } + logger.Info("chan淇℃伅浠ワ細 ", urlPool[url.Url]) + } + } // 鎶婃姤璀︾瓑绾ц浆鍖栨垚姹夊瓧 diff --git a/logger/logger.go b/logger/logger.go index 125d649..82d7a77 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -17,47 +17,47 @@ InfoLevel DebugLevel ) - +var loggerString string = "" const ( color_red = uint8(iota + 91) - color_green // 缁� - color_yellow // 榛� - color_blue // 钃� - color_magenta // 娲嬬孩 + color_green // 缁� + color_yellow // 榛� + color_blue // 钃� + color_magenta // 娲嬬孩 ) const ( - fatalPrefix = "[FATAL] " - errorPrefix = "[ERROR] " - warnPrefix = "[WARN] " - infoPrefix = "[INFO] " - debugPrefix = "[DEBUG] " + fatalPrefix = "[FATAL] " + errorPrefix = "[ERROR] " + warnPrefix = "[WARN] " + infoPrefix = "[INFO] " + debugPrefix = "[DEBUG] " ) const ( - ByDay int = iota + ByDay int = iota ByWeek ByMonth BySize ) type LogFile struct { - level int // 鏃ュ織绛夌骇 - saveMode int // 淇濆瓨妯″紡 - saveDays int // 鏃ュ織淇濆瓨澶╂暟 - logTime int64 // - fileName string // 鏃ュ織鏂囦欢鍚� - filesize int64 // 鏂囦欢澶у皬, 闇�瑕佽缃� saveMode 涓� BySize 鐢熸晥 + level int // 鏃ュ織绛夌骇 + saveMode int // 淇濆瓨妯″紡 + saveDays int // 鏃ュ織淇濆瓨澶╂暟 + logTime int64 // + fileName string // 鏃ュ織鏂囦欢鍚� + filesize int64 // 鏂囦欢澶у皬, 闇�瑕佽缃� saveMode 涓� BySize 鐢熸晥 fileFd *os.File } var logFile LogFile func init() { - logFile.saveMode = ByDay // 榛樿鎸夊ぉ淇濆瓨 - logFile.saveDays = 7 // 榛樿淇濆瓨涓夊ぉ鐨� + logFile.saveMode = ByDay // 榛樿鎸夊ぉ淇濆瓨 + logFile.saveDays = 7 // 榛樿淇濆瓨涓夊ぉ鐨� logFile.level = DebugLevel - //logFile.filesize = 1024 * 1024 * 10 // 榛樿10M锛� 闇�瑕佽缃� saveMode 涓� BySize + //logFile.filesize = 1024 * 1024 * 10 // 榛樿10M锛� 闇�瑕佽缃� saveMode 涓� BySize } func Config(logFolder string, level int) { @@ -92,6 +92,7 @@ if logFile.level >= DebugLevel { log.SetPrefix(blue(debugPrefix)) _ = log.Output(2, fmt.Sprintln(args...)) + //loggerString += fmt.Sprintln(args...) } } @@ -99,6 +100,7 @@ if logFile.level >= InfoLevel { log.SetPrefix(green(infoPrefix)) _ = log.Output(2, fmt.Sprintln(args...)) + //loggerString += fmt.Sprintln(args...) } } @@ -106,6 +108,7 @@ if logFile.level >= WarnLevel { log.SetPrefix(magenta(warnPrefix)) _ = log.Output(2, fmt.Sprintln(args...)) + //loggerString += fmt.Sprintln(args...) } } @@ -113,6 +116,7 @@ if logFile.level >= ErrorLevel { log.SetPrefix(red(errorPrefix)) _ = log.Output(2, fmt.Sprintln(args...)) + //loggerString += fmt.Sprintln(args...) } } @@ -120,7 +124,11 @@ if logFile.level >= FatalLevel { log.SetPrefix(red(fatalPrefix)) _ = log.Output(2, fmt.Sprintln(args...)) + //loggerString += fmt.Sprintln(args...) } +} +func OutPutByPanlei() { + _ = log.Output(2, loggerString) } func GetRedPrefix(s string) string { @@ -167,7 +175,7 @@ logFile.logTime = time.Now().Unix() } } - default: // 榛樿鎸夊ぉ ByDay + default: // 榛樿鎸夊ぉ ByDay if logFile.logTime+3600 < time.Now().Unix() { logFile.createLogFile() logFile.logTime = time.Now().Unix() diff --git a/main.go b/main.go index a8adc1a..32fa0e0 100644 --- a/main.go +++ b/main.go @@ -7,20 +7,16 @@ "net/http" _ "net/http/pprof" "ruleprocess/insertdata" + "ruleprocess/labelFilter" "ruleprocess/structure" "ruleprocess/util" "time" - //"bufio" - //"bytes" + "basic.com/valib/logger.git" "flag" "fmt" "github.com/golang/protobuf/proto" - "ruleprocess/logger" - //"gocv.io/x/gocv" - //"image" - //"image/color" - //"os" + "github.com/spf13/viper" "ruleprocess/cache" "ruleprocess/ruleserver" "sync" @@ -31,12 +27,22 @@ var surveyPort = flag.Int("surveyPort", 40007, "survey port") //蹇冭烦 var pubPort = flag.Int("pubPort", 50007, "pubsub port") //鏁版嵁鏇存柊 var initchan = make(chan bool) +var env = flag.String("env","pro","env set") func init() { + flag.Parse() // 鏃ュ織鍒濆鍖� - logger.Config("./info.log", logger.DebugLevel) - logger.Info("鏃ュ織鍒濆鍖栨垚鍔燂紒") + insertdata.Init(*env) + var logFile = "./logger/" + if viper.GetString("LogBasePath") != "" { + logFile = viper.GetString("LogBasePath") + } + logFile = logFile + "ruleprocess.log" + fmt.Println("鏃ュ織鍦板潃锛�",logFile) + logger.Config(logFile, logger.DebugLevel) + logger.SetSaveDays(7) + logger.Info("鏃ュ織鍒濆鍖栨垚鍔燂紒") } func main() { //fmt.Println("缂撳瓨鍒濆鍖栧畬鎴�",<- initchan)//dbserver鍒濆鍖栧畬姣� @@ -51,6 +57,7 @@ go cache.Init(initchan, *dbIp, *surveyPort, *pubPort) logger.Info("cache init completed!!!", <-initchan) //dbserver鍒濆鍖栧畬姣� ruleserver.Init() + labelFilter.Init() go ruleserver.TimeTicker() go ruleserver.StartServer() nReciever("ipc:///tmp/sdk-2-rules-process.ipc", deliver.PushPull, 1) @@ -90,12 +97,15 @@ ruleserver.Judge(&arg, &m) // 鎶妔dkMessage浼犺繘鍘伙紝鏂逛究缂撳瓨鏁版嵁鏃舵嫾鍑轰竴涓猺esultMag // 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞� resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult} - logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", time.Since(start)) + ruleserver.GetAttachInfo(resultMsg.SdkMessage) + ruleEnd := time.Since(start) + logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", ruleEnd) // 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S insertdata.InsertToEs(resultMsg) - logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", time.Since(start)) + esEnd := time.Since(start) + logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", esEnd) //浜嬩欢鎺ㄩ�� - //go labelFilter.Judge(resultMsg) + labelFilter.PushSomthing(resultMsg) //}(msg) } } @@ -118,7 +128,7 @@ func paramFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage { defer func() { if err := recover(); err != nil { - logger.Info("瑙e寘杩囩▼鐨勯敊璇�", err.(string)) + logger.Info("瑙e寘杩囩▼鐨勫紓甯告崟鑾�", err.(string)) } }() @@ -172,7 +182,7 @@ for _, info := range yoloParam.Infos { if info.Typ == 0 { //logger.Debug("-------------yolo鐨勫潗鏍囨湁鍑犱釜",info.RcObj) - photoMap := structure.PhotoMap{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, IsYolo: true} + photoMap := structure.PhotoMap{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, IsYolo: true,Id:info.ObjID} arg.Photo = append(arg.Photo, photoMap) yoloNum++ } diff --git a/ruleserver/attachInfo.go b/ruleserver/attachInfo.go new file mode 100644 index 0000000..cc2b5ab --- /dev/null +++ b/ruleserver/attachInfo.go @@ -0,0 +1,42 @@ +package ruleserver + +import ( + "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" + uuid "github.com/satori/go.uuid" + "ruleprocess/cache" +) +func GetAttachInfo(msg *protomsg.SdkMessage){ + //浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛� + push := new(protomsg.PushAttach) + localConfig, err := cache.GetServerInfo() + if err != nil { + logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") + } + logger.Info("localConfig淇℃伅锛�",localConfig) + push.ServerId = localConfig.ServerId + push.ServerName = localConfig.ServerName + serverIp, err := GetLocalIP() + push.LocalIp = serverIp + // 鏌ヨcameraName + camera, err := cache.GetCameraById(msg.Cid) + if err != nil { + logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") + } + push.Cam = &camera + push.PushId = uuid.NewV4().String() + // 瑙嗛鍦板潃鍗犱綅绗� + //localConfig1, err := cache.GetServerInfo() + //if err != nil { + // panic("閰嶇疆鏂囦欢涓嶅悎娉�") + //} + //logger.Info("璇锋眰瑙嗛璺緞锛�",msg.Push,serverIp,camera) + // weedfsUrl := "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/dir/assign" + //if path,err := WeedFSClient.GetFid(weedfsUrl);err != nil { + // logger.Info("璇锋眰鏂囦欢鍦板潃澶辫触:",err) + //} else { + // logger.Info("瑙嗛璺緞涓猴細",path) + // push.VideoUrl = path + //} + msg.Push = push +} \ No newline at end of file diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go index bfe8efe..ae81c44 100644 --- a/ruleserver/geoPolygon.go +++ b/ruleserver/geoPolygon.go @@ -53,7 +53,11 @@ } //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉� +<<<<<<< HEAD func getLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) { +======= +func getLocation(rect structure.Rect, n int) ([]Pointfloat, float64) { +>>>>>>> master xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴� yArr := make([]float64, n) pointArr := make([]structure.Pointfloat, 0, n*n) @@ -86,7 +90,11 @@ } //PgsInterPercent calculate percent of two polygon intersection 璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮 +<<<<<<< HEAD func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { +======= +func PgsInterPercent(pgpts []Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { +>>>>>>> master areapts, areaBox := getLocation(box, 10) var count = 0 diff --git a/ruleserver/geoPolygon_test.go b/ruleserver/geoPolygon_test.go new file mode 100644 index 0000000..7f6c9ee --- /dev/null +++ b/ruleserver/geoPolygon_test.go @@ -0,0 +1,38 @@ +package ruleserver + +import ( + "basic.com/valib/logger.git" + "encoding/json" + "fmt" + "ruleprocess/structure" + + "testing" +) + +func TestPgsInterPercent(t *testing.T) { + areaPoints := json2points("[{\"x\":582,\"y\":11},{\"x\":582,\"y\":525},{\"x\":943,\"y\":525},{\"x\":943,\"y\":11}]") + widthScale := float64(2688) / 960 + heigthScale := float64(1520) / 540 + rec := structure.Rect{1333, 594,204,274} + per := PgsInterPercent(areaPoints,rec,widthScale,heigthScale) + fmt.Println(widthScale,heigthScale,per) +} + +// 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡 +func json2points(areaPoints string) []Point { + var pts []Point + if areaPoints == "[]" || areaPoints == "" { + logger.Error("=====================姝ゅ尯鍩熶负鍏ㄩ儴鍖哄煙") + pts = append(pts, Point{0, 0}) + pts = append(pts, Point{0, 540}) + pts = append(pts, Point{960, 540}) + pts = append(pts, Point{960, 0}) + } else { + err := json.Unmarshal([]byte(areaPoints), &pts) + if err != nil { + logger.Error("json.Unmarshal閿欒", err) + panic("搴忓垪鍖栧潗鏍囧紓甯革紝绋嬪簭閫�鍑�") + } + } + return pts +} \ No newline at end of file diff --git a/ruleserver/personTrack.go b/ruleserver/personTrack.go index cac682a..a86faaf 100644 --- a/ruleserver/personTrack.go +++ b/ruleserver/personTrack.go @@ -2,12 +2,14 @@ import ( "basic.com/pubsub/protomsg.git" - "github.com/golang/protobuf/proto" "ruleprocess/logger" + "github.com/golang/protobuf/proto" "ruleprocess/structure" + "sync" ) var TrackPond = make(map[string]*PersonTrack) +var lock = sync.RWMutex{} type PersonTrack struct { Faces []*Face // 浜鸿劯鐨勬暟缁� 鏀逛负鏁伴噺 @@ -19,13 +21,10 @@ } var num int = 25 + // 妫�鏌ユ槸鍚﹀墠鍚庝袱娆$殑鏁版嵁id鏄惁瀹屽叏鐩稿悓锛堜汉鑴革級 func FaceIsSame(msg *protomsg.SdkMessage) { - logger.Debug("+++++++++++++++++++++杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond) - if msg.Tasklab == nil { - logger.Info("鏁版嵁涓虹┖锛屼笉蹇呰拷韪�") - return - } + logger.Debug("+++++++++++++++++++++浜鸿劯杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond) for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 閬嶅巻鍚勭畻娉曠殑sdkData if sdkinfo.Sdktype == "FaceDetect" { // 浜鸿劯妫�娴� logger.Info("鏁版嵁闀垮害涓猴細", len(sdkinfo.Sdkdata)) @@ -34,14 +33,18 @@ FaceIsInPond(msg.Cid, sdkinfo) } else { if num > 0 { // 杩炵画num娆℃病鏈夋暟鎹墠绠楁槸娌℃湁鏁版嵁锛屼笉鐒跺彧绠椾綔涓㈠抚 - logger.Info("鎴戣涓轰綘鍙槸涓㈠抚浜�,姝ゆ椂鐨刵um鍊间负锛�",num) + logger.Info("鎴戣涓轰綘鍙槸涓㈠抚浜�,姝ゆ椂鐨刵um鍊间负锛�", num) num-- } else { if TrackPond[msg.Cid] != nil { logger.Info("濡傛灉涓嶄负绌猴細", TrackPond[msg.Cid]) + lock.Lock() TrackPond[msg.Cid].Faces = nil + lock.Unlock() } else { + lock.Lock() TrackPond[msg.Cid] = &PersonTrack{Faces: nil} + lock.Unlock() logger.Info("濡傛灉涓虹┖锛�", TrackPond[msg.Cid]) } logger.Info("鎽勫儚鏈�:" + msg.Cid + "-娌℃湁浜鸿劯锛岃閲嶇疆涓虹┖") @@ -54,63 +57,67 @@ } // 杩借釜浜轰綋锛屾鏌ユ暟閲忔槸鍚︿竴鑷� -func BodyIsSame(msg *protomsg.SdkMessage) bool{ - logger.Debug("+++++++++++++++++++++杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond) +func BodyIsSame(args *structure.SdkDatas,msg *protomsg.SdkMessage) bool{ + logger.Debug("+++++++++++++++++++++浜轰綋杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond) for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 閬嶅巻鍚勭畻娉曠殑sdkData if sdkinfo.Sdktype == "Yolo" { - if len(sdkinfo.Sdkdata) > 1 { - yoloParam := protomsg.ParamYoloObj{} - err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam) - if err != nil { - logger.Info("瑙f瀽yolo鏁版嵁鏃跺嚭鐜伴敊璇�", err) - continue - } - var yoloNum int = 0 - for i := 0; i < len(yoloParam.Infos); i++ { - if yoloParam.Infos[i].Typ == 0 { - yoloNum++ - } - } - if TrackPond[msg.Cid] != nil { - logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "鐜板湪缂撳瓨姹犱腑璁板綍鐨勪釜鏁帮細", TrackPond[msg.Cid].Yolo) - } else { - logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "杩樻病鏈夎繖涓憚鍍忔満鐨勭紦瀛�") - } - if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo鐨勫鏋滄暟閲忕浉鍚屽垯瑙嗕负涓嶅彉銆佹妸yolo鐨剆dkData娓呯┖ - //yoloParam.Infos = (yoloParam.Infos)[0:0] - //sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam) - //if err != nil { - // logger.Error("yolo搴忓垪鍖栭敊璇�", err) - //} - logger.Info("璺熶箣鍓嶇浉鍚岋紝娓呯┖yolo鏁版嵁") - return true - } else { - if TrackPond[msg.Cid] != nil { - logger.Info("鏇存柊褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum) - TrackPond[msg.Cid].Yolo = yoloNum - } else { - logger.Info("鏂板缓褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum) - TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum} - } - return false - } + if len(sdkinfo.Sdkdata) > 1 { + yoloParam := protomsg.ParamYoloObj{} + err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam) + if err != nil { + logger.Info("瑙f瀽yolo鏁版嵁鏃跺嚭鐜伴敊璇�", err) + continue + } + var yoloNum int = 0 + for i := 0; i < len(yoloParam.Infos); i++ { + if yoloParam.Infos[i].Typ == 0 { + yoloNum++ + } + } + if TrackPond[msg.Cid] != nil { + logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "鐜板湪缂撳瓨姹犱腑璁板綍鐨勪釜鏁帮細", TrackPond[msg.Cid].Yolo) + } else { + logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "杩樻病鏈夎繖涓憚鍍忔満鐨勭紦瀛�") + } + if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo鐨勫鏋滄暟閲忕浉鍚屽垯瑙嗕负涓嶅彉銆佹妸yolo鐨剆dkData娓呯┖ + yoloParam.Infos = (yoloParam.Infos)[0:0] + sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam) + if err != nil { + logger.Error("yolo搴忓垪鍖栭敊璇�", err) + } + delete(args.RuleResult,"yolo") + logger.Info("娓呴櫎yolo鏍囩锛�",args.RuleResult["yolo"]) + logger.Info("璺熶箣鍓嶇浉鍚岋紝娓呯┖yolo鏁版嵁锛屼汉浣撹拷韪粨鏉�") + return true + } else { + if TrackPond[msg.Cid] != nil { + logger.Info("鏇存柊褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum) + TrackPond[msg.Cid].Yolo = yoloNum } else { - if TrackPond[msg.Cid] != nil { - TrackPond[msg.Cid].Yolo = 0 - } else { - TrackPond[msg.Cid] = &PersonTrack{Yolo: 0} - } - logger.Info("鎽勫儚鏈�:" + msg.Cid + "-娌℃湁yolo锛岃閲嶇疆涓�0") - continue + logger.Info("鏂板缓褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum) + TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum} + } + logger.Debug("---------------------------------浜轰綋杩借釜缁撴潫--------------------------------------") + return false + } + } else { + if TrackPond[msg.Cid] != nil { + TrackPond[msg.Cid].Yolo = 0 + } else { + TrackPond[msg.Cid] = &PersonTrack{Yolo: 0} + } + logger.Info("鎽勫儚鏈�:" + msg.Cid + "-娌℃湁yolo锛岃閲嶇疆涓�0") + continue } } } - logger.Debug("---------------------------------杩借釜缁撴潫--------------------------------------") + logger.Debug("---------------------------------浜轰綋杩借釜缁撴潫--------------------------------------") return false } -func TrackOrNot(label map[string]interface{}) bool{ + +func TrackOrNot(label map[string]interface{}) bool { if label["yolo"] != nil && len(label["yolo"].([]structure.Result)) > 0 { - for _,res := range label["yolo"].([]structure.Result) { + for _, res := range label["yolo"].([]structure.Result) { if res.TimeLabel == "10" { return true } @@ -120,11 +127,11 @@ } // 杩囨护鎺夐偅浜涘凡鍦ㄧ紦瀛樹腑涓斿垎鍊兼洿浣庣殑浜鸿劯锛屾洿鏂扮紦瀛橈紙娌℃湁鐨勫姞涓婏紝鍒嗗�兼洿鏂颁负鏇撮珮鐨勶紝澶氱殑鍒犻櫎锛� -func FaceIsInPond(cameraId string, sdkinfor *protomsg.SdkmsgWithTask) string { +func FaceIsInPond(cameraId string, sdkinfor *protomsg.SdkmsgWithTask) { if TrackPond[cameraId] != nil { logger.Info("----椹墠鐐細", TrackPond[cameraId], "=====", len(TrackPond[cameraId].Faces)) - for _,face := range TrackPond[cameraId].Faces { - logger.Info("缂撳瓨涓瓨鍌ㄧ殑face鏁版嵁锛�",face.Id,face.Score) + for _, face := range TrackPond[cameraId].Faces { + logger.Info("缂撳瓨涓瓨鍌ㄧ殑face鏁版嵁锛�", face.Id, face.Score) } faceParam := protomsg.ParamFacePos{} err := proto.Unmarshal(sdkinfor.Sdkdata, &faceParam) @@ -132,24 +139,29 @@ logger.Info("瑙f瀽face sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err) } logger.Info("================杩借釜涔嬪墠浜鸿劯鐨勪釜鏁帮細", len(faceParam.Faces)) - for _,face := range faceParam.Faces { - logger.Info("鏂版潵鐨勭殑face鏁版嵁锛�",face.Pos.FaceID,face.Pos.FAngle.Confidence) + for _, face := range faceParam.Faces { + logger.Info("鏂版潵鐨勭殑face鏁版嵁锛�", face.Pos.FaceID, face.Pos.FAngle.Confidence) } - var facesTemp = faceParam.Faces // 鍏堟妸鏁版嵁杞瓨涓�浠斤紝涓嶇劧涓�浼氬効鏁版嵁鍒犲噺涔嬪悗鎵句笉鍒板師濮嬫暟鎹紝涓嶈兘璁╃紦瀛樻暟鎹洿鏂颁簡 + var facesTemp []protomsg.ResultFaceDetect + for _, face := range faceParam.Faces { + facesTemp = append(facesTemp, *face) // 鍏堟妸鏁版嵁杞瓨涓�浠斤紝涓嶇劧涓�浼氬効鏁版嵁鍒犲噺涔嬪悗鎵句笉鍒板師濮嬫暟鎹紝涓嶈兘璁╃紦瀛樻暟鎹洿鏂颁簡 + } for i := 0; i < len(faceParam.Faces); { faceFlag := false for _, val := range TrackPond[cameraId].Faces { if faceParam.Faces[i].Pos.FaceID == val.Id && faceParam.Faces[i].Pos.FAngle.Confidence <= val.Score { // 鍦ㄦ睜瀛愰噷骞朵笖鍒嗗�兼洿浣庯紝鏄鎶涘純鐨勬暟鎹� faceFlag = true //return "true" - logger.Info("鍒嗗�间负锛�",faceParam.Faces[i].Pos.FAngle.Confidence,"--缂撳瓨鐨勫垎鍊间负锛�",val.Score,"姝ゆ暟鎹敱浜庡湪姹犲瓙涓笖鍒嗗�兼洿浣庯紝鏄琚姏寮冪殑鏁版嵁") + logger.Info("鍒嗗�间负锛�", faceParam.Faces[i].Pos.FAngle.Confidence, "--缂撳瓨鐨勫垎鍊间负锛�", val.Score, "姝ゆ暟鎹敱浜庡湪姹犲瓙涓笖鍒嗗�兼洿浣庯紝鏄琚姏寮冪殑鏁版嵁") faceParam.Faces = append(faceParam.Faces[:i], faceParam.Faces[i+1:]...) break } if faceParam.Faces[i].Pos.FaceID == val.Id && faceParam.Faces[i].Pos.FAngle.Confidence > val.Score { // 鍦ㄦ睜瀛愰噷骞朵笖鍒嗗�兼洿楂橈紝鏇存柊缂撳瓨 faceFlag = true logger.Info("鍒嗗�肩敱", val.Score, "鏇存柊涓猴細", faceParam.Faces[i].Pos.FAngle.Confidence, "姝ゆ暟鎹敱浜庡湪姹犲瓙涓笖鍒嗗�兼洿楂橈紝鏄琚紶閫掍笅鍘荤殑鏁版嵁") + lock.Lock() val.Score = faceParam.Faces[i].Pos.FAngle.Confidence + lock.Unlock() } } if !faceFlag { // 姝や汉鑴镐笉鍦ㄦ睜瀛愪腑 @@ -158,18 +170,17 @@ i++ } } - logger.Info("鍙嶅簭鍒楀寲閲嶆柊瑁呴厤涔嬪墠浜鸿劯鐨勪釜鏁帮細",len(faceParam.Faces)) + logger.Info("鍙嶅簭鍒楀寲閲嶆柊瑁呴厤涔嬪墠浜鸿劯鐨勪釜鏁帮細", len(faceParam.Faces)) - sdkinfor.Sdkdata, err = proto.Marshal(&faceParam) - if err != nil { - logger.Error("face搴忓垪鍖栭敊璇�", err) - } - //logger.Info("璺熶箣鍓嶇浉鍚岋紝娓呯┖浜鸿劯鏁版嵁") - // 鍙嶅悜寰幆 锛岀湅閭d簺缂撳瓨鏈夎�屾暟鎹病鏈夌殑灏卞垹闄ゆ睜瀛愪腑鐨勬暟鎹洿鏂扮紦瀛� logger.Info("涓存椂瀛樺偍鐨勬柊鏉ユ暟鎹細") for _, temp := range facesTemp { - logger.Info("涓存椂瀛樺偍鐨勬柊鏉ョ殑鐨刦ace鏁版嵁锛�",temp.Pos.FaceID,temp.Pos.FAngle.Confidence) + logger.Info("涓存椂瀛樺偍鐨勬柊鏉ョ殑鐨刦ace鏁版嵁锛�", temp.Pos.FaceID, temp.Pos.FAngle.Confidence) } + sdkinfor.Sdkdata, err = proto.Marshal(&faceParam) + if err != nil { + logger.Error("浜鸿劯搴忓垪鍖栭敊璇�", err) + } + // 鍙嶅悜寰幆 锛岀湅閭d簺缂撳瓨鏈夎�屾暟鎹病鏈夌殑灏卞垹闄ゆ暟鎹洿鏂扮紦瀛� for i := 0; i < len(TrackPond[cameraId].Faces); { flag := false for _, temp := range facesTemp { @@ -182,11 +193,14 @@ } else { // 姝ゆ暟鎹湪缂撳瓨涓絾涓嶅湪鏉ョ殑鏁版嵁甯т腑锛屽垹闄ゆ鏁版嵁鏇存柊缂撳瓨 logger.Info("鍒犻櫎姹犲瓙涓殑鏁版嵁鏇存柊缂撳瓨") + lock.Lock() TrackPond[cameraId].Faces = append(TrackPond[cameraId].Faces[:i], TrackPond[cameraId].Faces[i+1:]...) + lock.Unlock() } } } else { - return "false" + lock.Lock() + TrackPond[cameraId] = &PersonTrack{Faces: nil} + lock.Unlock() } - return "false" } diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go index 5859d9b..8dab014 100644 --- a/ruleserver/readyDataForRule.go +++ b/ruleserver/readyDataForRule.go @@ -6,9 +6,7 @@ "encoding/json" "errors" "fmt" - "github.com/go-yaml/yaml" "github.com/golang/protobuf/proto" - "io/ioutil" "math" "nanomsg.org/go-mangos" "nanomsg.org/go-mangos/protocol/req" @@ -33,23 +31,6 @@ } func Init() { - data, err := ioutil.ReadFile("./config/conf.yml") - if err != nil { - fmt.Println("璇诲彇閰嶇疆鏂囦欢鍑洪敊--", err) - logger.Error("璇诲彇閰嶇疆鏂囦欢鍑洪敊--", err) - } - c := conf{} - //鎶妝aml褰㈠紡鐨勫瓧绗︿覆瑙f瀽鎴恠truct绫诲瀷 - yaml.Unmarshal(data, &c) - logger.Debug("閰嶇疆鏂囦欢鐨勫�间负锛�", c) - serverIp = c.ServerIp - serverPort = c.ServerPort - dbTablePersons = c.DbTablePersons - localConfig, err1 := cache.GetServerInfo() - if err1 != nil { - logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�") - } - logger.Debug("鏈満淇℃伅鍜宻erver淇℃伅锛�", localConfig, serverIp, serverPort) go Push1() } @@ -80,7 +61,6 @@ taskGroup = task } } - logger.Debug("褰撳墠鏁版嵁甯ц鍖归厤鐨勮鍒欑粍锛�-------------------------","鎽勫儚鏈篿d:",cameraId,"浠诲姟id",taskId) if taskGroup == nil { return nil } else { @@ -106,10 +86,10 @@ } func Decimal(value float32) float64 { value1, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(value)), 64) - logger.Info("鍒濇淇濈暀涓や綅鎴恠tr:",value1) + //logger.Info("鍒濇淇濈暀涓や綅鎴恠tr:",value1) n10 := math.Pow10(4) value2 := math.Trunc((value1+0.5/n10)*n10) / n10 - logger.Info("鍒濇淇濈暀涓や綅鎴恠tr::::",value2) + //logger.Info("鍒濇淇濈暀涓や綅鎴恠tr::::",value2) return value2 } // 鍙栧嚭鏌愪釜鏃堕棿瑙勫垯鐨勭鍑犲ぉ鐨勮鍒欐闆嗗悎 @@ -162,7 +142,7 @@ } // 缁欑洰鏍囧~鍏卨iker -func FillLiker(arg *structure.Arg,tableId []string, compareThreshold float32) { +func fillLiker(tableId []string, compareThreshold float32,arg *structure.Arg) { //bytes := bigCache.GetComparePersonBaseInfo(tableId, arg.Feature, compareThreshold) comArg := &protomsg.CompareArgs{ TableIds:tableId, @@ -229,7 +209,7 @@ if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue == "" { // 閰嶇殑鍙傛暟鏄瘮瀵瑰叏閮ㄥ簳搴� compareFlag = 1 } - if groupRule.Rules[j].SdkArgAlias == "threshold" { + if groupRule.Rules[j].SdkArgAlias == "cmpThreshold" { v2, err := strconv.ParseFloat(groupRule.Rules[j].SdkArgValue, 32) if err != nil { logger.Error("string杞琭loat32澶辫触锛�") @@ -256,19 +236,19 @@ //logger.Info("--------------鐪嬬湅compareFlag鐨勫�煎拰tableId鍜宎reaMap.args鐨勯暱搴︼細",compareFlag,tableIds,len(areaMap.args)) for _, arg := range areaMap.Args { arg.Liker = arg.Liker[0:0] - logger.Info("娓呯┖涔嬪悗鐪嬬湅涔嬪墠鎵撶殑浜鸿劯鏍囩鍙樹簡娌★細") - if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]structure.FaceResult)) > 0 { - for _, faceResult := range args.RuleResult["face"].([]structure.FaceResult) { - for _,arg := range faceResult.Args { - logger.Info("浜哄憳鍒嗗�兼槸锛�",arg.Score,"liker鐨勬暟閲忎负",arg.Liker) - } - } - } + //logger.Info("娓呯┖涔嬪悗鐪嬬湅涔嬪墠鎵撶殑浜鸿劯鏍囩鍙樹簡娌★細") + //if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]FaceResult)) > 0 { + // for _, faceResult := range args.RuleResult["face"].([]FaceResult) { + // for _,arg := range faceResult.Args { + // logger.Info("浜哄憳鍒嗗�兼槸锛�",arg.Score,"liker鐨勬暟閲忎负",arg.Liker) + // } + // } + //} if compareFlag == 1 { - FillLiker(arg,nil, threshold) + fillLiker(nil, threshold, arg) } if compareFlag == 2 { - FillLiker(arg,tableIds, threshold) + fillLiker(tableIds, threshold, arg) } //logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker)) } @@ -288,16 +268,17 @@ func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) { a.TargetNum = 0 - threshold := 0.5 // 鐩镐技搴� + threshold := 80.0 // 鐩镐技搴� intersectionper := 0.2 // 鍗犳瘮 size := 0.0 // 灏哄 areaPoints := Json2points(a.AreaJson) - widthScale := float64(arg.ImageWidth / 960) - heigthScale := float64(arg.ImageHeight / 540) + logger.Info("鐪嬬湅鍥剧墖鐨剋idth鍜宧eight:",arg.ImageWidth,arg.ImageHeight) + widthScale := float64(arg.ImageWidth) / 960 + heigthScale := float64(arg.ImageHeight) / 540 for _, obj := range arg.Photo { //logger.Info("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale)) - if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) { + if obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper { // 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁� a.TargetNum++ arg1 := structure.Arg{obj.Id,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*structure.BaseInfo{}} @@ -393,6 +374,7 @@ // case <-ctx.Done(): // return case data := <- sender: + logger.Info("姣斿杩涚▼鍏ュ弬锛�",data.TableIds,data.CompareThreshold) bytes,err1 := proto.Marshal(data) logger.Info("鏁版嵁闀垮害涓猴細",len(bytes)) if err1 != nil { diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index 0b6b606..33e057d 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -3,19 +3,29 @@ import ( "plugin" "ruleprocess/cache" + "ruleprocess/structure" "ruleprocess/logger" "ruleprocess/structure" "sort" "strconv" "strings" + "sync" "time" "basic.com/pubsub/protomsg.git" "github.com/knetic/govaluate" ) + +var rw sync.RWMutex // 璇诲啓閿� + // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas 褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas) func Judge(args *structure.SdkDatas, message *protomsg.SdkMessage) { + defer func() { + if err := recover(); err != nil { + logger.Error("瑙勫垯妯″潡鍎跨殑寮傚父鎹曡幏锛�",err) + } + }() if len(args.Sdkdata) > 0 { // 鎷垮埌鏈憚鍍忔満鐨勫尯鍩� cameraPolygons := GetPolygons(args.CameraId) @@ -60,6 +70,12 @@ } } } + // 浜轰綋杩借釜 + // 濡傛灉鏍囩涓惈鏈夋寔缁椂闂撮娆℃姤璀︾殑timeLabel鐨勮瘽鍒欎笉闇�瑕佽繃浜轰綋杩借釜锛屼笉鐒跺氨娌$殑鎻掑叆浜� + fk := TrackOrNot(args.RuleResult) + if !fk { + BodyIsSame(args,message) + } } } } @@ -100,6 +116,7 @@ a,b,c := f.(func(args *structure.SdkDatas,rule protomsg.GroupRule)([]*structure.LittleRuleResult, string, string))(args,rule) return a,b,c } + func RunRule(args *structure.SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label structure.Others) (bool,[]int) { defer func() { if err := recover(); err != nil { @@ -143,6 +160,7 @@ if result.(bool) { // 鏈�鍚庤繃鎸佺画鏃堕棿绛夋椂闂寸淮搴︾殑鏉′欢 鎶婃椂闂磋鍒欎綅缃皟鏁村埌杩欎釜浣嶇疆鏄负浜嗙紦瀛樻暟鎹� + cacheId := "" for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId) @@ -153,14 +171,17 @@ if ipcId == sdkData.IpcId { for _, areaMap := range sdkData.AreaMapList { // 鍘诲紑鍚竴涓畾鏃跺櫒 - duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message) + cacheid := duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message) + if cacheid != "" { + cacheId = cacheid + } } } } } // 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂� timeFlag := TimerAlarm(&label, groupRule.GroupId, result.(bool)) - if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢 + if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" || cacheId != ""{ // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢 // 鎵撲汉鑴告爣绛惧拰yolo鏍囩 // 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲� // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 @@ -180,17 +201,19 @@ } } } - logger.Info("face鏍囩鐨勯暱搴︼細",len(faces)) + //logger.Info("face鏍囩鐨勯暱搴︼細",len(faces)) //for _,face := range faces { // //logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�擾_______________鐪嬬湅浜鸿劯鐨勫潗鏍�:",face.Location) //} logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛") // 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓 - locations := []structure.Rect{} + locations := []structure.TargetInfo{} for _, sdkData := range args.Sdkdata { if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘 for _, areaMap := range sdkData.AreaMapList { - locations = append(locations, putYolosToResult(areaMap)...) + if areaMap.IsEffective { + locations = append(locations, putYolosToResult(areaMap)...) + } } } } @@ -208,10 +231,32 @@ //logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result))) } if faceFlag { - args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.Rect{}, polygonId, islink, label,}, faces}) + args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.TargetInfo{}, polygonId, islink,label,}, faces}) //logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]FaceResult))) labelTypes = append(labelTypes,1) } + // 缁欐寔缁椂闂寸殑绗竴寮犺祴浜堢紦瀛樻暟鎹紙閬嶅巻澶嶅埗锛� + if cacheId != "" { // 鏈夎繖甯ф暟鎹殑缂撳瓨 + tempMap := make(map[string]interface{}) + for k, result := range args.RuleResult { + if k == "yolo" { + tempMap[k] = []structure.Result{} + for _, res := range result.([]structure.Result) { + tempMap[k] = append(tempMap[k].([]structure.Result), res) + } + } + if k == "face" { + tempMap[k] = []structure.FaceResult{} + for _, res := range result.([]structure.FaceResult) { + tempMap[k] = append(tempMap[k].([]structure.FaceResult), res) + } + } + } + rw.Lock() + TimeEleList[cacheId].CacheSdkData.RuleResult = tempMap + rw.Unlock() + } + return true,labelTypes } else { return false,[]int{} @@ -247,11 +292,15 @@ return faces } -func putYolosToResult(am *structure.AreaMap) []structure.Rect { - locations := []structure.Rect{} +func putYolosToResult(am *structure.AreaMap) []structure.TargetInfo { + locations := []structure.TargetInfo{} if len(am.FilterData) > 0 { for _, data := range am.FilterData { - locations = append(locations, data.Location) + location := structure.TargetInfo{} + location.Rect = data.Location + location.TargetId = data.Id + location.TargetScore = data.Score + locations = append(locations, location) } } //logger.Println("-----------------------------------------------鍚浣犳槸绌虹殑锛�",faces) @@ -264,21 +313,27 @@ logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText) var flag bool = true var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} + rw.Lock() for k, timeEle1 := range TimeEleList { if k == groupRule.GroupId { flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板 timeEle = *timeEle1 } } + //for _,ruleRe := range timeEle.RuleResults { + // logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort) + //} if flag { // 濡傛灉杩樻病鏈夎繖涓畾鏃跺櫒鍏冪礌灏辨柊澧炰竴涓� //timeEle := TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌 //TimeEleList = make(map[string]timeElement) TimeEleList[groupRule.GroupId] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互瑙勫垯缁刬d涓洪敭 - logger.Info("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList) + //logger.Info("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList) // 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡 for j := 0; j < len(groupRule.Rules); j++ { var flag1 bool = true + //logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId) for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults { + //logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort) if groupRule.Rules[j].CameraId == ruleRes.CameraId { flag1 = false } @@ -288,6 +343,7 @@ } } } + rw.Unlock() // 寰�鏁扮粍閲岃祴鍊� isOk,labelTypes := RunRule(args, groupRule, taskId, message, label) if isOk { @@ -339,13 +395,14 @@ result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� if result.(bool) { logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ") - if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈� + rw.RLock() + if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈� // 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀� label.LinkCache = []structure.ResultMsg{} for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults { label.LinkCache = append(label.LinkCache, ruleRes.CacheData) } - logger.Debug("鑱斿姩浠诲姟缂撳瓨浜嗗嚑涓暟鎹�", len(label.LinkCache)) + for i := 0; i < len(args.RuleResult["yolo"].([]structure.Result)); i++ { if args.RuleResult["yolo"].([]structure.Result)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂 args.RuleResult["yolo"].([]structure.Result)[i].Others.LinkCache = label.LinkCache @@ -357,6 +414,7 @@ } } } + rw.RUnlock() } } } else { @@ -385,40 +443,45 @@ // va.Result = strconv.FormatBool(isOk) // } //} + rw.Lock() for k, _ := range TimeEleList { if k == groupRule.GroupId { delete(TimeEleList, k) logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒") } } + rw.Unlock() // 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ - } } // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒 -func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) { +func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) string{ if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� 閰嶇疆鐨勭畻娉曡瀵圭殑涓� if rule.SdkArgAlias == "duration" { // - logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule) + //logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule) // 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜� + rw.Lock() var flag bool = true for k, _ := range TimeEleList { if k == groupId+"+"+rule.Id { flag = false // 鏈夊氨缃负false - logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�") + //logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�") } } if flag { timeLength, _ := strconv.Atoi(rule.SdkArgValue) - timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級 + timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, nil}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級 //TimeEleList = make(map[string]timeElement) TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭 logger.Info("鍒涘缓浜嗚鏁板櫒") + cacheId = groupId+"+"+rule.Id } + rw.Unlock() } } + return cacheId } func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go index ac959e6..f42f3a2 100644 --- a/ruleserver/timeTicker.go +++ b/ruleserver/timeTicker.go @@ -34,33 +34,35 @@ func TimeTicker() { ticker := time.NewTicker(1 * time.Second) - go func(ticker *time.Ticker) { - defer ticker.Stop() - for { - select { - case <-ticker.C: - logger.Info("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix()) - fmt.Println("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix()) - // 姣忕閽熻鏁板櫒姹犲瓙閲屾墍鏈夌殑璁℃暟鍣ㄥ厓绱犻兘鍑忎竴锛屽噺鍒�0鐨勬槸璇ユ姤璀︾殑 - for k, timeEle := range TimeEleList { - if timeEle.N > 0 { - timeEle.N = timeEle.N - 1 - logger.Error("-------------------------------------鎵撳嵃瀹氭椂鍣ㄨ鏁板厓绱犲綋鍓嶅��-----------------------------------------锛�", timeEle.N) - } - if timeEle.GroupId != "" && timeEle.N == 0 { - // 璇存槑鏄仈鍔ㄤ换鍔$殑鏃堕棿绐楀彛 鍒扮偣鍎夸簡璇ラ攢姣佷簡,鍐嶆潵浜嗗啀鍒涘缓 - delete(TimeEleList, k) - } + //go func(ticker *time.Ticker) { + defer ticker.Stop() + for { + select { + case <-ticker.C: + logger.Info("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix()) + fmt.Println("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix()) + // 姣忕閽熻鏁板櫒姹犲瓙閲屾墍鏈夌殑璁℃暟鍣ㄥ厓绱犻兘鍑忎竴锛屽噺鍒�0鐨勬槸璇ユ姤璀︾殑 + rw.Lock() + for k, timeEle := range TimeEleList { + if timeEle.N > 0 { + timeEle.N = timeEle.N - 1 + logger.Error("-------------------------------------鎵撳嵃瀹氭椂鍣ㄨ鏁板厓绱犲綋鍓嶅��-----------------------------------------锛�", timeEle.N) } - case stop := <-stopChan: - if stop { - logger.Info("瀹氭椂鍣ㄧ粨鏉�") - return - //os.Exit(0) + if timeEle.GroupId != "" && timeEle.N == 0 { + // 璇存槑鏄仈鍔ㄤ换鍔$殑鏃堕棿绐楀彛 鍒扮偣鍎夸簡璇ラ攢姣佷簡,鍐嶆潵浜嗗啀鍒涘缓 + delete(TimeEleList, k) } } + rw.Unlock() + case stop := <-stopChan: + if stop { + logger.Info("瀹氭椂鍣ㄧ粨鏉�") + return + //os.Exit(0) + } } - }(ticker) + } + //}(ticker) } func StopTimeTicker() { stopChan <- true @@ -72,6 +74,7 @@ var flagTime string // // 鍒ゆ柇鏈夋棤姝よ鍒欑粍鐨勫畾鏃跺櫒 flag := false + rw.Lock() for k, _ := range TimeEleList { //logger.Debug("-----------------鐪嬬湅杩欎釜key鍜実roupId", k, groupId) if strings.Contains(k, groupId) && k != groupId{ @@ -133,6 +136,7 @@ flagTime = "00" } } + rw.Unlock() return flagTime } diff --git a/structure/gragh.go b/structure/gragh.go index f8bfd92..6aae41f 100644 --- a/structure/gragh.go +++ b/structure/gragh.go @@ -18,4 +18,5 @@ type Pointfloat struct { X float64 `json:"x"` Y float64 `json:"y"` -} \ No newline at end of file +} + diff --git a/structure/rule.go b/structure/rule.go index e1e3104..60fe306 100644 --- a/structure/rule.go +++ b/structure/rule.go @@ -79,7 +79,7 @@ DefenceState bool // 鏄惁甯冮槻 AlarmLevel int32 // 鎶ヨ绛夌骇 RuleText string // 鏂囧瓧鐗堣鍒欑粍 - Location []Rect // 鐩爣鐨勫潗鏍� + Location []TargetInfo // 鐩爣鐨勫潗鏍� AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽ IsLink bool // 鏄惁鏄仈鍔ㄤ换鍔� Others @@ -90,6 +90,12 @@ TimeLabel string } +type TargetInfo struct { + Rect + TargetId uint64 + TargetScore float64 +} + // 杩囪鍒欏簱鎵撲笂鐨勬爣绛� type FaceResult struct { Result diff --git a/util/105.jpg b/util/105.jpg deleted file mode 100644 index c5e3e68..0000000 --- a/util/105.jpg +++ /dev/null Binary files differ diff --git a/util/simpleCV.go b/util/simpleCV.go index 21e551f..27e8196 100644 --- a/util/simpleCV.go +++ b/util/simpleCV.go @@ -9,7 +9,7 @@ "image/color" "os" "ruleprocess/cache" - "ruleprocess/logger" + "basic.com/valib/logger.git" "ruleprocess/ruleserver" "ruleprocess/structure" "strings" @@ -156,7 +156,8 @@ } } -func DrawPolygonOnImage(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) { + +func DrawPolygonOnImageForYolo(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) { rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data) //rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor) @@ -164,15 +165,15 @@ yellow := color.RGBA{255, 255, 0, 0} red := color.RGBA{255, 0, 0, 0} - + scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥 + logger.Info("width:",img.Width,"--鐢诲浘姣斾緥锛�",scale) // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘 for _,result := range results { polygonIds := strings.Split(result.AlarmPolygon,",") - logger.Info("-----------------------鐪嬬湅鎶ヨ鍖哄煙id锛�",polygonIds) - for i := 0; i < len(polygonIds)-1; i++ { + for i := 0; i < len(polygonIds); i++ { polygon := getPolygonById(polygonIds[i],cameraId) - if polygon.Polygon != "[]" { - DrawAPolygon(&rook,polygon.Polygon,yellow) + if polygon.Polygon != "[]" && polygon.Polygon != ""{ + DrawAPolygon(&rook,polygon.Polygon,yellow,scale) } } } @@ -180,6 +181,29 @@ for _,result := range results { for _,rect := range result.Location { gocv.Rectangle(&rook, image.Rect(int(rect.X), int(rect.Y), int(rect.X+rect.Width), int(rect.Y+rect.Height)), red, 1) + } + } + //return nil,nil + maps,err0 = UploadFromMat(url,rook) + return +} + +func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []structure.FaceResult,url string) (maps map[string]interface{}, err0 error) { + + rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data) + //rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor) + defer rook.Close() + + yellow := color.RGBA{255, 255, 0, 0} + scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥 + // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘 + for _,result := range results { + polygonIds := strings.Split(result.AlarmPolygon,",") + for i := 0; i < len(polygonIds); i++ { + polygon := getPolygonById(polygonIds[i],cameraId) + if polygon.Polygon != "[]" && polygon.Polygon != ""{ + DrawAPolygon(&rook,polygon.Polygon,yellow,scale) + } } } //return nil,nil @@ -215,20 +239,20 @@ var cameraPolygons []protomsg.CameraPolygon cameraPolygons = cache.GetPolygonsByCameraId(cameraId) for _, polygon := range cameraPolygons { - if polygon.Id == polygonId { + if strings.Contains(polygonId,polygon.Id) { return polygon } } return protomsg.CameraPolygon{} } // 鍦ㄥ浘涓婄敾涓�涓 -func DrawAPolygon(rook *gocv.Mat,polygonString string, color color.RGBA) { +func DrawAPolygon(rook *gocv.Mat,polygonString string, color color.RGBA,scale float64) { points := ruleserver.Json2points(polygonString) for index := 0; index < len(points); index++ { if index == len(points)-1 { // 闂悎鍥惧舰 - gocv.Line(rook, image.Pt(int(points[index].X*1.33), int(points[index].Y*1.33)), image.Pt(int(points[0].X*1.33), int(points[0].Y*1.33)), color, 2) + gocv.Line(rook, image.Pt(int(points[index].X * scale), int(points[index].Y * scale)), image.Pt(int(points[0].X * scale), int(points[0].Y * scale)), color, 2) } else { - gocv.Line(rook, image.Pt(int(points[index].X*1.33), int(points[index].Y*1.33)), image.Pt(int(points[index+1].X*1.33), int(points[index+1].Y*1.33)), color, 2) + gocv.Line(rook, image.Pt(int(points[index].X * scale), int(points[index].Y * scale)), image.Pt(int(points[index+1].X * scale), int(points[index+1].Y * scale)), color, 2) } } } diff --git a/util/simpleCV_test.go b/util/simpleCV_test.go index 4f8f7c8..04d62ce 100644 --- a/util/simpleCV_test.go +++ b/util/simpleCV_test.go @@ -5,9 +5,9 @@ ) func TestDrawPolygonOnImage(t *testing.T) { - resp,err := DrawPolygonOnImage() - if err != nil { - t.Error("鐢绘鎴栬�呬笂浼犳湁闂") - } - t.Log("------=============",resp) + //resp,err := DrawPolygonOnImage() + //if err != nil { + // t.Error("鐢绘鎴栬�呬笂浼犳湁闂") + //} + //t.Log("------=============",resp) } \ No newline at end of file diff --git a/util/upload.go b/util/upload.go index 0407f53..e864d53 100644 --- a/util/upload.go +++ b/util/upload.go @@ -10,7 +10,7 @@ "log" "mime/multipart" "net/http" - "ruleprocess/logger" + "basic.com/valib/logger.git" "time" "gocv.io/x/gocv" ) -- Gitblit v1.8.0