TSINGSEE青犀视频景区行人检测程序数据库出错的排查及解决

Posted TSINGSEE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TSINGSEE青犀视频景区行人检测程序数据库出错的排查及解决相关的知识,希望对你有一定的参考价值。

我们之前开发的行人检测系统已经大致完成了内部测试,目前已经将自主开发的行人检测系统与某景区的票务系统进行了结合,在之前的博文中也和大家分享过我们的开发过程,大家有兴趣也可以翻阅我们以往的博文了解。

将行人检测与票务系统结合的主要目的是确保行人与买票人数进行对应,获取景区的人流量、运营情况等信息,主要实现方式是将票务系统的数据库时间段总人数与Python分析的时间段数据库总人数进行比较。如果票务系统的数据库时间段总人数比较大,那就需要切换视频源来使人数对应上。

在景区测试时,该景区使用的是本地保存的数据库,且用的是微软的SQLServer数据库服务器,而其他景区使用的是mysql数据库,两边使用的数据库不一样,所以在测试的时候出现报错,错误日志:“panic: runtime error: invalid memory address or nil pointer derefernce [signal 0xc000005 code=0x0 addr=0xb0 pc=0xe773ad]”

程序运行错误,是一个无效的内存地址或者空指针引用。初始化程序没有赋值,而直接指定为nil,导致程序调用指针就会报错。

代码示例:

connArgs := ""
value := strings.Index(PlayPoint, "bailong")
if value >= 0 {
   connArgs = fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;",
            localdbhost, localdbuser, localdbpass, localport, "BL_Tick_Push")
   MDB, err = gorm.Open("mssql", connArgs)
   if err != nil {
      return
   }
   MDB.SingularTable(true)
} else {
   connArgs = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", tdbuser, tdbpass, tdbhost, tdbport, "orderdata")
   TDB, err = gorm.Open("mysql", connArgs)
   if err != nil {
      return
   }
   //把sql语句打印出来
   TDB.LogMode(true)
   db := TDB.DB()
   err = db.Ping()
   if err != nil {
      return
   }
   db.SetMaxOpenConns(1)
   TDB.SetLogger(db2.DefaultGormLogger)
}

连接两个数据库,一个是mysql,一个是mssql,都保存了一个全局的变量,所以我们使用的是那个全局变量的数据库,否则MDB和TDB中其中有一个为nil,使用数据库查询会出现nil指针的操作。

我们将代码操作MDB和TDB。

sql = fmt.Sprintf(`SELECT * FROM BI_Inpark WHERE inpark_systemdate BETWEEN %s AND %s AND inparktype=1 AND parkid=%s`,
   fmt.Sprintf(`'%d-%d-%d %02d:%02d:%02d.000'`, start.Year(), start.Month(), start.Day(), start.Hour(), start.Minute(), start.Second()),
   fmt.Sprintf(`'%d-%d-%d %02d:%02d:%02d.999'`, end.Year(), end.Month(), end.Day(), end.Hour(), end.Minute(), end.Second()),
   fmt.Sprintf(`'%d'`,point))
TDB.Raw(sql).Scan(&MDatabaseArr)
return MDatabaseArr, MTicketPersonCount(MDatabaseArr)

而此处出现代码错误,此代码操作的是mssql数据库,TDB变量保存的是mysql数据库的值,所以操作数据库全局变量使用错误。此处需要把TDB改为操作(mssql)MDB的数据库即可。

以上是关于TSINGSEE青犀视频景区行人检测程序数据库出错的排查及解决的主要内容,如果未能解决你的问题,请参考以下文章

TSINGSEE青犀视频景区行人检测分析人流数据程序仅在网页开启时生效的优化

TSINGSEE青犀视频景区行人检测功能如何实现休息日的分析

TSINGSEE青犀视频行人检测集成票务系统读取票务系统数据库为空的问题

TSINGSEE青犀视频行人智能检测测试报错panic: runtime error排查过程

TSINGSEE青犀视频行人检测后端代码出现保存json数据错误的处理

TSINGSEE青犀视频开发景区AI行人识别调用动态行人识别失败问题排查及解决