Example #1
0
class User():

    def __init__(self):
        self.db = Database()

    def login(self, uid, username):
        response = self.db.find_user({"userid": uid})
        if(response is None):
            self.add_user(uid, username)
        return "OKAY"

    def add_user(self, uid, username):
        self.db.add_user({"userid": uid, "username": username})
        return "OKAY"
Example #2
0
class User():

    def __init__(self):
        self.db = Database()

    def login(self, uid):
        response = self.db.find_user({"userid": uid})
        if(response is None):
            return "User is not yet registered"
        else:
            return response["username"]

    def add_user(self, uid, username):
        print uid
        self.db.add_user({"userid": uid, "username": username})
        return "user added"
Example #3
0
	def getChild(self, name, request):
		CreatorID = request.path.split("/")[-2]
		filename = ".".join(name.split(".")[:-1])
		
		if Database.FlipnoteExists(CreatorID, filename):#html, ppm and info
			return self.CreatorIDFile
		elif name == "":
			return self
		else:
			return NotFound
Example #4
0
def create():
    var.done = True
    while not var.user_bool:
        print(var.color("Enter a username: "******"")
        new_user = input()
        if db.find_data("user", new_user):
            var.error("This username has already been taken.\n")
        else:
            var.user_bool = True
    while not var.email_bool:
        print(var.color("\nEnter a valid email: "), end="")
        new_email = input()
        if not validate_email(new_email):
            var.error("This email isn't valid.")
        else:
            if db.find_data("email", new_email):
                var.error(
                    "This email has already been used in another account.")
            else:
                var.email_bool = True

    while not var.pass_bool:
        new_pass = getpass(var.color("\nEnter a strong password: "******"Your password isn't strong enough")
            continue
        same_pass = getpass(var.color("\nEnter the password again: "))
        if same_pass != new_pass:
            var.error("Your password doesn't match.")
        else:
            var.pass_bool = True

    global acc
    acc = Accounts(new_user, new_email, new_pass, 0, 0)
    for attr in var.attribute_keys:
        var.attribute_values.append(getattr(acc, attr))
    accdata = dict(zip(var.attribute_keys, var.attribute_values))
    db.insert(accdata)
    print(var.color(f"\nSuccessfully made an account for {acc.user}!"))
    time.sleep(3.5)
    os.system("cls")
Example #5
0
def user_sudy():
    if request.cookies.get('user_id') == None:
        return redirect('/login')
    else:
        user = request.cookies.get('user_id')
        get_db()
        db = Database(g._database)
        user_info = db.find_user_by_id(user)
        role = user_info[0]
        name = ' '.join(user_info[1:])
        if request.method == 'GET':
            d_table = db.get_courts_u_id(u_id=user)
        else:
            client = request.form.get('client')
            date = request.form.get('date')
            if client == '' and date == '':
                d_table = db.get_courts_u_id(u_id=user)
            elif client == '' and date != '':
                d_table = db.get_courts_search_u_id(date=date, u_id=user)
            elif client != '' and date == '':
                d_table = db.get_courts_search_u_id(client=client, u_id=user)
            elif client != '' and date != '':
                d_table = db.get_courts_search_u_id(client=client,
                                                    date=date,
                                                    u_id=user)
            else:
                redirect('/user/render/sudy')
        if d_table == []:
            return render_template("/user/sudy.html",
                                   data=[],
                                   role=role,
                                   name=name,
                                   delite_href='')
        else:
            for item in d_table:
                item.insert(0, d_table.index(item) + 1)
                item.append(item.pop(1))
                item.pop(1)
            serch_clients = []
            for cl in db.get_courts_clients_u_id(u_id=user):
                serch_clients.append(cl[0])
            return render_template("/user/sudy.html",
                                   data=d_table,
                                   role=role,
                                   serch_clients=serch_clients,
                                   name=name)
Example #6
0
def delo(template_name, t_id):
    get_db()
    db = Database(g._database)
    user = request.cookies.get('user_id')
    user_info = db.find_user_by_id(user)
    role = user_info[0]
    name = ' '.join(user_info[1:])

    table_name = settings_by_template(template_name, 'table_name')
    delo_data = db.get_delo(table_name, t_id)
    rez_table = []

    af_table = delo_data[0][2:7]
    af_table.pop(1)
    af_table[1] = ' ,'.join(json.loads(af_table[1]))
    af_table[3] = ' ,'.join(json.loads(af_table[3]))

    t_count = settings_by_template(template_name, 'delo_count')
    j_table = delo_data[0][-t_count + 1:]

    files_t = delo_data[0][7:9]
    for f in files_t:
        if f != 'Нет файла':
            files_t[files_t.index(f)] = '/download_files/' + '/'.join(
                f.split('\\')[-3:])
        else:
            continue
    in_table = delo_data[0][9:11]

    rez_table = af_table + j_table + files_t + in_table
    if template_name == 'bankr_dela':
        rez_table.pop(1)
    Type = settings_by_template(template_name, 'Type')
    return render_template('delo.html',
                           type=Type,
                           role=role,
                           name=name,
                           delo=[rez_table],
                           t_id=t_id,
                           template_name=template_name)
Example #7
0
def user_add_sudy():
    if request.method == 'POST':
        new_c_id = str(uuid.uuid4())
        get_db()
        db = Database(g._database)
        user = request.cookies.get('user_id')
        user_info = db.find_user_by_id(user)
        adding_dict = request.form.to_dict(flat=False)
        list_to_Courts = []
        for margin in tables_sets(table_name='Sud', mode='fields'):
            if margin == 'c_id':
                list_to_Courts.append(new_c_id)
            elif margin == 'lawyer':
                list_to_Courts.append(' '.join(user_info[1:]))
            elif margin == 'u_id':
                list_to_Courts.append(request.cookies.get('user_id'))
            else:
                list_to_Courts.append(adding_dict[margin][0])
        db.insert_tables('Sud', tuple(list_to_Courts))
        return redirect('/user/render/sudy')
    if request.method == 'GET':
        if request.cookies.get('user_id') == None:
            return redirect('/login')
        else:
            user = request.cookies.get('user_id')
            get_db()
            db = Database(g._database)
            user_info = db.find_user_by_id(user)
            role = user_info[0]
            name = ' '.join(user_info[1:])
            urists = db.get_urists()
            ur_up = [' '.join(i) for i in urists]
            clients = db.get_clients_u_id(user)
            return render_template('user/add/add_sudy.html',
                                   clients=clients,
                                   role=role,
                                   name=name,
                                   urists=ur_up)
Example #8
0
def register():
    if request.method == 'POST':
        email = request.form.get('email')
        password = request.form.get('password')
        Access_level = request.form.get('Access_level')
        name = request.form.get('name')
        surname = request.form.get('surname')
        lastname = request.form.get('lastname')

        def hash_password(password):
            salt = uuid.uuid4()
            return salt, hashlib.sha256(salt.hex.encode() + password.encode()
                                        ).hexdigest() + ':' + salt.hex

        u_id, hash_p = hash_password(password)
        new_U = (str(u_id), Access_level, email, str(hash_p), name, surname,
                 lastname)
        get_db()
        db = Database(g._database)
        db.insert_User(new_U)
        return 'Registered Successfully'
    else:
        return abort(401)
Example #9
0
    def __init__(self, roi_id):
        """PlateReader looks for unprocessed image files, detects vehicles' license plates
        and caches associated emissions to database for reporting.

        Args:
            roi_id (int): Identifier of processed region in image

        Args read from environment variables
            POLL_FOLDER: Folder to look for images and metadata
            DEBUG: Flag indicating whether debug logs and features are enabled
        """
        logging.basicConfig(level=logging.INFO)
        self.roi_id = roi_id
        self.poll_folder = os.getenv("POLL_FOLDER")
        self.DB = Database()
        self.OCR = ocr_reader

        self.raw_plate_history = []
        self.debug = os.getenv("DEBUG", "").lower() == "true"
        self.reveal_plate = os.getenv("LOG_PLAINTEXT_PLATE",
                                      "").lower() == "true"

        self.analyser = ROIPlateAnalyser(roi_id, self.debug)
Example #10
0
	def render_POST(self, request):#implement channels?
		data = request.content.read()
		
		channel = ""
		if "channel" in request.args:
			channel = request.args["channel"][0]
		
		add = Database.AddFlipnote(data, channel)
		if add:
			ServerLog.write("%s successfully uploaded \"%s.ppm\"" % (request.getClientIP(), add[1]), Silent)
			request.setResponseCode(200)
		else:
			ServerLog.write("%s tried to upload a flipnote, but failed..." % request.getClientIP(), Silent)
			request.setResponseCode(500)#only causes an error, need to fix
		
		return ""
	#===
Example #11
0
def login():
    if request.method == 'POST':
        email = request.form.get('email').rstrip()
        password = request.form.get('password')
        get_db()
        db = Database(g._database)
        if db.find_user(email) != []:
            if db.find_user(email)[0][3] != []:
                hash_pass = db.find_user(email)[0][3]

                def check_password(hashed_password, user_password):
                    password, salt = hashed_password.split(':')
                    return password == hashlib.sha256(
                        salt.encode() + user_password.encode()).hexdigest()

                if check_password(hash_pass, password):
                    if db.find_user(email)[0][1] == 'Руководитель':
                        way = '/admin/render/sud_dela'
                    elif db.find_user(email)[0][1] == 'Пользователь':
                        way = '/user/render/sud_dela'
                    elif db.find_user(email)[0][1] == 'Секретарь':
                        way = '/secretary'
                    else:
                        way = '/login'
                    response = make_response(redirect(way))
                    response.set_cookie('user_id', db.find_user(email)[0][0])
                    return response
                else:
                    return html_error_replacer('auth.html', 'Password []')
            else:
                return html_error_replacer('auth.html',
                                           'User not found or name invalid')
        else:
            return html_error_replacer('auth.html',
                                       'User not found or name invalid')
    else:
        return render_template('auth.html')
Example #12
0
def launch(method, neighbor_by_class: int = 3, store: bool = False):
    """Launch a classification algorithm. Train on a first dataset, and validate it with a second (and print result)

    Args:
        method (object): Class object that have a make_samples function
        neighbor_by_class (int, optional): Nb nearsest neighbors by class. Defaults to 3.
        store (bool, optional): True if you want to store the alg result in a folder. Default to False.
    """
    db_train = Database(DB_TRAIN)
    db_validation = Database(DB_VALIDATION)

    train_samples = method.make_samples(db_train)
    validation_samples = method.make_samples(db_validation)

    if store:
        # Delete previous result
        for classe in db_train.get_class():
            shutil.rmtree(os.path.join(RESULT_RETRIEVAL, classe),
                          ignore_errors=True)

        # and re-create directory
        for classe in db_train.get_class():
            os.mkdir(os.path.join(RESULT_RETRIEVAL, classe))

    final = {cl: [0, 0] for cl in sorted(db_train.get_class())}

    for img in validation_samples:
        selected_class = knn(img,
                             train_samples,
                             neighbor_by_class=neighbor_by_class)

        # Compare selected class with real class
        if img['cls'] == selected_class:
            final[img['cls']][0] += 1
        final[img['cls']][1] += 1

        # Store image class result if asked
        if store:
            # Copy image to result dir
            i = os.path.basename(img['img'])
            shutil.copy(img['img'],
                        os.path.join(RESULT_RETRIEVAL, selected_class, i))

    # Beautiful print
    print("\n========= Result =========")
    col_width = max(len(cl) for cl, v in final.items()) + 2
    for cl, v in final.items():
        print(
            f"{cl.ljust(col_width)}: {v[0]}/{v[1]}\t{round(v[0]*100/v[1], 2)} %"
        )
Example #13
0
def menu(user):
    cargo = Database.cargo(user)
    root = Tk()
    root.geometry("1024x768+0+0")
    root.title('S4U® Bem Vindo {}'.format(user))
    title = Label(root, text='Seja Bem Vindo "{} {}"\n{}\n{}'.format(cargo.title(), user.title(), date, hour))
    title.grid(row=0, columnspan=2, sticky=W+E)


#--------------------------------------
#      INTERFACE DE CADASTRO
#--------------------------------------
    cad = LabelFrame(root, text='Cadastro')
    cad.grid(row=1,columnspan=2, sticky=W+E)
    Button(cad, text='CADASTRAR', command=Database.cadastro).grid(row=0, column=0, sticky=W+E)
    Button(cad, text='CONSULTAR', command=Database.consulta).grid(row=1, column=0, sticky=W+E)


#--------------------------------------
#      INTERFACE DE CONFIGURAÇÃO
#--------------------------------------
    conf = LabelFrame(root, text='Configurações')
    Button(conf, text='CONFIGURAR').grid(row=0, column=0, sticky=W+E)


#--------------------------------------
#      INTERFACE DE DADOS
#--------------------------------------
    dados = LabelFrame(root, text='Dados')
    Button(dados, text='DADOS').grid(row=0, column=0, sticky=W+E)


#--------------------------------------
#      GESTOR DE PERMISSÃO
#--------------------------------------
    if cargo == 'admin' or cargo == 'fiscal':
        dados.grid(row=3,columnspan=2, sticky=W+E)
    if cargo == 'admin':
        conf.grid(row=2,columnspan=2, sticky=W+E)

    root.mainloop()
Example #14
0
class Message():

    def __init__(self):
        self.db = Database()

    def drop_message(self, user_id, message_x, message_y, message, viewable_by, is_picture):
        message_coordinates = (message_x, message_y)
        print "(" + str(message_coordinates) + ") " + str(message)
        message_entry = {"coordinates":message_coordinates,
                         "message":message,
                         "userid":user_id,
                         "viewable_by":viewable_by,
                         "is_picture":is_picture
                        }
        self.db.insert(message_entry)
        self.db.get_entries()

    def pickup_message(self, user_id, user_x, user_y):
        #This is an estimation... The length of a single degree of latitude changes as the longitude changes. This won't
        #work accurately for latitudes within about 20-30 degrees of either pole.
        #360 degrees / 40075 km = .00898 degrees/km = .00000898 degrees/km ~= .00001

        # coords = (user_x, user_y)
        # p = self.db.posts.find({"coordinates": coords})

        # p = self.db.posts.find({"coordinates":(
        #     {"$gt": user_x + .01, "$lt": user_x + .01},
        #     {"$gt": user_y + .01, "$lt": user_y + .01}
        #                                       )})

        # This is shit... Hung would be ashamed of us.
        for p in self.db.posts.find():
            if(p["coordinates"][0] >= user_x - 0.00001 and p["coordinates"][0] <= user_x + 0.00001):
                if(p["coordinates"][1] >= user_y - 0.00001 and p["coordinates"][1] <= user_y + 0.00001):
                    self.db.delete_entries(p)
                    return p
        # print str(p[0]),'\n'
        return "NONE"
Example #15
0
                value = item['index']
                link = item['link']
                querry = '''UPDATE products set {}={} WHERE LINK='{}' '''.format(
                    tmp.upper(), value, link)
                cur.execute(querry)
            self.con.commit()
            self.con.close()

        except:
            return False

    def close(self):
        self.con.close()
        return True


if __name__ == '__main__':
    db = Database()
    data = db.get_data()

    sql = SQLite()
    sql.insertmuti(db)
    sql.update('10000.jpg', 'res', 1)
    tmp = sql.select('res', 1)

    for d in data.itertuples():
        d_img, d_cls, d_file = getattr(d, "img"), getattr(d, "cls"), getattr(
            d, "filename")
        sql.insert(d_cls, d_file, d_img)
    sql.close()
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ReplyKeyboardRemove, ReplyKeyboardMarkup
from telegram.ext import ConversationHandler

from localization import languages
from utils.message_parser import parser

from ._regular_reminder import reminder_handler

import datetime

from DB import Database
db = Database("db")

user_lang = ""

LANG, TIME_ZONE, MENU, CHOOSE_EVENT, ADD_EVENT = range(5)


def start_command(update, context):
    keyboard = [[
        InlineKeyboardButton("EN ­ЪЈ┤заЂДзаЂбзаЂЦзаЂ«заЂДзаЂ┐",
                             callback_data="en"),
        InlineKeyboardButton("UA ­ЪЄ║­ЪЄд", callback_data="ua"),
        InlineKeyboardButton("RU ­ЪЄи­ЪЄ║", callback_data="ru")
    ]]

    reply_markup = InlineKeyboardMarkup(keyboard)
    context.bot.send_message(
        chat_id=update.message.chat_id,
        text=languages[update.message.from_user.language_code]["hello"],
        reply_markup=reply_markup)
Example #17
0
 def UpdateThreaded(self, flipnotes):  #run in an another thread
     #sort the flipnotes by viewcount, affected by amount of stars
     def sort((i, (ID, flip))):
         views, stars = Database.GetFlipnote(ID, flip)[1:3]
         return int(views) * 60 + int(stars) / 4 - i
Example #18
0
                d_img, d_cls = getattr(d, "img"), getattr(d, "cls")
                d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice)
                samples.append({'img': d_img, 'cls': d_cls, 'hist': d_hist})
            cPickle.dump(
                samples, open(os.path.join(cache_dir, sample_cache), "wb",
                              True))

        return samples


if __name__ == "__main__":
    #On met en place les deux bases
    DB_train_dir_param = "../../ReseauDeNeurones/data/train"
    DB_train_csv_param = "database/data_train.csv"

    db_train = Database(DB_train_dir_param, DB_train_csv_param)
    data_train = db_train.get_data()

    DB_test_dir_param = "../../ReseauDeNeurones/data/test"
    DB_test_csv_param = "database/data_test.csv"

    db_test = Database(DB_test_dir_param, DB_test_csv_param)
    data_test = db_test.get_data()
    edge = Edge()
    # check shape
    assert edge_kernels.shape == (5, 2, 2)

    # evaluate database
    APs, prevision = my_evaluate_class(db_train,
                                       db_test,
                                       f_class=Edge,
Example #19
0
 def __init__(self):
     self.db = Database()
Example #20
0
	def render(self, request):
		creator, file = request.path.split("/")[-2:]
		filetype = file.split(".")[-1].lower()

		if filetype in "ppm":
			#log it:
			path = "/".join(request.path.split("/")[3:])
			Log(request, path)

			#add a view:
			Database.AddView(creator, file[:-4])

			#read ppm file:
			data = Database.GetFlipnotePPM(creator, file[:-4])

			#send file to the client:
			request.responseHeaders.setRawHeaders('content-type', ['text/plain'])
			return data
		elif filetype == "info":
			path = "/".join(request.path.split("/")[3:])
			Log(request, path, True)
			request.responseHeaders.setRawHeaders('content-type', ['text/plain'])
			return "0\n0\n"#undocumented what it means
		elif filetype == "htm":
			#maybe cache the details page of Database.Newest?

			if "mode" in request.args:
				if request.args["mode"][0] == "commentshalfsize":
					pass

			return self.GenerateDetailsPage(creator, ".".join(file.split(".")[:-1])).encode("UTF-8")
		elif filetype == "star":
			path = "/".join(request.path.split("/")[3:])
			headers = request.getAllHeaders()

			#bad formatting
			if "x-hatena-star-count" not in headers:
				ServerLog.write("%s got 403 when requesting %s without a X-Hatena-Star-Count header" % (request.getClientIP(), path), Silent)
				request.setResponseCode(400)
				return "400 - Denied access\nRequest lacks a X-Hatena-Star-Count http header"

			#add the stars:
			amount = int(headers["x-hatena-star-count"])
			if not Database.AddStar(creator, file[:-5], amount):
				#error
				ServerLog.write("%s got 500 when requesting %s" % (request.getClientIP(), path), Silent)
				request.setResponseCode(500)
				return "500 - Internal server error\nAdding the stars seem to have failed."

			#report success
			ServerLog.write("%s added %i stars to %s/%s.ppm" % (request.getClientIP(), amount, creator, file[:-5]), Silent)
			return "Success"
		elif filetype == "dl":
			path = "/".join(request.path.split("/")[3:])
			Log(request, path, True)
			#this is POSTed to when it've been stored to memory.

			Database.AddDownload(creator, file[:-3])

			return "Noted ;)"
		else:
			path = "/".join(request.path.split("/")[3:])
			ServerLog.write("%s got 403 when requesting %s" % (request.getClientIP(), path), Silent)

			request.setResponseCode(403)
			return "403 - Denied access"
Example #21
0
                                     np.mean(cls_MAPs))
            print(r)

            result.write('\n' + r)
        print("Moyennes {} bonnes réponses tout depth= {}".format(
            ",".join(combination),
            sommeBonnesReponsesCombinaison / len(depths) * 100))
    result.close()


if __name__ == "__main__":
    # On crée les deux bases, celle de test et celle de train
    DB_train_dir_param = "../../ReseauDeNeurones/data/train"
    DB_train_csv_param = "database/data_train.csv"

    db_train = Database(DB_train_dir_param, DB_train_csv_param)

    DB_test_dir_param = "../../ReseauDeNeurones/data/test_classés"
    DB_test_csv_param = "database/data_test.csv"

    db_test = Database(DB_test_dir_param, DB_test_csv_param)

    # evaluate features double-wise
    evaluate_feats(db_train, db_test, N=2, d_type='d1')

    # evaluate features triple-wise
    evaluate_feats(db_train, db_test, N=3, d_type='d1')

    # evaluate features quadra-wise
    evaluate_feats(db_train, db_test, N=4, d_type='d1')
Example #22
0
def test_get_vehicles():
    DB = Database()

    assert DB.get_vehicles() is not None
Example #23
0
    def GenerateDetailsPage(self, CreatorID, filename):  #filename without ext
        flipnote = Database.GetFlipnote(
            CreatorID, filename
        )  #flipnote = [filename, views, stars, green stars, red stars, blue stars, purple stars, Channel], all probably strings
        if not flipnote:
            return "This flipnote doesn't exist!"
        tmb = TMB().Read(Database.GetFlipnoteTMB(CreatorID, filename))
        if not tmb:
            return "This flipnote is corrupt!"

        #Is it a spinoff?
        Spinnoff = ""
        if tmb.OriginalAuthorID <> tmb.EditorAuthorID or tmb.OriginalFilename <> tmb.CurrentFilename:
            if Database.FlipnoteExists(tmb.OriginalAuthorID,
                                       tmb.OriginalFilename[:-4]):
                Spinnoff = SpinoffTemplate1.replace(
                    "%%CreatorID%%",
                    tmb.OriginalAuthorID).replace("%%Filename%%",
                                                  tmb.OriginalFilename[:-4])
            elif tmb.OriginalAuthorID <> tmb.EditorAuthorID:
                Spinnoff = SpinoffTemplate2

        #make each entry:
        Entries = []

        #Creator username:
        name = "Creator"
        #content = "<a href=\"http://flipnote.hatena.com/ds/ds/v2-xx/%s/profile.htm?t=260&pm=80\">%s</a>" % (CreatorID, tmb.EditorAuthorName)
        content = '<a href="http://flipnote.hatena.com/ds/v2-xx/%s/profile.htm?t=260&pm=80\">%s</a>' % (
            CreatorID, tmb.Username)
        Entries.append(
            PageEntryTemplate.replace("%%Name%%",
                                      name).replace("%%Content%%", content))

        #Stars:
        name = "Stars"
        content = u'<a href="http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.htm?mode=stardetail"><span class="star0c">\u2605</span> <span class="star0">%s</span></a>' % (
            CreatorID, filename, flipnote[2])  #yellow stars
        #todo: add other stars
        Entries.append(
            PageEntryTemplate.replace("%%Name%%",
                                      name).replace("%%Content%%", content))

        #Views:
        name = "Views"
        content = str(flipnote[1])
        Entries.append(
            PageEntryTemplate.replace("%%Name%%",
                                      name).replace("%%Content%%", content))

        #Channel:
        if flipnote[7]:  #todo: make channels work at all
            name = "Channel"
            content = 'a href="http://flipnote.hatena.com/ds/v2-xx/ch/%s.uls">%s</a>' % (
                flipnote[7], flipnote[7])
            Entries.append(
                PageEntryTemplate.replace("%%Name%%", name).replace(
                    "%%Content%%", content))

        #Comments:
        Comments = "0"

        #doto: add original author info too

        #add the entries to page:
        return DetailsPageTemplate.replace("%%CreatorID%%", CreatorID).replace(
            "%%Filename%%",
            filename).replace("%%CommentCount%%", Comments).replace(
                "%%Spinoff%%",
                Spinnoff).replace("%%PageEntries%%",
                                  PageEntrySeparator.join(Entries))
Example #24
0
    combinations = itertools.combinations(feat_pools, N)
    for combination in combinations:
        fusion = FeatureFusion(features=list(combination))
        for d in depths:
            APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=d)
            cls_MAPs = []
            for cls_APs in APs:
                MAP = np.mean(cls_APs)
                cls_MAPs.append(MAP)
            r = "{},{},{},{}".format(
                ",".join(combination), d, d_type, np.mean(cls_MAPs))
            print(r)
            result.write('\n' + r)
        print()
    result.close()


