Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
V
VideoManager
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangjinjing
VideoManager
Commits
fb73cb9a
Commit
fb73cb9a
authored
May 17, 2021
by
zhouts
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
告警展示
parent
04239193
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
480 additions
and
181 deletions
+480
-181
src/main/java/com/cx/cn/cxquartz/config/ScheduleTaskConfig.java
...in/java/com/cx/cn/cxquartz/config/ScheduleTaskConfig.java
+34
-0
src/main/java/com/cx/cn/cxquartz/controller/ExtController.java
...ain/java/com/cx/cn/cxquartz/controller/ExtController.java
+134
-76
src/main/java/com/cx/cn/cxquartz/controller/IndexController.java
...n/java/com/cx/cn/cxquartz/controller/IndexController.java
+1
-1
src/main/java/com/cx/cn/cxquartz/dao/CodeMapper.java
src/main/java/com/cx/cn/cxquartz/dao/CodeMapper.java
+17
-0
src/main/java/com/cx/cn/cxquartz/dao/QuartzTaskInformationsMapper.java
.../com/cx/cn/cxquartz/dao/QuartzTaskInformationsMapper.java
+2
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/CodeService.java
...n/java/com/cx/cn/cxquartz/service/quartz/CodeService.java
+15
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/FtpService.java
...in/java/com/cx/cn/cxquartz/service/quartz/FtpService.java
+5
-5
src/main/java/com/cx/cn/cxquartz/service/quartz/QuartzService.java
...java/com/cx/cn/cxquartz/service/quartz/QuartzService.java
+4
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/QuartzTaskInformationsService.java
...xquartz/service/quartz/QuartzTaskInformationsService.java
+3
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/CodeServiceImpl.java
...m/cx/cn/cxquartz/service/quartz/impl/CodeServiceImpl.java
+26
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/QuartzServiceImpl.java
...cx/cn/cxquartz/service/quartz/impl/QuartzServiceImpl.java
+6
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/QuartzTaskInformationsServiceImpl.java
...ervice/quartz/impl/QuartzTaskInformationsServiceImpl.java
+7
-1
src/main/java/com/cx/cn/cxquartz/util/FTPUtil.java
src/main/java/com/cx/cn/cxquartz/util/FTPUtil.java
+0
-2
src/main/java/com/cx/cn/cxquartz/util/FileTransferManager.java
...ain/java/com/cx/cn/cxquartz/util/FileTransferManager.java
+2
-1
src/main/java/com/cx/cn/cxquartz/vo/Code.java
src/main/java/com/cx/cn/cxquartz/vo/Code.java
+88
-0
src/main/java/com/cx/cn/cxquartz/vo/TraffpictureParam.java
src/main/java/com/cx/cn/cxquartz/vo/TraffpictureParam.java
+3
-3
src/main/resources/mapper/CodeMapper.xml
src/main/resources/mapper/CodeMapper.xml
+20
-0
src/main/resources/mapper/QuartzTaskInformationsMapper.xml
src/main/resources/mapper/QuartzTaskInformationsMapper.xml
+4
-1
src/main/resources/templates/updatetask.html
src/main/resources/templates/updatetask.html
+109
-91
No files found.
src/main/java/com/cx/cn/cxquartz/config/ScheduleTaskConfig.java
0 → 100644
View file @
fb73cb9a
package
com
.
cx
.
cn
.
cxquartz
.
config
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
java.util.Calendar
;
@Configuration
@EnableScheduling
public
class
ScheduleTaskConfig
{
/***
* 每隔20分钟执行一遍判断rtsp 是否变换
*/
@Scheduled
(
cron
=
"0 0 2 * * ? "
)
private
void
statis
()
{
}
// @Scheduled(cron = "0 30/5 6-19 * * ?")//每隔5分钟统计当天目前为止的数据
// private void statistoday() {
// //判断是否为空表
// //执行查询存在更新,不存在新增
// log.info("每隔5分钟");
// Integer result= traffFlowService.insertOrUpdatevehicleTodaystatistic();
// log.info("today"+result);
//
// }
}
src/main/java/com/cx/cn/cxquartz/controller/ExtController.java
View file @
fb73cb9a
...
...
@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import
com.cx.cn.cxquartz.bean.PatrolCtrlAlarm
;
import
com.cx.cn.cxquartz.bean.PatrolCtrlRecord
;
import
com.cx.cn.cxquartz.bean.PictureTime
;
import
com.cx.cn.cxquartz.bean.QuartzTaskInformations
;
import
com.cx.cn.cxquartz.job.WebSocket
;
import
com.cx.cn.cxquartz.service.quartz.*
;
import
com.cx.cn.cxquartz.util.*
;
...
...
@@ -63,6 +64,9 @@ public class ExtController {
@Value
(
"${file.recogurl}"
)
private
String
recogurl
;
@Value
(
"${file.getrtspbyurl}"
)
private
String
getrtspbyurl
;
@Autowired
private
RestTemplate
restTemplate
;
...
...
@@ -97,6 +101,9 @@ public class ExtController {
@Autowired
WebSocket
webSocket
;
@Autowired
CodeService
codeservice
;
private
static
CompletionService
<
PictureResult
>
threadService
=
new
ExecutorCompletionService
<
PictureResult
>(
ThreadPoolUtil
.
getPool
());
@RequestMapping
(
value
=
"/patrolCtrlRecord"
,
method
=
RequestMethod
.
POST
)
...
...
@@ -195,82 +202,81 @@ public class ExtController {
}
@RequestMapping
(
value
=
"/getRTSP/{photonum}"
,
method
=
RequestMethod
.
POST
)
public
String
getrtsp
(
HttpServletRequest
request
,
@RequestBody
String
rtspValue
,
public
String
getrtsp
(
@RequestBody
String
rtspValue
,
@PathVariable
(
"photonum"
)
Integer
photonum
)
{
//根据判断监控是否存在
List
<
Sbtdspsr
>
sbtdspsrlist
=
sbtdspsrService
.
selectByRtsp
(
rtspValue
);
if
(
sbtdspsrlist
.
size
()
==
0
)
{
//可能rtsp地址已经变换,重新查询rtsp 地址
String
[]
codearray
=
rtspValue
.
split
(
"\\?"
)[
0
].
split
(
"/"
);
if
(
codearray
.
length
>
3
)
{
String
devicecode
=
codearray
[
3
].
replace
(
"_1"
,
""
);
Map
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"deviceCode"
,
devicecode
);
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
getForEntity
(
"http://212.129.142.17:8281/gh/device/test?deviceCode={deviceCode}"
,
String
.
class
,
map
);
// ResponseEntity<String> exchange = restTemplate.exchange(getrtspbyurl + "?deviceCode={deviceCode}",
// HttpMethod.GET, null, String.class, map);
JSONObject
json
=
JSONObject
.
parseObject
(
responseEntity
.
getBody
());
if
(
null
!=
json
.
getString
(
"code"
)
&&
json
.
getString
(
"code"
).
equals
(
"0"
))
{
//返回rtsp 地址
if
(
null
!=
json
.
get
(
"obj"
)
&&
!
""
.
equals
(
json
.
get
(
"obj"
)))
{
//更新sbtdspsr 地址
int
result
=
sbtdspsrService
.
updateRecogByRtsp
(
String
.
valueOf
(
json
.
get
(
"obj"
)),
devicecode
);
if
(
result
>
0
)
{
logger
.
info
(
"更新rtsp success"
);
}
else
{
logger
.
info
(
"设备"
+
devicecode
+
"不存在"
);
return
ResultUtil
.
success
();
}
}
}
sbtdspsrlist
=
sbtdspsrService
.
selectByRtsp
(
String
.
valueOf
(
json
.
get
(
"obj"
)));
}
//尝试抽取第一张图片
List
<
Sbtdspsr
>
sbtdspsrlist
=
new
ArrayList
<>();
List
<
String
>
imgUrls
=
new
ArrayList
<>();
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON_UTF8
);
Map
<
String
,
Object
>
maps
=
new
HashMap
<
String
,
Object
>();
maps
.
put
(
"rtspvalue"
,
rtspValue
);
maps
.
put
(
"refresh"
,
1
);
HttpEntity
<
String
>
formEntity
=
new
HttpEntity
<>(
null
,
headers
);
try
{
ResponseEntity
<
String
>
exchange
=
restTemplate
.
exchange
(
rtspurl
+
"?url={rtspvalue}&refresh={refresh}"
,
HttpMethod
.
GET
,
formEntity
,
String
.
class
,
maps
);
String
body
=
exchange
.
getBody
();
if
(
null
==
body
||
""
.
equals
(
body
)){
//rtsp地址可能改变,重新获取
rtspValue
=
getnewRtspVlue
(
rtspValue
);
}
else
{
rtspValue
=
getnewRtspVlue
(
rtspValue
);
JSONObject
json
=
JSONObject
.
parseObject
(
exchange
.
getBody
());
imgUrls
.
add
(
json
.
getString
(
"url"
));
}
if
(
sbtdspsrlist
.
size
()
==
0
)
{
ResultUtil
.
success
();
}
else
{
try
{
}
catch
(
Exception
ex
)
{
//rtsp地址可能改变,重新获取
rtspValue
=
getnewRtspVlue
(
rtspValue
);
}
sbtdspsrlist
=
sbtdspsrService
.
selectByRtsp
(
rtspValue
);
if
(
sbtdspsrlist
.
size
()
==
0
)
{
ResultUtil
.
success
();
}
else
{
try
{
Sbtdspsr
sbtdspsr
=
sbtdspsrlist
.
get
(
0
);
//根据rtsp 进行图片获取及存储
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON_UTF8
);
Map
<
String
,
Object
>
maps
=
new
HashMap
<
String
,
Object
>();
maps
.
put
(
"rtspvalue"
,
rtspValue
);
maps
.
put
(
"refresh"
,
1
);
HttpEntity
<
String
>
formEntity
=
new
HttpEntity
<
String
>(
null
,
headers
);
TraffAlarmRecord
record
=
new
TraffAlarmRecord
();
Map
<
String
,
Object
>
transferRecordMap
=
new
HashMap
<
String
,
Object
>();
List
<
String
>
imgUrls
=
new
ArrayList
<>();
Map
<
String
,
Object
>
transferRecordMap
=
new
HashMap
<>();
TraffAlarmRecord
traffAlarmRecord
=
new
TraffAlarmRecord
();
traffAlarmRecord
.
setFdid
(
sbtdspsr
.
getSbbh
());
traffAlarmRecord
.
setChannelid
(
Integer
.
parseInt
(
String
.
valueOf
(
sbtdspsr
.
getTdbh
())));
traffAlarmRecord
.
setAreaid
(
Long
.
parseLong
(
sbtdspsr
.
getXzbh
()));
for
(
int
i
=
0
;
i
<
photonum
;
i
++)
{
//photonum张图片,最多5张
int
i
=
0
;
if
(
imgUrls
.
size
()>
0
)
{
i
=
1
;
}
while
(
i
<
photonum
)
{
i
++;
//第一张判断是否已经抽完图片,最多5张
if
(
i
>
4
)
{
break
;
}
ResponseEntity
<
String
>
exchange
=
restTemplate
.
exchange
(
rtspurl
+
"?url={rtspvalue}&refresh={refresh}"
,
HttpMethod
.
GET
,
formEntity
,
String
.
class
,
maps
);
String
body
=
exchange
.
getBody
();
JSONObject
json
=
JSONObject
.
parseObject
(
exchange
.
getBody
());
if
(
null
!=
json
.
getString
(
"ret"
)
&&
json
.
getString
(
"ret"
).
equals
(
"0"
))
{
//获得图片地址
imgUrls
.
add
(
json
.
getString
(
"url"
));
if
(
null
!=
exchange
.
getBody
()||
!
""
.
equals
(
exchange
.
getBody
()))
{
JSONObject
json
=
JSONObject
.
parseObject
(
exchange
.
getBody
());
if
(
null
!=
json
.
getString
(
"ret"
)
&&
json
.
getString
(
"ret"
).
equals
(
"0"
))
{
//获得图片地址
imgUrls
.
add
(
json
.
getString
(
"url"
));
}
}
}
traffAlarmRecord
.
setCreatetime
(
new
Date
());
traffAlarmRecord
.
setPushstatus
(
9
);
traffAlarmRecord
.
setCheckstatus
(
9
);
//免审
traffAlarmRecord
.
setProcessstatus
(
"-2"
);
//未提取特征
//免审
traffAlarmRecord
.
setCheckstatus
(
9
);
//未提取特征
traffAlarmRecord
.
setProcessstatus
(
"-2"
);
//存储到ftp 上去
for
(
int
i
=
0
;
i
<
imgUrls
.
size
();
i
++)
{
TraffAlarmRecordFromImgEnum
.
valueOf
(
"IMG"
+
i
).
setImg
(
traffAlarmRecord
,
imgUrls
.
get
(
i
));
for
(
int
k
=
0
;
k
<
imgUrls
.
size
();
k
++)
{
TraffAlarmRecordFromImgEnum
.
valueOf
(
"IMG"
+
k
).
setImg
(
traffAlarmRecord
,
imgUrls
.
get
(
k
));
}
String
basepath
=
"gstraff/"
+
traffAlarmRecord
.
getFdid
()
+
(
traffAlarmRecord
.
getChannelid
()
<
10
?
"0"
+
traffAlarmRecord
.
getChannelid
()
:
traffAlarmRecord
.
getChannelid
())
+
"/"
+
DateUtils
.
formatCurrDayNoSign
();
Ftp
ftp
=
ftpService
.
reloadFtp
();
//入表
Long
recordid
=
Long
.
parseLong
(
String
.
valueOf
(
traffAlarmRecordService
.
inserTraffAlarmRecord
(
traffAlarmRecord
)));
FileTransferManager
.
fetchUrlsFromRecord
(
traffAlarmRecord
,
transferRecordMap
);
...
...
@@ -287,12 +293,42 @@ public class ExtController {
traffAlarmRecordService
.
updateTraffAlarmRecordUrl
(
traffAlarmRecord
);
return
ResultUtil
.
success
();
}
catch
(
Exception
e
){
logger
.
error
(
"ext/getRTSP
-->
"
+
e
.
toString
());
logger
.
error
(
"ext/getRTSP
r-->error
"
+
e
.
toString
());
}
}
return
ResultUtil
.
success
();
}
public
String
getnewRtspVlue
(
String
rtspValue
){
String
rtspnewvalue
=
""
;
String
[]
codearray
=
rtspValue
.
split
(
"\\?"
)[
0
].
split
(
"/"
);
if
(
codearray
.
length
>
3
)
{
String
devicecode
=
codearray
[
3
].
replace
(
"_1"
,
""
);
Map
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"deviceCode"
,
devicecode
);
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
getForEntity
(
getrtspbyurl
+
"?deviceCode={deviceCode}"
,
String
.
class
,
map
);
JSONObject
json
=
JSONObject
.
parseObject
(
responseEntity
.
getBody
());
if
(
null
!=
json
.
getString
(
"code"
)
&&
json
.
getString
(
"code"
).
equals
(
"0"
))
{
//返回rtsp 地址
if
(
null
!=
json
.
get
(
"obj"
)
&&
!
""
.
equals
(
json
.
get
(
"obj"
)))
{
rtspnewvalue
=
String
.
valueOf
(
json
.
get
(
"obj"
));
//更新sbtdspsr 地址
int
result
=
sbtdspsrService
.
updateRecogByRtsp
(
rtspnewvalue
,
devicecode
);
if
(
result
>
0
)
{
logger
.
info
(
"更新rtsp success"
);
//更新task rtsp 地址
map
.
clear
();
map
.
put
(
"nrtsp"
,
rtspnewvalue
);
map
.
put
(
"ortsp"
,
rtspValue
);
quartzService
.
UpdateExecuteParam
(
map
);
}
else
{
logger
.
info
(
"设备"
+
devicecode
+
"不存在"
);
}
}
}
}
return
rtspValue
;
}
@RequestMapping
(
value
=
"/getRecog"
,
method
=
RequestMethod
.
POST
)
public
String
getRecog
(
HttpServletRequest
request
,
@RequestBody
String
rtspValue
)
{
//根据判断监控是否存在,该监控检测的事件是什么
...
...
@@ -300,7 +336,8 @@ public class ExtController {
String
model
=
"1"
;
String
videoid
=
""
;
String
recordtype
=
"1"
;
Long
[]
roiarray
=
new
Long
[
4
];
//图片框选出来的范围
//图片框选出来的范围
Long
[]
roiarray
=
new
Long
[
4
];
if
(
null
!=
mapList
&&
!
mapList
.
equals
(
""
)
&&
mapList
.
size
()>
0
)
{
...
...
@@ -334,6 +371,8 @@ public class ExtController {
}
}
//查询该监控下面还没有经过分析的数据
String
basepath
=
"gstraff/"
+
videoid
+
"/"
+
DateUtils
.
formatCurrDayNoSign
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"sbbh"
,
videoid
.
split
(
"_"
)[
0
]);
map
.
put
(
"tdbh"
,
videoid
.
split
(
"_"
)[
1
]);
...
...
@@ -354,9 +393,10 @@ public class ExtController {
GoalStructureParam
param
=
FileTransferManager
.
getGoalStructureParam
(
count
,
roiarray
,
Integer
.
parseInt
(
model
==
null
?
"1"
:
""
.
equals
(
model
)
?
"1"
:
model
),
base64Encoder
,
transferRecord
);
// if (param.getImageList().size() < 1) {
// continue;
// }
if
(
param
.
getImageList
().
size
()
<
1
)
{
logger
.
info
(
" no imagelist "
);
continue
;
}
requestEntity
=
new
HttpEntity
<>(
JSONObject
.
toJSONString
(
param
),
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
recogurl
,
HttpMethod
.
POST
,
requestEntity
,
String
.
class
);
String
body
=
response
.
getBody
();
...
...
@@ -367,23 +407,36 @@ public class ExtController {
//获得 type
//更新 recordalarm 为一分析
traffAlarmRecordService
.
updateTraffAlarmRecordProcess
(
transferRecord
);
if
(
objectList
.
size
()<
1
){
logger
.
info
(
" no picturedata "
);
continue
;
}
//根据结构化统计查询是否超过密度,超过则预警
Code
code
=
codeservice
.
selectalarmNum
(
recordtype
);
//判断是否统计结构化数据
if
(
recordtype
.
equals
(
"6"
)||
recordtype
.
equals
(
"2"
))
//结构化统计
if
((
"6"
.
equals
(
recordtype
)||
"2"
.
equals
(
recordtype
)))
{
TraffpictureParam
traffpictureParam
=
new
TraffpictureParam
();
setTraffpictureParam
(
recordtype
,
base64Encoder
,
transferRecord
,
traffpictureParam
);
traffpictureParam
.
setTargetnum
(
objectList
.
size
());
traffPictureService
.
updateTraffpicture
(
traffpictureParam
);
WebSocket
.
GroupSending
(
JSONObject
.
toJSONString
(
traffpictureParam
));
if
(
null
!=
code
&&
null
!=
code
.
getAlarmnum
()&&
code
.
getAlarmnum
()>
objectList
.
size
())
{
TraffpictureParam
traffpictureParam
=
new
TraffpictureParam
();
setTraffpictureParam
(
recordtype
,
base64Encoder
,
transferRecord
,
traffpictureParam
);
traffpictureParam
.
setTargetnum
(
objectList
.
size
());
//超过则预警
traffpictureParam
.
setRecordtype
(
recordtype
);
//图片重叠?
traffpictureParam
.
setImagedata
(
transferRecord
.
getImg1path
());
traffPictureService
.
updateTraffpicture
(
traffpictureParam
);
WebSocket
.
GroupSending
(
JSONObject
.
toJSONString
(
traffpictureParam
));
}
}
else
{
for
(
TraffpictureParam
traffpictureParam
:
objectList
)
{
//根据imageid 获得 base64图片
JSONObject
metadata
=
JSONObject
.
parseObject
(
String
.
valueOf
(
traffpictureParam
.
getMetadata
()));
if
(
null
!=
metadata
&&
metadata
.
get
(
"Type"
).
equals
(
model
))
{
//规定区域内出现告警对象
if
(
null
!=
metadata
&&
metadata
.
get
(
"Type"
).
equals
(
model
))
{
//规定区域内出现告警对象
setTraffpictureParam
(
recordtype
,
base64Encoder
,
transferRecord
,
traffpictureParam
);
if
(
metadata
.
get
(
"Type"
).
equals
(
"1"
))
//行人
if
(
"1"
.
equals
(
metadata
.
get
(
"Type"
)))
{
//规定范围内检测到人
Pedestrian
meta
=
JSON
.
toJavaObject
(
metadata
,
Pedestrian
.
class
);
...
...
@@ -395,8 +448,9 @@ public class ExtController {
traffpictureParam
.
setObjw
(
meta
.
getObjectBoundingBox
().
getW
());
traffpictureParam
.
setObjh
(
meta
.
getObjectBoundingBox
().
getH
());
}
else
if
(
null
!=
metadata
&&
metadata
.
get
(
"Type"
).
equals
(
"2"
))
//车辆
}
else
if
(
null
!=
metadata
&&
"2"
.
equals
(
metadata
.
get
(
"Type"
)))
{
//车辆
Traffic
meta
=
JSON
.
toJavaObject
(
metadata
,
Traffic
.
class
);
meta
.
setId
(
traffpictureParam
.
getId
());
//新增到车辆详情表
...
...
@@ -407,7 +461,7 @@ public class ExtController {
traffpictureParam
.
setObjw
(
meta
.
getObjectBoundingBox
().
getW
());
traffpictureParam
.
setObjh
(
meta
.
getObjectBoundingBox
().
getH
());
}
}
else
if
(
null
!=
metadata
&&
metadata
.
get
(
"Type"
).
equals
(
"3"
))
{
}
else
if
(
null
!=
metadata
&&
"3"
.
equals
(
metadata
.
get
(
"Type"
)
))
{
Face
meta
=
JSON
.
toJavaObject
(
metadata
,
Face
.
class
);
meta
.
setId
(
traffpictureParam
.
getId
());
faceService
.
insertFace
(
meta
);
...
...
@@ -416,7 +470,7 @@ public class ExtController {
traffpictureParam
.
setObjw
(
meta
.
getFaceBoundingBox
().
getW
());
traffpictureParam
.
setObjh
(
meta
.
getFaceBoundingBox
().
getH
());
//人骑车
}
else
if
(
null
!=
metadata
&&
metadata
.
get
(
"Type"
).
equals
(
"4"
))
}
else
if
(
null
!=
metadata
&&
"4"
.
equals
(
metadata
.
get
(
"Type"
)
))
{
PeopleRideBicyc
meta
=
JSON
.
toJavaObject
(
metadata
,
PeopleRideBicyc
.
class
);
meta
.
setId
(
traffpictureParam
.
getId
());
...
...
@@ -427,16 +481,20 @@ public class ExtController {
traffpictureParam
.
setObjh
(
meta
.
getObjectBoundingBox
().
getH
());
}
//更新 traffpicture特征值
try
{
ByteArrayInputStream
bais
=
new
ByteArrayInputStream
(
base64Decoder
.
decodeBuffer
(
traffpictureParam
.
getImagedata
()));
BufferedImage
image
=
ImageIO
.
read
(
bais
);
Graphics
g
=
image
.
getGraphics
();
g
.
setColor
(
Color
.
GREEN
);
//画笔颜色
g
.
setColor
(
Color
.
GREEN
);
g
.
drawRect
(
traffpictureParam
.
getObjx
(),
traffpictureParam
.
getObjy
(),
traffpictureParam
.
getObjw
(),
traffpictureParam
.
getObjh
());
ByteArrayOutputStream
stream
=
new
ByteArrayOutputStream
();
ImageIO
.
write
(
image
,
"png"
,
stream
);
traffpictureParam
.
setImagedata
(
new
String
(
Base64
.
getEncoder
().
encode
(
stream
.
toByteArray
())));
//上传ftp
Ftp
ftp
=
ftpService
.
reloadFtp
();
String
ftputl
=
FTPUtil
.
getFtpUrl
(
ftp
)
+
basepath
+
"/"
+
traffpictureParam
.
getId
()+
"/imgdata.png"
;
traffpictureParam
.
setImagedata
(
ftputl
);
FTPUtil
.
uploadFile
(
ftp
,
basepath
+
"/"
+
traffpictureParam
.
getId
(),
"imgdata.png"
,
base64Encoder
.
encode
(
stream
.
toByteArray
()));
}
catch
(
Exception
ex
)
{
logger
.
info
(
"base64画框异常:"
+
ex
.
toString
());
}
...
...
@@ -462,9 +520,9 @@ public class ExtController {
private
void
setTraffpictureParam
(
String
recordtype
,
BASE64Encoder
base64Encoder
,
TraffAlarmRecord
transferRecord
,
TraffpictureParam
traffpictureParam
)
{
traffpictureParam
.
setAreaid
(
transferRecord
.
getAreaid
());
traffpictureParam
.
setFdid
(
transferRecord
.
getFdid
());
traffpictureParam
.
setChannelid
(
transferRecord
.
getChannelid
());
traffpictureParam
.
setRecordid
(
transferRecord
.
getRecordid
());
traffpictureParam
.
setProcessstatus
(
"0"
);
traffpictureParam
.
setChannelid
(
transferRecord
.
getChannelid
());
traffpictureParam
.
setCreatetime
(
new
Date
());
//获得imgid 对应的 base64
String
imgftpurl
=
traffPictureService
.
queryimgpath
(
traffpictureParam
);
Ftp
ftp
=
ftpService
.
reloadFtp
();
...
...
src/main/java/com/cx/cn/cxquartz/controller/IndexController.java
View file @
fb73cb9a
...
...
@@ -60,7 +60,7 @@ public class IndexController {
@PostMapping
(
"/images/recog"
)
@ResponseBody
public
String
images
(
@RequestBody
GoalStructureParam
param
)
{
return
"{\"ret\":\"200\",\"error_msg\":\"OK\",\"ObjectList\":[{\"ImageID\":\"1\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"Angle\":\"128\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"UpperBoundingBox\":{\"x\":34,\"y\":123,\"w\":232,\"h\":263},\"LowerBoundingBox\":{\"x\":74,\"y\":309,\"w\":176,\"h\":408},\"CoatLength\":\"2\",\"CoatTexture\":\"1\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"TrousersLength\":\"1\",\"TrousersTexture\":\"1\",\"TrousersColor\":[\"5\"],\"TrousersColorNums\":\"1\",\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasGlasses\":\"0\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"0\",\"HasUmbrella\":\"0\",\"HasTrolley\":\"-1\",\"HasLuggage\":\"-1\",\"LuggageColor\":[],\"LuggageColorNums\":\"0\",\"HasKnife\":\"-1\",\"ObjectBoundingBox\":{\"x\":26,\"y\":13,\"w\":256,\"h\":708},\"TrafficViolation\":\"-1\",\"Type\":\"
1\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"3\",\"ObjectID\":1,\"Metadata\":{\"Angle\":\"128\",\"VehicleClass\":\"1\",\"VehicleColor\":[\"9\"],\"VehicleColorNums\":\"1\",\"VehicleBrand\":\"\\u96ea\\u4f5b\\u5170-\\u79d1\\u9c81\\u5179-2009_2013\",\"VehicleMainBrandName\":\"\\u96ea\\u4f5b\\u5170\",\"VehicleSubBrandName\":\"\\u79d1\\u9c81\\u5179\",\"VehicleYearName\":\"2009_2013\",\"HasPlate\":\"1\",\"PlateClass\":\"1\",\"PlateColor\":\"2\",\"PlateNo\":\"\\u6d59AJ079B\",\"PlateNeatness\":\"2\",\"Sunvisor\":\"0\",\"Paper\":\"0\",\"Decoration\":\"0\",\"Drop\":\"1\",\"Tag\":\"1\",\"SafetyBelt\":{\"MainDriver\":\"-1\",\"CoDriver\":\"-1\"},\"HasCall\":\"-1\",\"HasSkylight\":\"0\",\"HasBaggage\":\"0\",\"HasAerial\":\"0\",\"HasCrash\":\"-1\",\"HasDanger\":\"0\",\"HighwayTollVehicles\":\"1\",\"ObjectBoundingBox\":{\"x\":41,\"y\":40,\"w\":894,\"h\":717},\"TrafficViolation\":\"-1\",\"Type\":\"2\"},\"Feature\":\"AAAAAAAAAAAAAAAPAAAAAAAKABQAAAAAAAAAAAAAAAAhAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAEwELAAAAAAAAAAAAAAAAAAAAAAAFCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAABIAAAAAABMAAAEAAAAAAAAAAAAAAAAAABAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAHgAAAAAAAAAAAAAAAgAAAAAHAAATAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAcAAAAAB8AAAAAAAAAAAAAAAAAAAAAABoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAMDgAAAAAAAB0AAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAA=\",\"BucketID\":76,\"BucketIDList\":[76,91,82,57,36,51,75,55,71,43,84,63,8,98,83,65,90,60,35,3,37,39,74,2,12,9,1,20,79,32,95,49,33,58,42,66,38,69,45,56,59,0,87,19,41,34,21,14,13,6,4,26,68,96,72,7,85,29,48,40,88,99,23,46,27,18,77,78,11,97,17,50,15,61,16,31,80,44,52,25,10,86,92,5,54,53,73,89,94,93,70,62,30,47,64,22,28,67,81,24],\"FaceFeature\":\"\",\"FaceBucketID\":-1,\"FaceBucketIDList\":[],\"FaceQuality\":\"0.000000\",\"FaceYaw\":\"0.000000\",\"FacePitch\":\"0.000000\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.000000\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"4\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"16\",\"Angle\":\"128\",\"BikeClass\":\"1\",\"SocialAttribute\":\"1\",\"Enterprise\":\"-1\",\"FaceBoundingBox\":{\"x\":145,\"y\":65,\"w\":54,\"h\":66},\"CoatLength\":\"2\",\"CoatTexture\":\"5\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"HelmetColor\":\"-1\",\"HasHelmet\":\"0\",\"HasGlasses\":\"1\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"-1\",\"HasUmbrella\":\"0\",\"HasPlate\":\"-1\",\"PlateNo\":\"-1\",\"HasPassenger\":\"1\",\"ObjectBoundingBox\":{\"x\":54,\"y\":16,\"w\":276,\"h\":635},\"TrafficViolation\":\"-1\",\"Type\":\"4\"},\"Feature\":\"UVNURgUA/wACAf/3AfwEA/kC/AMAAwAEAQACAPv+AAAB/wMHAgEA/wAGAAj/+AD7APwCAwkD9wsAAP4CBvn7/wz5A/wBBP8D/QICCAUCBv/7AgABAv7+AAH9AAUC/AX/AvsC/P4CAv39BAMA/gAAAAIA/wT6/v77A/YEAPoB//sG//7+/wD+/QAA/AMAAAQCAvz8/P3/AAH9+gX8/wD8/fr7AQAD//oA+AECAAAFAAH+/QH7/gIHAgYA/vz+AwADAgQCAgAL+wD9BgMGBv8E+/oF/P4H/wMD/gQC/wQH/v/4Agn9BQAC/wAE/P37BP/7AgIA/gj8APv7CAL9/vkABgL7/fz9/AD1BwD7AwAAAwH7AAb7+v4AAwX6/PsDBwMA/wH9AQD8AQP8APz7/vb8APoDAAT8AP0FAwYG/P39/P4B/vkA/f8AAgQBB/0D+wAFBwX4Aff+Bvz2/wEEBAIABQQD/wABAAMA//0AAP/+/wAC9/4AAfz+AAEF/f/6CAD9Bfn/APn9CwP3BAABBAAIAfr8/wP/CQn9BgL+Bf38A/z89gf6AAf9//wABAP9AgT19/4DAQMCAQQDAAABBf76+gEC/Pv9//4E//76AAAACQAA//kE//sDCfsGA/z7AAD7BAMAAAIAAgMA/P0D/wIE/v36//wAAgX8/voCAAT8BAkCAgEBAfwG+gEA/vr++AYAAQL7AAcAAP8BAAH9Af8A+QD+Agj7+wID/AAB+QcD//4ACQMEAvv+AvwBB/r7/gL/+AL7A/78+/4AAP39/QEFAwEA/QECCfz6AfwE/QMAAwD/Av4HAPz/AP4F/ggD+gMH+/UH+wID/wQGBPr2BP8KBAP/+/7//AP2/QT6//4CBAAFBgAFBf4E//v9BgADAAH9/gb4BAQHAAEA/QIB/vsE+/8GAPb7Av79AAD4AP4B+wf+/P4ABf79/wD/+QQA+fkB/voAA/oDAQUDAP79BAkGAAn/AQMB//76APz8BQD9AgEB/Pf6/wcAAwcHAgEA/QH/AP/6A/75BP8E/QD+AgT+AwEF+PkC//37/f79/gAAAQUA+AEEAAX9/wL8AgAFAwAA+v8G+wQA/QEF/wD+BAAGAwABAf0JAgMD+wUGAf39APoA/gQHAAID/AAF//8GA//8/QUC/gEC/vwGAv0BAAD9/ggCAAYBAwL/AQD9/fYD/wIE/f/4BP4AAAD8+wH5Bwb7AAQF+v/0//j9+/v/AP4CAgAA/v4AAP7+Bfv/CwECAQD7CgH5AQEAAQQAAP76APkABQIBBv0JAwABBwD++wD+//35+QPy/v0FAAYC+QD9Avr5CgQIA/35/AADAQH6+AEIAwEEAAMA/AMD+wADAAP///kFBAEBAA==\",\"BucketID\":5,\"BucketIDList\":[5,3,83,30,43,82,55,80,46,51,61,79,97,67,21,91,88,90,99,12,23,0,1,36,47,54,37,27,14,50,16,8,53,25,52,29,18,60,38,98,62,4,15,2,20,22,17,96,65,44,75,59,93,66,31,10,45,48,13,7,57,76,72,77,56,94,81,87,95,6,92,69,74,39,35,26,34,71,41,85,64,49,24,42,73,78,58,63,89,11,86,68,32,28,19,9,40,33,70,84],\"FaceFeature\":\"BQD5+Af/BP4I/AD7AP/9AAcC/QT6/P4HAfr9B/sIBf8O/AD8BwYKCA0AAv77/gAE+gAL/wMA/QD9AAAG/vv8AAP7BvwBAAn4AAf/AQAOAP8A7wIBAv8EAwAFAf/5CPoABQEDBwEFBQb5/fb+AO4G+AAB/wML9PsAA/oHBwYF/Pz7/gUK9QUABgEE+wH8AgL6+gb3AwEAAxL7CwD/DPcFAf30AAPz/QAE/QAABvn9AwD2/wQCAwACAQAKBAUD/v0A/voE//0B+Ab//vkC+vj/AAH7+AL7A/sDAPj7Bvn+/QoGAwEA/v//AP4D+wQDAf8K/QP2BgD5/QD//gEKA/v+BwAAAf3xAf/+/gT9AwP8DADzBw4AAvn//wAE+QH5AQv3C+38/Pf9/QII8gID9wMFCggFAv/9AvsEBvkACP8G9/z9AP/7/fwE+v39DPgAAAAB/fr5A/n8/wIDAAQK/wH+AwAAAvwADQoKAgAFAfsF+vsE//35C/3zCAD9BPsB/wMGB/n5/Pv0+Pb+BPn5/wMKAQAB8fT9Awf++/YAAAICAwUG+wD0+fkBB/0AAAQIBfgEBPkG/wcJAgD7CAv1Avf9AQYAAAEDAPYC+foJ+/78APwD8f4A/gUBB/7///oLAwD/AAUD+/39+PsH+QIF9gMEA/oGAQsMBQkHA/wB+PwCAgA=\",\"FaceBucketID\":82,\"FaceBucketIDList\":[82,45,63,31,16,1,7,98,40,24,65,19,62,48,94,72,92,17,91,52,77,76,85,87,81,21,93,64,37,42,30,78,25,61,9,12,22,2,13,34,4,15,46,3,14,99,90,28,66,29,75,68,80,59,60,88,69,83,36,55,11,44,96,89,10,26,49,50,73,6,53,20,47,86,58,84,27,8,70,43,57,71,97,79,0,67,54,33,23,95,56,5,41,38,51,32,74,39,35,18],\"FaceQuality\":\"0.365118\",\"FaceYaw\":\"0.257412\",\"FacePitch\":\"0.390233\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.475882\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"2\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasMask\":\"1\",\"HasGlasses\":\"0\",\"Type\":\"3
\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1}]}"
;}
return
"{\"ret\":\"200\",\"error_msg\":\"OK\",\"ObjectList\":[{\"ImageID\":\"1\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"Angle\":\"128\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"UpperBoundingBox\":{\"x\":34,\"y\":123,\"w\":232,\"h\":263},\"LowerBoundingBox\":{\"x\":74,\"y\":309,\"w\":176,\"h\":408},\"CoatLength\":\"2\",\"CoatTexture\":\"1\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"TrousersLength\":\"1\",\"TrousersTexture\":\"1\",\"TrousersColor\":[\"5\"],\"TrousersColorNums\":\"1\",\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasGlasses\":\"0\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"0\",\"HasUmbrella\":\"0\",\"HasTrolley\":\"-1\",\"HasLuggage\":\"-1\",\"LuggageColor\":[],\"LuggageColorNums\":\"0\",\"HasKnife\":\"-1\",\"ObjectBoundingBox\":{\"x\":26,\"y\":13,\"w\":256,\"h\":708},\"TrafficViolation\":\"-1\",\"Type\":\"
6\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"3\",\"ObjectID\":1,\"Metadata\":{\"Angle\":\"128\",\"VehicleClass\":\"1\",\"VehicleColor\":[\"9\"],\"VehicleColorNums\":\"1\",\"VehicleBrand\":\"\\u96ea\\u4f5b\\u5170-\\u79d1\\u9c81\\u5179-2009_2013\",\"VehicleMainBrandName\":\"\\u96ea\\u4f5b\\u5170\",\"VehicleSubBrandName\":\"\\u79d1\\u9c81\\u5179\",\"VehicleYearName\":\"2009_2013\",\"HasPlate\":\"1\",\"PlateClass\":\"1\",\"PlateColor\":\"2\",\"PlateNo\":\"\\u6d59AJ079B\",\"PlateNeatness\":\"2\",\"Sunvisor\":\"0\",\"Paper\":\"0\",\"Decoration\":\"0\",\"Drop\":\"1\",\"Tag\":\"1\",\"SafetyBelt\":{\"MainDriver\":\"-1\",\"CoDriver\":\"-1\"},\"HasCall\":\"-1\",\"HasSkylight\":\"0\",\"HasBaggage\":\"0\",\"HasAerial\":\"0\",\"HasCrash\":\"-1\",\"HasDanger\":\"0\",\"HighwayTollVehicles\":\"1\",\"ObjectBoundingBox\":{\"x\":41,\"y\":40,\"w\":894,\"h\":717},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"AAAAAAAAAAAAAAAPAAAAAAAKABQAAAAAAAAAAAAAAAAhAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAEwELAAAAAAAAAAAAAAAAAAAAAAAFCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAABIAAAAAABMAAAEAAAAAAAAAAAAAAAAAABAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAHgAAAAAAAAAAAAAAAgAAAAAHAAATAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAcAAAAAB8AAAAAAAAAAAAAAAAAAAAAABoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAMDgAAAAAAAB0AAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAA=\",\"BucketID\":76,\"BucketIDList\":[76,91,82,57,36,51,75,55,71,43,84,63,8,98,83,65,90,60,35,3,37,39,74,2,12,9,1,20,79,32,95,49,33,58,42,66,38,69,45,56,59,0,87,19,41,34,21,14,13,6,4,26,68,96,72,7,85,29,48,40,88,99,23,46,27,18,77,78,11,97,17,50,15,61,16,31,80,44,52,25,10,86,92,5,54,53,73,89,94,93,70,62,30,47,64,22,28,67,81,24],\"FaceFeature\":\"\",\"FaceBucketID\":-1,\"FaceBucketIDList\":[],\"FaceQuality\":\"0.000000\",\"FaceYaw\":\"0.000000\",\"FacePitch\":\"0.000000\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.000000\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"4\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"16\",\"Angle\":\"128\",\"BikeClass\":\"1\",\"SocialAttribute\":\"1\",\"Enterprise\":\"-1\",\"FaceBoundingBox\":{\"x\":145,\"y\":65,\"w\":54,\"h\":66},\"CoatLength\":\"2\",\"CoatTexture\":\"5\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"HelmetColor\":\"-1\",\"HasHelmet\":\"0\",\"HasGlasses\":\"1\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"-1\",\"HasUmbrella\":\"0\",\"HasPlate\":\"-1\",\"PlateNo\":\"-1\",\"HasPassenger\":\"1\",\"ObjectBoundingBox\":{\"x\":54,\"y\":16,\"w\":276,\"h\":635},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA/wACAf/3AfwEA/kC/AMAAwAEAQACAPv+AAAB/wMHAgEA/wAGAAj/+AD7APwCAwkD9wsAAP4CBvn7/wz5A/wBBP8D/QICCAUCBv/7AgABAv7+AAH9AAUC/AX/AvsC/P4CAv39BAMA/gAAAAIA/wT6/v77A/YEAPoB//sG//7+/wD+/QAA/AMAAAQCAvz8/P3/AAH9+gX8/wD8/fr7AQAD//oA+AECAAAFAAH+/QH7/gIHAgYA/vz+AwADAgQCAgAL+wD9BgMGBv8E+/oF/P4H/wMD/gQC/wQH/v/4Agn9BQAC/wAE/P37BP/7AgIA/gj8APv7CAL9/vkABgL7/fz9/AD1BwD7AwAAAwH7AAb7+v4AAwX6/PsDBwMA/wH9AQD8AQP8APz7/vb8APoDAAT8AP0FAwYG/P39/P4B/vkA/f8AAgQBB/0D+wAFBwX4Aff+Bvz2/wEEBAIABQQD/wABAAMA//0AAP/+/wAC9/4AAfz+AAEF/f/6CAD9Bfn/APn9CwP3BAABBAAIAfr8/wP/CQn9BgL+Bf38A/z89gf6AAf9//wABAP9AgT19/4DAQMCAQQDAAABBf76+gEC/Pv9//4E//76AAAACQAA//kE//sDCfsGA/z7AAD7BAMAAAIAAgMA/P0D/wIE/v36//wAAgX8/voCAAT8BAkCAgEBAfwG+gEA/vr++AYAAQL7AAcAAP8BAAH9Af8A+QD+Agj7+wID/AAB+QcD//4ACQMEAvv+AvwBB/r7/gL/+AL7A/78+/4AAP39/QEFAwEA/QECCfz6AfwE/QMAAwD/Av4HAPz/AP4F/ggD+gMH+/UH+wID/wQGBPr2BP8KBAP/+/7//AP2/QT6//4CBAAFBgAFBf4E//v9BgADAAH9/gb4BAQHAAEA/QIB/vsE+/8GAPb7Av79AAD4AP4B+wf+/P4ABf79/wD/+QQA+fkB/voAA/oDAQUDAP79BAkGAAn/AQMB//76APz8BQD9AgEB/Pf6/wcAAwcHAgEA/QH/AP/6A/75BP8E/QD+AgT+AwEF+PkC//37/f79/gAAAQUA+AEEAAX9/wL8AgAFAwAA+v8G+wQA/QEF/wD+BAAGAwABAf0JAgMD+wUGAf39APoA/gQHAAID/AAF//8GA//8/QUC/gEC/vwGAv0BAAD9/ggCAAYBAwL/AQD9/fYD/wIE/f/4BP4AAAD8+wH5Bwb7AAQF+v/0//j9+/v/AP4CAgAA/v4AAP7+Bfv/CwECAQD7CgH5AQEAAQQAAP76APkABQIBBv0JAwABBwD++wD+//35+QPy/v0FAAYC+QD9Avr5CgQIA/35/AADAQH6+AEIAwEEAAMA/AMD+wADAAP///kFBAEBAA==\",\"BucketID\":5,\"BucketIDList\":[5,3,83,30,43,82,55,80,46,51,61,79,97,67,21,91,88,90,99,12,23,0,1,36,47,54,37,27,14,50,16,8,53,25,52,29,18,60,38,98,62,4,15,2,20,22,17,96,65,44,75,59,93,66,31,10,45,48,13,7,57,76,72,77,56,94,81,87,95,6,92,69,74,39,35,26,34,71,41,85,64,49,24,42,73,78,58,63,89,11,86,68,32,28,19,9,40,33,70,84],\"FaceFeature\":\"BQD5+Af/BP4I/AD7AP/9AAcC/QT6/P4HAfr9B/sIBf8O/AD8BwYKCA0AAv77/gAE+gAL/wMA/QD9AAAG/vv8AAP7BvwBAAn4AAf/AQAOAP8A7wIBAv8EAwAFAf/5CPoABQEDBwEFBQb5/fb+AO4G+AAB/wML9PsAA/oHBwYF/Pz7/gUK9QUABgEE+wH8AgL6+gb3AwEAAxL7CwD/DPcFAf30AAPz/QAE/QAABvn9AwD2/wQCAwACAQAKBAUD/v0A/voE//0B+Ab//vkC+vj/AAH7+AL7A/sDAPj7Bvn+/QoGAwEA/v//AP4D+wQDAf8K/QP2BgD5/QD//gEKA/v+BwAAAf3xAf/+/gT9AwP8DADzBw4AAvn//wAE+QH5AQv3C+38/Pf9/QII8gID9wMFCggFAv/9AvsEBvkACP8G9/z9AP/7/fwE+v39DPgAAAAB/fr5A/n8/wIDAAQK/wH+AwAAAvwADQoKAgAFAfsF+vsE//35C/3zCAD9BPsB/wMGB/n5/Pv0+Pb+BPn5/wMKAQAB8fT9Awf++/YAAAICAwUG+wD0+fkBB/0AAAQIBfgEBPkG/wcJAgD7CAv1Avf9AQYAAAEDAPYC+foJ+/78APwD8f4A/gUBB/7///oLAwD/AAUD+/39+PsH+QIF9gMEA/oGAQsMBQkHA/wB+PwCAgA=\",\"FaceBucketID\":82,\"FaceBucketIDList\":[82,45,63,31,16,1,7,98,40,24,65,19,62,48,94,72,92,17,91,52,77,76,85,87,81,21,93,64,37,42,30,78,25,61,9,12,22,2,13,34,4,15,46,3,14,99,90,28,66,29,75,68,80,59,60,88,69,83,36,55,11,44,96,89,10,26,49,50,73,6,53,20,47,86,58,84,27,8,70,43,57,71,97,79,0,67,54,33,23,95,56,5,41,38,51,32,74,39,35,18],\"FaceQuality\":\"0.365118\",\"FaceYaw\":\"0.257412\",\"FacePitch\":\"0.390233\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.475882\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"2\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasMask\":\"1\",\"HasGlasses\":\"0\",\"Type\":\"6
\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1}]}"
;}
}
\ No newline at end of file
src/main/java/com/cx/cn/cxquartz/dao/CodeMapper.java
0 → 100644
View file @
fb73cb9a
package
com
.
cx
.
cn
.
cxquartz
.
dao
;
import
com.cx.cn.cxquartz.vo.Code
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wjj
* @since 2021-04-29
*/
@Mapper
public
interface
CodeMapper
{
Code
selectalarmNum
(
String
keyid
);
}
src/main/java/com/cx/cn/cxquartz/dao/QuartzTaskInformationsMapper.java
View file @
fb73cb9a
...
...
@@ -41,4 +41,6 @@ public interface QuartzTaskInformationsMapper {
List
<
PatrolCtrlRecord
>
queryCameraCode
(
List
<
String
>
ids
);
List
<
Sbtdspsr
>
selectByRtsp
(
String
rtsp
);
Integer
UpdateExecuteParam
(
Map
map
);
}
src/main/java/com/cx/cn/cxquartz/service/quartz/CodeService.java
0 → 100644
View file @
fb73cb9a
package
com
.
cx
.
cn
.
cxquartz
.
service
.
quartz
;
import
com.cx.cn.cxquartz.vo.Code
;
/**
* <p>
* 服务类
* </p>
*
* @author wjj
* @since 2021-04-29
*/
public
interface
CodeService
{
Code
selectalarmNum
(
String
keyid
);
}
src/main/java/com/cx/cn/cxquartz/service/quartz/FtpService.java
View file @
fb73cb9a
...
...
@@ -15,7 +15,7 @@ import java.util.ArrayList;
import
java.util.List
;
/**
* ftp
ַȡ߷
* ftp
��ַ��ȡ���߷�����
* @author cp
*/
@Service
...
...
@@ -32,26 +32,26 @@ public class FtpService {
try
{
this
.
ftpList
=
getFtpList
(
stringRedisTemplate
.
opsForValue
().
get
(
RedisEnum
.
FTPLIST
.
getValue
()));
}
catch
(
Exception
e
){
log
.
error
(
"ftpList
ȡʧ
:"
+
e
.
toString
());
log
.
error
(
"ftpList
��ȡʧ��
:"
+
e
.
toString
());
}
}
public
Ftp
reloadFtp
()
{
try
{
cacheLoadService
.
loadFtpCache
();
//
cacheLoadService.loadFtpCache();
if
(
null
==
stringRedisTemplate
.
opsForValue
().
get
(
RedisEnum
.
FTPLIST
.
getValue
())){
cacheLoadService
.
loadFtpCache
();
}
ftpList
=
getFtpList
(
stringRedisTemplate
.
opsForValue
().
get
(
RedisEnum
.
FTPLIST
.
getValue
()));
}
catch
(
Exception
e
){
log
.
error
(
"ftpList
ȡʧ
:"
+
e
.
toString
());
log
.
error
(
"ftpList
error
:"
+
e
.
toString
());
}
Long
count
=
null
;
try
{
count
=
stringRedisTemplate
.
opsForValue
().
increment
(
RedisEnum
.
FTPLIST_INDEX
.
getValue
(),
1L
);
}
catch
(
Exception
e
)
{
log
.
error
(
"
ȡredis FtpIndex쳣
"
+
e
.
toString
());
log
.
error
(
"
redis error
"
+
e
.
toString
());
}
if
(
count
==
null
)
{
count
=
0L
;
...
...
src/main/java/com/cx/cn/cxquartz/service/quartz/QuartzService.java
View file @
fb73cb9a
...
...
@@ -6,6 +6,7 @@ import com.cx.cn.cxquartz.vo.QuartzTaskRecordsVo;
import
org.quartz.SchedulerException
;
import
java.util.List
;
import
java.util.Map
;
public
interface
QuartzService
{
String
addTask
(
QuartzTaskInformations
quartzTaskInformations
);
...
...
@@ -16,6 +17,9 @@ public interface QuartzService {
String
updateTask
(
QuartzTaskInformations
quartzTaskInformations
);
Integer
UpdateExecuteParam
(
Map
map
);
String
startJob
(
String
taskNo
)
throws
SchedulerException
;
void
initLoadOnlineTasks
();
...
...
src/main/java/com/cx/cn/cxquartz/service/quartz/QuartzTaskInformationsService.java
View file @
fb73cb9a
...
...
@@ -7,6 +7,7 @@ import com.cx.cn.cxquartz.bean.PictureTime;
import
com.cx.cn.cxquartz.bean.QuartzTaskInformations
;
import
java.util.List
;
import
java.util.Map
;
public
interface
QuartzTaskInformationsService
{
String
insert
(
QuartzTaskInformations
quartzTaskInformations
);
...
...
@@ -17,6 +18,8 @@ public interface QuartzTaskInformationsService {
String
updateTask
(
QuartzTaskInformations
quartzTaskInformations
);
Integer
UpdateExecuteParam
(
Map
map
);
QuartzTaskInformations
getTaskByTaskNo
(
String
taskNo
);
Integer
updateStatusById
(
QuartzTaskInformations
quartzTaskInformations
);
...
...
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/CodeServiceImpl.java
0 → 100644
View file @
fb73cb9a
package
com
.
cx
.
cn
.
cxquartz
.
service
.
quartz
.
impl
;
import
com.cx.cn.cxquartz.dao.CodeMapper
;
import
com.cx.cn.cxquartz.service.quartz.CodeService
;
import
com.cx.cn.cxquartz.vo.Code
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 服务实现类
* </p>
*
* @author wjj
* @since 2021-04-29
*/
@Service
public
class
CodeServiceImpl
implements
CodeService
{
@Autowired
private
CodeMapper
codeMapper
;
@Override
public
Code
selectalarmNum
(
String
keyid
)
{
return
codeMapper
.
selectalarmNum
(
keyid
);
}
}
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/QuartzServiceImpl.java
View file @
fb73cb9a
...
...
@@ -26,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.atomic.AtomicInteger
;
@Service
...
...
@@ -84,6 +85,11 @@ public class QuartzServiceImpl implements QuartzService, InitializingBean {
return
quartzTaskInformationsService
.
updateTask
(
quartzTaskInformations
);
}
@Override
public
Integer
UpdateExecuteParam
(
Map
map
)
{
return
quartzTaskInformationsService
.
UpdateExecuteParam
(
map
);
}
/**
* 启动 or 暂停定时任务
*
...
...
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/QuartzTaskInformationsServiceImpl.java
View file @
fb73cb9a
...
...
@@ -9,7 +9,6 @@ import com.cx.cn.cxquartz.dao.QuartzTaskInformationsMapper;
import
com.cx.cn.cxquartz.service.quartz.QuartzTaskInformationsService
;
import
com.cx.cn.cxquartz.util.ResultEnum
;
import
com.cx.cn.cxquartz.util.ResultUtil
;
import
com.cx.cn.cxquartz.vo.Sbtdspsr
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -77,6 +76,11 @@ public class QuartzTaskInformationsServiceImpl implements QuartzTaskInformations
return
ResultUtil
.
success
(
ResultEnum
.
SUCCESS
.
getCode
(),
ResultEnum
.
SUCCESS
.
getMessage
());
}
@Override
public
Integer
UpdateExecuteParam
(
Map
map
)
{
return
quartzTaskInformationsMapper
.
UpdateExecuteParam
(
map
);
}
@Override
public
QuartzTaskInformations
getTaskByTaskNo
(
String
taskNo
)
{
return
quartzTaskInformationsMapper
.
getTaskByTaskNo
(
taskNo
);
...
...
@@ -111,6 +115,8 @@ public class QuartzTaskInformationsServiceImpl implements QuartzTaskInformations
public
List
<
PictureTime
>
findLastPicTime
()
{
return
quartzTaskInformationsMapper
.
findLastPicTime
();
}
@Override
public
List
<
PatrolCtrlRecord
>
queryCameraCode
(
List
<
String
>
ids
){
return
quartzTaskInformationsMapper
.
queryCameraCode
(
ids
);
...
...
src/main/java/com/cx/cn/cxquartz/util/FTPUtil.java
View file @
fb73cb9a
...
...
@@ -103,12 +103,10 @@ public class FTPUtil {
if
(
inputImg
==
null
)
{
return
false
;
}
//base64����
BASE64Decoder
decoder
=
new
BASE64Decoder
();
byte
[]
b_img
=
decoder
.
decodeBuffer
(
inputImg
);
input
=
new
ByteArrayInputStream
(
b_img
);
ftpClient
=
connectServer
(
ftpUrl
);
//new ByteArrayInputStream
if
(
ftpClient
.
isConnected
())
{
changeWorkingDirectory
(
ftpClient
,
path
);
flag
=
ftpClient
.
storeFile
(
filename
,
input
);
...
...
src/main/java/com/cx/cn/cxquartz/util/FileTransferManager.java
View file @
fb73cb9a
...
...
@@ -22,7 +22,6 @@ public class FileTransferManager {
private
static
CompletionService
<
TransferResult
>
completionService
=
new
ExecutorCompletionService
<
TransferResult
>(
ThreadPoolUtil
.
getPool
());
private
static
CompletionService
<
PictureResult
>
threadService
=
new
ExecutorCompletionService
<
PictureResult
>(
ThreadPoolUtil
.
getPool
());
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ExtController
.
class
);
/**
* @param transferRecord
* @param ftp
...
...
@@ -168,5 +167,7 @@ public class FileTransferManager {
}
}
}
}
src/main/java/com/cx/cn/cxquartz/vo/Code.java
0 → 100644
View file @
fb73cb9a
package
com
.
cx
.
cn
.
cxquartz
.
vo
;
import
java.io.Serializable
;
public
class
Code
implements
Serializable
{
private
String
key
;
private
String
name
;
private
String
type
;
private
String
alarmlevel
;
private
Integer
rectifytime
;
private
Integer
manualchecktime
;
private
Integer
pushchecktime
;
private
Integer
maxnum
;
private
Integer
alarmnum
;
public
String
getKey
()
{
return
key
;
}
public
void
setKey
(
String
key
)
{
this
.
key
=
key
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
public
String
getAlarmlevel
()
{
return
alarmlevel
;
}
public
void
setAlarmlevel
(
String
alarmlevel
)
{
this
.
alarmlevel
=
alarmlevel
;
}
public
Integer
getRectifytime
()
{
return
rectifytime
;
}
public
void
setRectifytime
(
Integer
rectifytime
)
{
this
.
rectifytime
=
rectifytime
;
}
public
Integer
getManualchecktime
()
{
return
manualchecktime
;
}
public
void
setManualchecktime
(
Integer
manualchecktime
)
{
this
.
manualchecktime
=
manualchecktime
;
}
public
Integer
getPushchecktime
()
{
return
pushchecktime
;
}
public
void
setPushchecktime
(
Integer
pushchecktime
)
{
this
.
pushchecktime
=
pushchecktime
;
}
public
Integer
getMaxnum
()
{
return
maxnum
;
}
public
void
setMaxnum
(
Integer
maxnum
)
{
this
.
maxnum
=
maxnum
;
}
public
Integer
getAlarmnum
()
{
return
alarmnum
;
}
public
void
setAlarmnum
(
Integer
alarmnum
)
{
this
.
alarmnum
=
alarmnum
;
}
}
\ No newline at end of file
src/main/java/com/cx/cn/cxquartz/vo/TraffpictureParam.java
View file @
fb73cb9a
...
...
@@ -31,7 +31,7 @@ public class TraffpictureParam extends Traffpicture {
@JsonIgnore
private
Integer
retrycount
;
@JsonIgnore
private
Integer
recordlevel
;
private
String
recordlevel
;
@JsonIgnore
private
Integer
checkstatus
;
@JsonIgnore
...
...
@@ -132,11 +132,11 @@ public class TraffpictureParam extends Traffpicture {
this
.
retrycount
=
retrycount
;
}
public
Integer
getRecordlevel
()
{
public
String
getRecordlevel
()
{
return
recordlevel
;
}
public
void
setRecordlevel
(
Integer
recordlevel
)
{
public
void
setRecordlevel
(
String
recordlevel
)
{
this
.
recordlevel
=
recordlevel
;
}
...
...
src/main/resources/mapper/CodeMapper.xml
0 → 100644
View file @
fb73cb9a
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.cx.cn.cxquartz.dao.CodeMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.cx.cn.cxquartz.vo.Code"
>
<result
column=
"key"
jdbcType=
"VARCHAR"
property=
"key"
/>
<result
column=
"name"
jdbcType=
"VARCHAR"
property=
"name"
/>
<result
column=
"type"
jdbcType=
"CHAR"
property=
"type"
/>
<result
column=
"alarmlevel"
jdbcType=
"VARCHAR"
property=
"alarmlevel"
/>
<result
column=
"rectifytime"
jdbcType=
"INTEGER"
property=
"rectifytime"
/>
<result
column=
"manualchecktime"
jdbcType=
"INTEGER"
property=
"manualchecktime"
/>
<result
column=
"pushchecktime"
jdbcType=
"INTEGER"
property=
"pushchecktime"
/>
<result
column=
"maxnum"
jdbcType=
"INTEGER"
property=
"maxnum"
/>
<result
column=
"alarmnum"
jdbcType=
"INTEGER"
property=
"alarmnum"
/>
</resultMap>
<select
id=
"selectalarmNum"
resultMap=
"BaseResultMap"
>
select * from t_code t where t.type=2 and t.key=#{key,jdbcType=VARCHAR}
</select>
</mapper>
src/main/resources/mapper/QuartzTaskInformationsMapper.xml
View file @
fb73cb9a
...
...
@@ -394,6 +394,9 @@
<result
column=
"sbbh"
jdbcType=
"VARCHAR"
property=
"sbbh"
/>
<result
column=
"tdbh"
jdbcType=
"INTEGER"
property=
"tdbh"
/>
<result
column=
"xzbh"
jdbcType=
"VARCHAR"
property=
"xzbh"
/>
</resultMap>
<update
id=
"UpdateExecuteParam"
parameterType=
"java.util.HashMap"
>
update quartz_task_informations set executeParamter=#{nrtsp} where executeParamter=#{ortsp}
</update>
</mapper>
src/main/resources/templates/updatetask.html
View file @
fb73cb9a
...
...
@@ -45,6 +45,9 @@
id=
"objecth"
/>
<input
type=
"hidden"
th:value=
"${taskInformation.imgsrc}"
name=
"imgsrc"
id=
"imgsrc"
/>
<input
type=
"hidden"
value=
"false"
name=
"imgsrc"
id=
"changewidthnot"
/>
<input
type=
"hidden"
th:value=
"${taskInformation.rtsp}"
name=
"rtsp"
id=
"rtsp"
/>
...
...
@@ -125,7 +128,7 @@
<input
type=
"text"
name=
"videoid"
th:value=
"${taskInformation.videoid}"
id=
"videoid"
class=
"form-control"
>
<a
id=
"getrtsp"
href=
" javascript:void(0)"
>
获得监控图片
</a>
<a
id=
"getwidth"
href=
" javascript:void(0)"
>
编辑监控范围
</a>
</div>
...
...
@@ -251,6 +254,8 @@
this
.
type
=
0
;
//鼠标移动类型
this
.
topDistance
=
0
;
//
this
.
leftDistance
=
0
;
//
this
.
ratew
=
1
;
this
.
rateh
=
1
;
this
.
config
=
{
width
:
600
,
height
:
400
,
...
...
@@ -277,17 +282,28 @@
}
init
(
cvw
,
cvh
,
imgw
,
imgh
){
var
item
=
this
.
layers
[
0
];
var
ratew
=
cvw
/
imgw
;
var
rateh
=
cvh
/
imgh
;
this
.
ctx
.
beginPath
();
this
.
ctx
.
rect
((
item
.
x1
)
*
ratew
,
(
item
.
y1
)
*
rateh
,
(
item
.
width
)
*
ratew
,
(
item
.
height
)
*
rateh
);
// this.ctx.rect(item.x1, item.y1, item.width, item.height);
this
.
ctx
.
strokeStyle
=
item
.
strokeStyle
;
console
.
log
(
`item`
,
item
)
this
.
ctx
.
stroke
();
console
.
log
(
`init:`
,
this
.
layers
);
var
item
=
this
.
layers
[
1
];
this
.
ratew
=
cvw
/
imgw
;
this
.
rateh
=
cvh
/
imgh
;
this
.
ctx
.
beginPath
();
this
.
startX
=
(
item
.
x1
)
*
this
.
ratew
;
this
.
startY
=
(
item
.
y1
)
*
this
.
rateh
;
this
.
endX
=
(
item
.
x1
)
*
this
.
ratew
+
(
item
.
width
)
*
this
.
ratew
;
this
.
endY
=
(
item
.
y1
)
*
this
.
ratew
+
(
item
.
height
)
*
this
.
rateh
;
this
.
ctx
.
rect
(
this
.
startX
,
this
.
startY
,
(
item
.
width
)
*
this
.
ratew
,
(
item
.
height
)
*
this
.
rateh
);
// this.ctx.rect(item.x1, item.y1, item.width, item.height);
this
.
ctx
.
strokeStyle
=
item
.
strokeStyle
;
this
.
layers
.
splice
(
0
,
1
,
this
.
fixPosition
({
x1
:
Math
.
ceil
(
this
.
startX
),
y1
:
Math
.
ceil
(
this
.
startY
),
x2
:
Math
.
ceil
(
this
.
endX
),
y2
:
Math
.
ceil
(
this
.
endY
),
strokeStyle
:
this
.
config
.
solidColor
,
type
:
this
.
type
}));
console
.
log
(
`item`
,
item
)
this
.
ctx
.
stroke
();
console
.
log
(
`init:`
,
this
.
layers
);
}
//设置图片为canvas的背景
...
...
@@ -335,6 +351,8 @@
_this
.
canvas
.
style
.
backgroundSize
=
`
${
imgW
}
px
${
imgH
}
px`
;
_this
.
init
(
imgW
,
imgH
,
actImgW
,
actImgH
);
// }
}
}
...
...
@@ -428,34 +446,18 @@
}
}
reshow
(
x
,
y
)
{
reshow
(
x
,
y
,
changesmall
)
{
let
allNotIn
=
1
;
let
item
=
this
.
layers
[
0
];
this
.
ctx
.
beginPath
();
this
.
ctx
.
rect
(
item
.
x1
,
item
.
y1
,
item
.
width
,
item
.
height
);
this
.
ctx
.
strokeStyle
=
item
.
strokeStyle
<!--
if
(
x
>=
(
item
.
x1
-
25
/
this
.
scale
)
&&
x
<=
(
item
.
x1
+
25
/
this
.
scale
)
&&
y
<=
(
item
.
y2
-
25
/
this
.
scale
)
&&
y
>=
(
item
.
y1
+
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeLeft
(
item
);
-->
<!--
}
else
if
(
x
>=
(
item
.
x2
-
25
/
this
.
scale
)
&&
x
<=
(
item
.
x2
+
25
/
this
.
scale
)
&&
y
<=
(
item
.
y2
-
25
/
this
.
scale
)
&&
y
>=
(
item
.
y1
+
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeWidth
(
item
);
-->
<!--
}
else
if
(
y
>=
(
item
.
y1
-
25
/
this
.
scale
)
&&
y
<=
(
item
.
y1
+
25
/
this
.
scale
)
&&
x
<=
(
item
.
x2
-
25
/
this
.
scale
)
&&
x
>=
(
item
.
x1
+
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeTop
(
item
);
-->
<!--
}
else
if
(
y
>=
(
item
.
y2
-
25
/
this
.
scale
)
&&
y
<=
(
item
.
y2
+
25
/
this
.
scale
)
&&
x
<=
(
item
.
x2
-
25
/
this
.
scale
)
&&
x
>=
(
item
.
x1
+
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeHeight
(
item
);
-->
<!--
}
else
if
(
x
>=
(
item
.
x1
-
25
/
this
.
scale
)
&&
x
<=
(
item
.
x1
+
25
/
this
.
scale
)
&&
y
<=
(
item
.
y1
+
25
/
this
.
scale
)
&&
y
>=
(
item
.
y1
-
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeLT
(
item
);
-->
<!--
}
else
if
(
x
>=
(
item
.
x2
-
25
/
this
.
scale
)
&&
x
<=
(
item
.
x2
+
25
/
this
.
scale
)
&&
y
<=
(
item
.
y2
+
25
/
this
.
scale
)
&&
y
>=
(
item
.
y2
-
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeWH
(
item
);
-->
<!--
}
else
if
(
x
>=
(
item
.
x1
-
25
/
this
.
scale
)
&&
x
<=
(
item
.
x1
+
25
/
this
.
scale
)
&&
y
<=
(
item
.
y2
+
25
/
this
.
scale
)
&&
y
>=
(
item
.
y2
-
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeLH
(
item
);
-->
<!--
}
else
if
(
x
>=
(
item
.
x2
-
25
/
this
.
scale
)
&&
x
<=
(
item
.
x2
+
25
/
this
.
scale
)
&&
y
<=
(
item
.
y1
+
25
/
this
.
scale
)
&&
y
>=
(
item
.
y1
-
25
/
this
.
scale
))
{
-->
<!--
this
.
resizeWT
(
item
);
-->
<!--
}
-->
if
(
this
.
ctx
.
isPointInPath
(
x
*
this
.
scale
,
y
*
this
.
scale
))
{
this
.
render
(
item
);
allNotIn
=
0
;
}
this
.
ctx
.
stroke
();
this
.
ctx
.
beginPath
();
console
.
log
(
item
.
x1
);
this
.
ctx
.
rect
(
item
.
x1
,
item
.
y1
,
item
.
width
,
item
.
height
);
this
.
ctx
.
strokeStyle
=
item
.
strokeStyle
;
if
(
this
.
ctx
.
isPointInPath
(
x
*
this
.
scale
,
y
*
this
.
scale
))
{
this
.
render
(
item
);
allNotIn
=
0
;
}
this
.
ctx
.
stroke
();
if
(
this
.
flag
&&
allNotIn
&&
this
.
optype
<
3
)
{
this
.
optype
=
1
;
}
...
...
@@ -505,70 +507,75 @@
}
mousedown
(
e
){
this
.
startX
=
(
e
.
pageX
-
this
.
canvas
.
offsetLeft
+
this
.
canvas
.
parentElement
.
scrollLeft
)
/
this
.
scale
;
this
.
startY
=
(
e
.
pageY
-
this
.
canvas
.
offsetTop
+
this
.
canvas
.
parentElement
.
scrollTop
)
/
this
.
scale
;
this
.
currentR
=
this
.
isPointInRetc
(
this
.
startX
,
this
.
startY
);
if
(
this
.
currentR
)
{
this
.
leftDistance
=
this
.
startX
-
this
.
currentR
.
x1
;
this
.
topDistance
=
this
.
startY
-
this
.
currentR
.
y1
;
if
(
$
(
"
#changewidthnot
"
).
val
()
==
"
1
"
)
{
this
.
startX
=
(
e
.
pageX
-
$
(
"
#draw-canvas
"
).
offset
().
left
)
/
this
.
scale
;
this
.
startY
=
(
e
.
pageY
-
$
(
"
#draw-canvas
"
).
offset
().
top
)
/
this
.
scale
;
this
.
currentR
=
this
.
isPointInRetc
(
this
.
startX
,
this
.
startY
);
if
(
this
.
currentR
)
{
this
.
leftDistance
=
this
.
startX
-
this
.
currentR
.
x1
;
this
.
topDistance
=
this
.
startY
-
this
.
currentR
.
y1
;
}
this
.
ctx
.
strokeRect
(
this
.
endX
,
this
.
endY
,
0
,
0
);
this
.
ctx
.
strokeStyle
=
this
.
config
.
dashedColor
;
this
.
flag
=
1
;
}
this
.
ctx
.
strokeRect
(
this
.
endX
,
this
.
endY
,
0
,
0
);
this
.
ctx
.
strokeStyle
=
this
.
config
.
dashedColor
;
this
.
flag
=
1
;
}
mousemove
(
e
){
this
.
endX
=
(
e
.
pageX
-
this
.
canvas
.
offsetLeft
+
this
.
canvas
.
parentElement
.
scrollLeft
)
/
this
.
scale
;
this
.
endY
=
(
e
.
pageY
-
this
.
canvas
.
offsetTop
+
this
.
canvas
.
parentElement
.
scrollTop
)
/
this
.
scale
;
// console.log(`mousemove`, this.endX, this.endY);
this
.
ctx
.
save
();
this
.
ctx
.
setLineDash
([
5
])
this
.
canvas
.
style
.
cursor
=
"
default
"
;
this
.
ctx
.
clearRect
(
0
,
0
,
this
.
config
.
width
,
this
.
config
.
height
);
if
(
this
.
flag
&&
this
.
optype
==
1
)
{
// ctx.strokeRect(startx, starty, x - startx, y - starty);
// ctx.strokeRect(startx, starty, x - startx, y - starty);
this
.
ctx
.
strokeRect
(
this
.
startX
<
0
?
0
:
this
.
startX
,
this
.
startY
<
0
?
0
:
this
.
startY
,
this
.
endX
-
this
.
startX
,
this
.
endY
-
this
.
startY
);
if
(
$
(
"
#changewidthnot
"
).
val
()
==
"
1
"
)
{
this
.
endX
=
(
e
.
pageX
-
$
(
"
#draw-canvas
"
).
offset
().
left
)
/
this
.
scale
;
this
.
endY
=
(
e
.
pageY
-
$
(
"
#draw-canvas
"
).
offset
().
top
)
/
this
.
scale
;
// console.log(`mousemove`, this.endX, this.endY);
this
.
ctx
.
save
();
this
.
ctx
.
setLineDash
([
5
])
this
.
canvas
.
style
.
cursor
=
"
crosshair
"
;
this
.
ctx
.
clearRect
(
0
,
0
,
this
.
config
.
width
,
this
.
config
.
height
);
if
(
this
.
flag
&&
this
.
optype
==
1
)
{
this
.
ctx
.
strokeRect
(
this
.
startX
,
this
.
startY
,
this
.
endX
-
this
.
startX
,
this
.
endY
-
this
.
startY
);
}
this
.
ctx
.
restore
();
this
.
reshow
(
this
.
endX
,
this
.
endY
,
"
1
"
);
}
this
.
ctx
.
restore
();
this
.
reshow
(
this
.
endX
,
this
.
endY
);
}
mouseup
(
e
){
if
(
this
.
optype
==
1
)
{
this
.
layers
.
splice
(
0
,
1
,
this
.
fixPosition
({
x1
:
this
.
startX
,
y1
:
this
.
startY
,
x2
:
this
.
endX
,
y2
:
this
.
endY
,
strokeStyle
:
this
.
config
.
solidColor
,
type
:
this
.
type
}))
var
ratew
=
this
.
config
.
width
/
this
.
canvas
.
width
;
var
rateh
=
this
.
config
.
height
/
this
.
canvas
.
height
;
this
.
layers
.
splice
(
1
,
1
,
this
.
fixPosition
({
x1
:
Math
.
ceil
(
this
.
startX
*
ratew
),
y1
:
Math
.
ceil
(
this
.
startY
*
rateh
),
x2
:
Math
.
ceil
(
this
.
endX
*
ratew
),
y2
:
Math
.
ceil
(
this
.
endY
*
rateh
),
strokeStyle
:
this
.
config
.
solidColor
,
type
:
this
.
type
}))
}
else
if
(
this
.
optype
>=
3
)
{
this
.
fixPosition
(
this
.
currentR
);
mouseup
(
e
)
{
if
(
$
(
"
#changewidthnot
"
).
val
()
==
"
1
"
)
{
if
(
this
.
optype
==
1
)
{
this
.
layers
.
splice
(
0
,
1
,
this
.
fixPosition
({
x1
:
this
.
startX
,
y1
:
this
.
startY
,
x2
:
this
.
endX
,
y2
:
this
.
endY
,
strokeStyle
:
this
.
config
.
solidColor
,
type
:
this
.
type
}))
var
ratew
=
this
.
config
.
width
/
this
.
canvas
.
width
;
var
rateh
=
this
.
config
.
height
/
this
.
canvas
.
height
;
this
.
layers
.
splice
(
1
,
1
,
this
.
fixPosition
({
x1
:
Math
.
ceil
(
this
.
startX
*
ratew
),
y1
:
Math
.
ceil
(
this
.
startY
*
rateh
),
x2
:
Math
.
ceil
(
this
.
endX
*
ratew
),
y2
:
Math
.
ceil
(
this
.
endY
*
rateh
),
strokeStyle
:
this
.
config
.
solidColor
,
type
:
this
.
type
}));
}
else
if
(
this
.
optype
>=
3
)
{
this
.
fixPosition
(
this
.
currentR
);
}
this
.
currentR
=
null
;
this
.
flag
=
0
;
this
.
reshow
(
this
.
endX
,
this
.
endY
);
this
.
optype
=
0
;
}
this
.
currentR
=
null
;
this
.
flag
=
0
;
this
.
reshow
(
this
.
endX
,
this
.
endY
);
this
.
optype
=
0
;
}
}
const
draw
=
new
DrawRectangle
(
'
draw-canvas
'
,
{
src
:
$
(
"
#imgsrc
"
).
val
(),
layers
:[{
layers
:[{},
{
"
x1
"
:
parseInt
(
$
(
"
#objectx
"
).
val
()),
"
y1
"
:
parseInt
(
$
(
"
#objecty
"
).
val
()),
"
x2
"
:
parseInt
(
$
(
"
#objectx
"
).
val
())
+
parseInt
(
$
(
"
#objectw
"
).
val
()),
...
...
@@ -583,9 +590,20 @@
$
(
function
()
{
$
(
"
#getwidth
"
).
on
(
'
click
'
,
function
(
e
)
{
if
(
$
(
"
#changewidthnot
"
).
val
()
==
"
1
"
)
{
$
(
"
#changewidthnot
"
).
val
(
"
0
"
);
$
(
"
#draw-canvas
"
).
style
.
cursor
=
"
hand
"
;
}
else
{
$
(
"
#changewidthnot
"
).
val
(
"
1
"
);
$
(
"
#draw-canvas
"
).
style
.
cursor
=
"
crosshair
"
;
}
});
$
(
"
#getrtsp
"
).
on
(
'
click
'
,
function
(
e
)
{
$
.
ajax
({
$
.
ajax
({
url
:
"
/quartz/getRtsp/
"
+
$
(
"
#videoid
"
).
val
(),
dataType
:
"
json
"
,
type
:
"
get
"
,
...
...
@@ -623,7 +641,7 @@
var
lastmodifytime
=
$
(
"
#lastmodifytime
"
).
val
();
var
frozentime
=
$
(
"
#frozentime
"
).
val
();
var
unfrozentime
=
$
(
"
#unfrozentime
"
).
val
();
object
=
draw
.
layers
[
1
];
object
=
draw
.
layers
[
1
];
$
.
ajax
({
url
:
"
/quartz/edit/task
"
,
dataType
:
"
json
"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment