我试图做行人检测,我需要训练我的 SVM,我正在加载 Diamler 数据集(link),而在 python 中加载它显示与 DB 浏览器相同的错误是“无法打开数据库文件原因:文件不是数据库”。虽然文件很容易在 Internet Explorer 中打开。数据库下载链接-link
我的 python 代码是:
import sqlite3
con = sqlite3.connect('GroundTruth2D.db')
cur = con.cursor()
cur.execute("SELECT * FROM sqlite_master")
records = cur.fetchall()
print("Total rows in table - ",cur.rowcount)
print(records)
虽然我使用的数据库浏览器是here
您提供的链接具有.tar.gz 扩展名,但下载时实际上不是.tar.gz 文件,而只是一个基本的.tar。将文件重命名为.tar 以便能够按预期访问它。
.tar 似乎包含 Matlab 脚本和由它们访问的数据库,但它们似乎不是 sqlite3 数据库,因此您不能使用sqlite3
打开它们。
您需要找到一个能够读取此数据库格式的 Python 包,或者使用 Matlab 转换数据并将其存储为 SQLite 数据库以按照您计划的方式访问它。
所以他们把文件扩展名保存为.db,但它实际上是一个.txt 文件类型,我们必须读取每一行并使用解析器提取数据。
用于解析数据的 python 代码:
import readSequence
seq_separator =":"
img_separator = ";"
obj_2d_separator = "#"
seqcount = -1
imgcount = -1
objcount = 0
seqs = []
f = open("GroundTruth2D.db", "r")
line = f.readline()
line = line.strip()
while line:
if line==":":
seq_id = f.readline().strip()
path_to_data = f.readline().strip()
numimages = f.readline().strip()
seq = readSequence.readSequences(seq_id, path_to_data, numimages)
seqs.append(seq)
seqcount+=1
elif line==";":
imgcount+=1
nameimg = f.readline().strip()
[width,height] = f.readline().strip().split(" ")
numobj = f.readline().strip().split(" ")[1]
seqs[seqcount].addimage(nameimg, width, height, numobj)
elif line[0] =="#":
objclass = line[2:].strip()
objid = f.readline().strip()
conf = f.readline().strip()
[min_x,min_y,max_x,max_y] = f.readline().strip().split(" ")
seqs[seqcount].addobj(objclass, objid, conf, [min_x,min_y, max_x,max_y])
line = f.readline()
line=line.strip()
readSequence.py-& gt;
class read2Dobj:
def __init__(self, objclass = None, objid=None, conf=None, coord=None):
self.objclass = objclass
self.objid = objid
self.conf = conf
self.coord = coord
def setobjclass(self, objclass):
self.objclass = objclass
def setobjid(self, objid):
self.objid = objid
def setconf(self,conf):
self.conf = conf
def setcoord(self, coord):
self.coord = coord
class readImage:
count = 0
def __init__(self,name=None, width=None, height=None, numobj=None):
self.name = name
self.width = width
self.height = height
self.numobj = numobj
def setname(self,name):
self.name = name
def setwidth(self,width):
self.width = width
def setheight(self,height):
self.height = height
def setnumobj(self,numobj):
self.numobj = numobj
self.objs = [read2Dobj() for i in numobj]
def addobjs(self, objclass=None, objid=None, conf=None, coord=None):
self.objs[self.count].setobjclass(objclass)
self.objs[self.count].setobjid(objid)
self.objs[self.count].setconf(conf)
self.objs[self.count].setcoord(coord)
self.count+=1
class readSequences:
count = 0
def __init__(self, seq_id, path_to_data, numimages):
self.seq_id = seq_id
self.path_to_data = path_to_data
self.numimages = numimages
self.imgs = [readImage() for i in range(int(self.numimages))]
def addimage(self, name, width, height, numobj):
self.imgs[self.count].setname(name)
self.imgs[self.count].setwidth(width)
self.imgs[self.count].setheight(height)
self.imgs[self.count].setnumobj(numobj)
self.count+=1
def addobj(self, objclass=None, objid=None, conf=None, coord=None):
self.imgs[self.count-1].addobjs(objclass, objid,conf,coord)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(7条)