if __name__ == "__main__":
    print("Pensez à supprimer le dossier cache dans le cas où vous utilisez des nouvelles données.\n")

    dbTrain = Database(DB_dir="CorelDBDataSet/train",
                       DB_csv="CorelDBDataSetTrain.csv")

    fusion = FeatureFusion(features=['color', 'daisy'])

    result = evaluate_class(dbTrain, f_instance=fusion,
                            d_type=d_type, depth=depth)

    print("{} classes classées sur {} disponibles".format(
        result[0], result[1]))
Example #25
0
            data = db.get_data()
            for d in data.itertuples():
                d_img, d_cls = getattr(d, "img"), getattr(d, "cls")
                d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice)
                samples.append({'img': d_img, 'cls': d_cls, 'hist': d_hist})
            cPickle.dump(samples,
                         open(os.path.join(cache_dir, sample_cache), "wb"))

        return samples


if __name__ == "__main__":
    d = Daisy()

    # Create my samples
    db = Database("database\\train")
    print("Train databse created.")
    samples = d.make_samples(db, sample_name="train")
    print("Train samples created.")

    test = Database("database\dev")
    print("Test databse created.")
    sample_test = d.make_samples(test, sample_name="dev")
    print("Test samples created.")

    # Find class for each image of my test DB and verify the result
    nb_good_classification = 0
    for img_test in sample_test:
        _, resultes = infer(img_test, samples)
        real_cls = KNN(resultes, db.get_class())
