Как вы все знаете, некоторое время назад мы протестировали функцию обнаружения пешеходов в определенном живописном месте, а также связали эту функцию с системой продажи билетов живописного места. Когда мы сравнили результаты анализа пешеходов с данными сценической билетной системы, внутренний код показал ошибку в сохраненных json-данных. Ошибка данных Json: поле первых "Persons" равно 0 (то есть количество людей равно 0), а "ChangeValueArr" не должно иметь значения; а в массиве "ChangeValueArr" много информация об источнике видео, подлежащем замене (количество заменяемых людей) ).
Сначала используйте поиск, чтобы найти поле, добавленное «ChangeValueArr». Следующий код — это код, который база данных ищет совпадения и добавляет к «ChangeValueArr».
value := ChangeTimeValue{
StartTime: sql.StartTimestamp - DifTime,
EndTime: sql.EndTimestamp - DifTime,
StartTimeStr: MsToTimeStr(sql.StartTimestamp),
EndTimeStr: MsToTimeStr(sql.EndTimestamp),
Persons: p,
Filename: "",
Duration: sql.EndTimestamp - sql.StartTimestamp,
IsLive: false,
}
if p == 0 || v.Persons == 0 {
MismatchTimeValueArr[index].IsSuccess = true
log.Println("票务系统为0人")
} else if p < v.Persons { //作为拼接
SnapDataArr = append(SnapDataArr, value)
} else if p >= v.Persons && p <= (v.Persons + 100) {//成功找到符合条件
log.Println("ChangeValueArr = append1")
MismatchTimeValueArr[index].ChangeValueArr = append(MismatchTimeValueArr[index].ChangeValueArr, value)
}
Следующий код предназначен для поиска файла и добавления его в поле «ChangeValueArr»:
if (hour - 2) >= h && (hour + 2) <= h{ // 符合小时的时间
value := ChangeTimeValue{
StartTime: -1,
EndTime: -1,
StartTimeStr: "-1",
EndTimeStr: "-1",
Persons: p,
Filename: fmt.Sprintf("%s/%s", currDir, name),
Duration: s * 1000,
IsLive: false,
}
if p < v.Persons { //作为拼接
SnapDataArr = append(SnapDataArr, value)
} else if p <= v.Persons && p <= (v.Persons + 100) { //符合条件
log.Println("ChangeValueArr = append2")
MismatchTimeValueArr[index].ChangeValueArr = append(MismatchTimeValueArr[index].ChangeValueArr, value)
} else {
log.Println("检查的人数比实际大的多")
}
}
Функция следующего кода состоит в том, чтобы сохранить все видеоисточники, которые не соответствуют количеству людей по отдельности, чтобы достичь цели сопоставления количества людей и системы продажи билетов.
sort.SliceStable(SnapArr, func(i, j int) bool { //从小往大,排序
return SnapArr[i].Persons < SnapArr[j].Persons
})
indexPerson:=len(SnapArr) - 1
log.Println("ChangeValueArr = append3")
MismatchTimeValueArr[index].ChangeValueArr = append(MismatchTimeValueArr[index].ChangeValueArr, SnapArr[indexPerson])
SnapArr = append(SnapArr[:indexPerson], SnapArr[indexPerson+1:]...) //删除已经push进去的数据
Если количество проверенных людей не соответствует системе тикетов, то измените поле «IsSuccess» на false, а true означает, что нет необходимости добавлять замещающий источник видео.
Поэтому видеоисточник после склейки должен изменить "IsSuccess" на true, что означает, что видеоисточник готов. Таким образом, в «ChangeValueArr» не будет значения, и логика кода будет правильной.