Example #26
0
import login as log
from extra_vars import color
from DB import Database as db

db.init("DB/data.json")
# If you can't see color or password doesn't work: alias python='winpty python.exe'
print(color("\nWelcome to Hyper Studios!\n"))
log.choice()
            for cls, cls_APs in APs.items():
                MAP = np.mean(cls_APs)
                cls_MAPs.append(MAP)
            r = "{},{},{},{}".format(",".join(combination), d, d_type,
                                     np.mean(cls_MAPs))
            print(r)
            result.write('\n' + r)
        print()
    result.close()


if __name__ == "__main__":

    DB_train_dir = '../database/train'
    DB_train_csv = 'data_train.csv'
    db = Database(DB_train_dir, DB_train_csv)

    #  DB_test_dir = '../database/test'
    #  DB_test_csv = 'data_test.csv'

    DB_test_dir = '../database/validation'
    DB_test_csv = 'data_validation.csv'

    db2 = Database(DB_test_dir, DB_test_csv)

    # evaluate features double-wise
    evaluate_feats(db, db2, N=2, d_type='d1')

    # evaluate features triple-wise
    evaluate_feats(db, db2, N=3, d_type='d1')
Example #28
0
def test_plate_hash():
    DB = Database()
    plate0 = DB.get_vehicles()[0]

    if plate0:
        assert DB.hash_exists(plate0[0])
Example #29
0
 def __init__(self):
     self.db = Database()
Example #30
0
class PlateReader:
    def __init__(self, roi_id):
        """PlateReader looks for unprocessed image files, detects vehicles' license plates
        and caches associated emissions to database for reporting.

        Args:
            roi_id (int): Identifier of processed region in image

        Args read from environment variables
            POLL_FOLDER: Folder to look for images and metadata
            DEBUG: Flag indicating whether debug logs and features are enabled
        """
        logging.basicConfig(level=logging.INFO)
        self.roi_id = roi_id
        self.poll_folder = os.getenv("POLL_FOLDER")
        self.DB = Database()
        self.OCR = ocr_reader

        self.raw_plate_history = []
        self.debug = os.getenv("DEBUG", "").lower() == "true"
        self.reveal_plate = os.getenv("LOG_PLAINTEXT_PLATE",
                                      "").lower() == "true"

        self.analyser = ROIPlateAnalyser(roi_id, self.debug)

    def start(self):
        """Start polling for unprocessed frames"""
        logging.info(f"Starting polling for ROI {self.roi_id}")

        while True:
            started = time.time()
            files = self._get_files()

            self._process_files(files)
            if files:
                logging.info("Loop process time {}s, {} files".format(
                    (time.time() - started), len(files)))
            if self.debug:
                sys.exit(1)
            time.sleep(1)

    def _get_files(self):
        """Return batch of image filenames with associated metadata
        from filename and separate JSON file

        Returns:
            List: List of dictionaries containing information about images to process
                  and related metadata
        """
        if ENCRYPT:
            suffix = "aes"
        else:
            suffix = "jpg"
        files = []

        for f in sorted(os.listdir(self.poll_folder)):
            if f.endswith(
                    "json"
            ):  # check for metadata since it's written after image
                try:
                    parsed = parse.parse(
                        "{stream}_ts_{ts}_roi_{roi}_f_{frame}." + "json", f)
                    if int(parsed["roi"]) != self.roi_id:
                        continue
                    files.append({
                        "stream":
                        parsed["stream"],
                        "timestamp":
                        timestamp_to_date(parsed["ts"]),
                        "frame_no":
                        parsed["frame"],
                        "ROI":
                        parsed["roi"],
                        "path":
                        os.path.join(self.poll_folder,
                                     f.replace("json", suffix)),
                        "metadata":
                        self._read_metadata(os.path.join(self.poll_folder, f)),
                    })
                except Exception as e:
                    logging.error("ERROR READING FILES: {}".format(e))
                    pass
            if len(files) >= MAX_BATCH_SIZE:
                break
        if self.debug:
            return files[0:100]
        # return only few at a time
        return files

    def _get_plate(self, path):
        """Read image from given path and perform OCR

        Args:
            path (str): Path to image file

        Returns:
            Dict: License plate recognition results
        """
        if ENCRYPT:
            img = read_encrypted_image(path)
            plates = self.OCR.read_array(bytes(bytearray(img)))
        else:
            plates = self.OCR.read_file(path)
        plates["file"] = path
        return plates

    def _read_metadata(self, path):
        """Read image frame metadata from JSON file.
        Metadata contains e.g. object detection results, ROI offset etc.

        Args:
            path (str): Path to JSON file containing image metadata

        Returns:
            Dict or None: Return image metadata as dictionary or None if unsuccessful
        """
        data = None
        with open(path, mode="r", encoding="utf-8") as f:
            data = json.load(f)

        return data

    def _process_files(self, files):
        """Process set of files and remove after them after processing

        Args:
            files (List): List of frame metadata
        """
        if len(files) == 0:
            return

        self.raw_plate_history = []
        logging.info("LAG: {}".format(datetime.datetime.now() -
                                      files[0]["timestamp"]))
        for file in files:
            # Yolo saw an object here
            if len(file["metadata"]["detections"]) > 0:
                plate = self._get_plate(file["path"])
                try:
                    for temp in plate["results"]:
                        logging.info("ALPR like: {}".format(
                            get_obfuscated_plate(temp["plate"])))
                except Exception:
                    pass
                file["plates"] = plate
                self.raw_plate_history.append(file)

            # Delete files when data has been read
            try:
                os.remove(file["path"])
            except FileNotFoundError:
                pass
            try:
                os.remove(file["path"].replace(".jpg", ".json"))
            except FileNotFoundError:
                pass

        # analyse known plates
        roi_plates = self.analyser.analyse_plates(self.raw_plate_history)

        for detected_plate in roi_plates:
            self._find_emissions_and_cache(detected_plate)
            plate_text = detected_plate["plate_text"]
            plate_hashed = create_hash(plate_text)
            if self.reveal_plate:
                logging.info(f"ROI: {self.roi_id}, {plate_text}")
            else:
                logging.info(f"ROI: {self.roi_id}, {plate_hashed}")
            # Placeholder:
            # - hash plate
            # - get emission info for the hashed plate
            # - insert emission to local database to be sent out later.
            # emissions = self.DB.get_vehicle(plate_hashed)
            # if emissions:
            #     self.DB.write_cache(detected_plate["timestamp"], emissions)

    def _find_emissions_and_cache(self, detected_plate):
        """Retrieve emissions from database and write to cache for sending.
        If license plate is known and found then actual emissions are read,
        otherwise average for the vehicle type is used.

        Args:
            detected_plate (str): License plate text or string identifier for an unknown vehicle

        TODO:
            Write average vehicle to cache

        Returns:
            bool: True if emission caching was successful
        """
        plate_text = detected_plate["plate_text"]
        if plate_text.startswith(UNKNOWN_VEHICLE_PREFIX):
            # TODO: retrieve average emissions based on detected_plate["label"]
            return True
        else:
            vehicle = self.DB.get_vehicle(create_hash(plate_text))

            if vehicle:
                self.DB.write_cache(str(detected_plate["timestamp"]), vehicle)
                return True

        return False
Example #31
0
 def get_db(self, conf):
     db = Database(**conf)
     return db.session
Example #32
0
		def sort(xxx_todo_changeme):
			(i, (ID, flip)) = xxx_todo_changeme
			views, stars = Database.GetFlipnote(ID, flip)[1:3]
			return int(stars)*110 + int(views)/10 - i
Example #33
0
            res_model = res_model.cuda()
        samples = []
        img = imageio.imread(q_img, pilmode="RGB")
        img = img[:, :, ::-1]  # switch to BGR
        img = np.transpose(img, (2, 0, 1)) / 255.
        img[0] -= means[0]  # reduce B's mean
        img[1] -= means[1]  # reduce G's mean
        img[2] -= means[2]  # reduce R's mean
        img = np.expand_dims(img, axis=0)
        try:
            if use_gpu:
                inputs = torch.autograd.Variable(
                    torch.from_numpy(img).cuda().float())
            else:
                inputs = torch.autograd.Variable(torch.from_numpy(img).float())
                d_hist = res_model(inputs)[pick_layer]
                d_hist = d_hist.data.cpu().numpy().flatten()
                d_hist /= np.sum(d_hist)  # normalize
        except:
            pass
        return d_hist


if __name__ == "__main__":
    # evaluate database
    db = Database()
    obj = Embeddings()
    q_img = "database/images/15970.jpg"
    ret = obj.make_hist(q_img)
    print(ret)
Example #34
0
                        inputs = torch.autograd.Variable(
                            torch.from_numpy(img).float())
                    d_hist = vgg_model(inputs)[pick_layer]
                    d_hist = np.sum(d_hist.data.cpu().numpy(), axis=0)
                    d_hist /= np.sum(d_hist)  # normalize
                    samples.append({
                        'img': d_img,
                        'cls': d_cls,
                        'hist': d_hist
                    })
                except BaseException:
                    pass
            cPickle.dump(
                samples, open(os.path.join(cache_dir, sample_cache), "wb",
                              True))

        return samples


if __name__ == "__main__":
    # evaluate database
    DB = Database()
    APs = evaluate_class(DB, f_class=VGGNetFeat, d_type=d_type, depth=depth)
    cls_MAPs = []

    for cls, cls_APs in APs.items():
        MAP = np.mean(cls_APs)
        print("Class {}, MAP {}".format(cls, MAP))
        cls_MAPs.append(MAP)
    print("MMAP", np.mean(cls_MAPs))