def test_equals(self):
     data = 123
     filter = Filter(equals=123)
     self.assertTrue(filter(data))
     data = '123'
     self.assertTrue(filter(data))
     filter = Filter(neq='abc')
     self.assertTrue(filter(data))
Example #2
0
 def initFilter(self):
     self.chain = FilterChain()
     self.chain._filters.append(
         Filter(FilterType.LShelving, self.LOW_EQ, 0, 1, enabled=True))
     # self.chain._filters.append(Filter(FilterType.HShelving, deffs[4], 0, 1, enabled = True))
     # self.chain._filters.append(Filter(FilterType.Peak, deffs[0], 0, 1, enabled = True))
     self.chain._filters.append(
         Filter(FilterType.Peak, self.HIGH_EQ, 0, 1, enabled=True))
     # self.chain._filters.append(Filter(FilterType.LPButter, deffs[3], 0, 1, enabled = True))
     # self.chain._filters.append(Filter(FilterType.HPButter, deffs[3], 0, 1, enabled = True))
     self.chain.reset()
Example #3
0
def initFilter():
    global deffs, chain, fs
    chain = FilterChain()
    chain._filters.append(
        Filter(FilterType.LShelving, LOW_EQ, 0, 1, enabled=True))
    # chain._filters.append(Filter(FilterType.HShelving, deffs[4], 0, 1, enabled = True))
    # chain._filters.append(Filter(FilterType.Peak, deffs[0], 0, 1, enabled = True))
    chain._filters.append(Filter(FilterType.Peak, HIGH_EQ, 0, 1, enabled=True))
    # chain._filters.append(Filter(FilterType.LPButter, deffs[3], 0, 1, enabled = True))
    # chain._filters.append(Filter(FilterType.HPButter, deffs[3], 0, 1, enabled = True))
    chain.reset()
Example #4
0
 def test_melif(self):
     data, target = self.basehock['X'], self.basehock['Y']
     _filters = [
         Filter('GiniIndex', cutting_rule=GLOB_CR["Best by value"](0.4)),
         # Filter('FitCriterion', cutting_rule=GLOB_CR["Best by value"](0.0)),
         Filter(GLOB_MEASURE["FRatio"](data.shape[1]),
                cutting_rule=GLOB_CR["Best by value"](0.6)),
         Filter('InformationGain',
                cutting_rule=GLOB_CR["Best by value"](-0.4))
     ]
     melif = Melif(_filters, f1_score)
     melif.fit(data, target)
     estimator = SVC()
     melif.run(GLOB_CR['K best'](50), estimator)
Example #5
0
def build_soft_fusion_kernel(loops, loop_chain_index):
    """
    Build AST and :class:`Kernel` for a sequence of loops suitable to soft fusion.
    """

    kernels = [l.kernel for l in loops]
    asts = [k._ast for k in kernels]
    base_ast, fuse_asts = dcopy(asts[0]), asts[1:]

    base_fundecl = FindInstances(ast.FunDecl).visit(base_ast)[ast.FunDecl][0]
    base_fundecl.body[:] = [ast.Block(base_fundecl.body, open_scope=True)]
    for unique_id, _fuse_ast in enumerate(fuse_asts, 1):
        fuse_ast = dcopy(_fuse_ast)
        fuse_fundecl = FindInstances(
            ast.FunDecl).visit(fuse_ast)[ast.FunDecl][0]
        # 1) Extend function name
        base_fundecl.name = "%s_%s" % (base_fundecl.name, fuse_fundecl.name)
        # 2) Concatenate the arguments in the signature
        base_fundecl.args.extend(fuse_fundecl.args)
        # 3) Uniquify symbols identifiers
        fuse_symbols = SymbolReferences().visit(fuse_ast)
        for decl in fuse_fundecl.args:
            for symbol, _ in fuse_symbols[decl.sym.symbol]:
                symbol.symbol = "%s_%d" % (symbol.symbol, unique_id)
        # 4) Concatenate bodies
        base_fundecl.body.extend(
            [ast.FlatBlock("\n\n// Fused kernel: \n\n")] +
            [ast.Block(fuse_fundecl.body, open_scope=True)])

    # Eliminate redundancies in the /fused/ kernel signature
    Filter().kernel_args(loops, base_fundecl)

    return Kernel(kernels, base_ast, loop_chain_index)
Example #6
0
    def updateFilter(self, i, param, val):
        oldf = self.chain._filters[i]
        type = oldf._type
        fc = oldf._fc
        g = oldf._g
        Q = oldf._Q

        if param == Params.TYPE:
            type = val
            Q = 1                      
        elif param == Params.F:
            fc = int(self.nodes[i].ctrls[2].text()) * 2 / fs
        elif param == Params.G:
            g = float(self.nodes[i].ctrls[3].text())
        elif param == Params.Q:
            if type == FilterType.LPButter or type == FilterType.HPButter:
                Q = val
            elif type == FilterType.Peak:
                Q = val / 10
            elif type == FilterType.LShelving or FilterType.HShelving:
                Q = val / 100

        self.chain.updateFilt(i, Filter(type, fc, g, Q))
        if param == Params.TYPE:            
            self.updateControls(i, type)
            self.adjustSliderRange(i, type) 

        self.updateSliderLabel(i)    
Example #7
0
 def test_where(self):
     l = ['ab', 'bc', 'ca', 'AB']
     self.assertListEqual(SequenceChain(l).where().reveal(), l)
     self.assertListEqual(
         SequenceChain(l).where(Filter(eq='ab')).reveal(), ['ab'])
     self.assertListEqual(
         SequenceChain(l).where(Filter(contains='a')).reveal(),
         ['ab', 'ca'])
     self.assertListEqual(
         SequenceChain(l).where(Filter(icontains='a')).reveal(),
         ['ab', 'ca', 'AB'])
     self.assertListEqual(
         SequenceChain(l).where(Filter(istartswith='a')).reveal(),
         ['ab', 'AB'])
     self.assertListEqual(
         SequenceChain(l).where(Filter(contains='a',
                                       contains_='b')).reveal(),
         ['ab', 'bc', 'ca'])
def split_lines(binary,
                contour,
                min_size,
                thresh=0.5,
                roi=False,
                offset=(0, 0)):
    if not roi:
        roi_slice = utils.get_roi_slice(contour, offset)
        binary = binary[roi_slice]
    # cv2.imshow("bin", binary)
    # ACHTUNG: may not work correct if `roi` is not correct contour's roi
    binary = binary & np.array(utils.contour_mask(contour), dtype=bool)

    means = binary.mean(axis=1)

    # THRESH_INV
    means[means < thresh] = -1
    means[means >= thresh] = 0
    means[means == -1] = 1

    # Find where gaps starts and ends
    means = np.pad(means, 1, 'constant')
    means = means - np.roll(means, 1)
    begins = (means == 1).nonzero()[0] - 1  # -1 caused by pad
    ends = (means == -1).nonzero()[0] - 1

    # Getting ars to cut
    args = (begins + ends) / 2
    args = args[args >= min_size]
    args = args[args <= means.shape[0] - min_size]
    if args.shape[0] == 0:
        return [contour]

    lines = []
    prev = 0
    args = np.append(args, means.shape[0] - 2)
    for arg in args:  # TODO: make this code reusable for fragmentation
        line_roi = binary[prev:arg, :]
        curr_off = (contour.rect.left, contour.rect.top + prev)
        conts = [
            Contour(c) for c in cv2.findContours(line_roi,
                                                 cv2.RETR_LIST,
                                                 cv2.CHAIN_APPROX_SIMPLE,
                                                 offset=curr_off)[0]
        ]
        lines.extend(conts)
        prev = arg

    flt = Filter()
    flt.add_filter("min_area", min_size * min_size)
    lines = flt.filter(lines)
    if len(lines) <= 1:
        return [contour]

    return lines
Example #9
0
    def updateFilter(self, i, fc, g, Q):
        oldf = self.chain._filters[i]
        type = oldf._type
        # print oldf._type, oldf._fc, oldf._g, oldf._Q

        # fc_val = fc * 2 / fs
        # print fc_val, g, Q

        f = Filter(type, fc, g, Q)
        self.chain.updateFilt(i, f)
        # chain.changeFilt(i, type, fc, g, Q)
        self.chain.reset()
Example #10
0
 def mouseMoveEvent(self, e):
     QFrame.mouseMoveEvent(self, e)
     if self.dragged:
         pos, i = e.pos(), self.focused
         fc, g = fromPixelCords(self.width(), self.height(), pos, self.xaxis, self.raxis)
         old = self.parent().chain._filters[i]
         if old._type not in (FilterType.Peak, FilterType.LShelving, FilterType.HShelving):
             g = 0
         self.parent().chain.updateFilt(i,Filter(old._type, fc * 2 / fs, g, Q = old._Q))
         self.updateHandles()
         self.parent().updateChainTF()
         self.update()
Example #11
0
    def __compare_measure__(self, measure_name, data):
        data, target = data['X'], data['Y']

        start_time = time.time()
        res = Filter(measure_name, GLOB_CR["K best"](6)).run(data, target)
        print("ITMO_FS time --- %s seconds ---" % (time.time() - start_time))

        start_time = time.time()
        res = SelectKBest(GLOB_MEASURE[measure_name],
                          k=6).fit_transform(data, target)
        print("SKLEARN time --- %s seconds ---" % (time.time() - start_time))
        print(data.shape, '--->', res.shape)
Example #12
0
def updateFilter(i, fc, g, Q):
    global chain
    global fs
    oldf = chain._filters[i]
    type = oldf._type
    # print oldf._type, oldf._fc, oldf._g, oldf._Q

    # fc_val = fc * 2 / fs
    # print fc_val, g, Q

    f = Filter(type, fc, g, Q)
    chain.updateFilt(i, f)
    # chain.changeFilt(i, type, fc, g, Q)
    chain.reset()
Example #13
0
def main():
    filter = Filter(model_file="model.p", scaler_file="scaler.p")
    clip = VideoFileClip("project_video_short3.mp4")
    cnt = 0
    stop_frame_num = 113
    for img in clip.iter_frames():
        cnt += 1
        if (cnt == stop_frame_num):
            if img.shape[2] == 4:
                img = img[:, :, :3]
            ret = filter.pipepine(img)
            plt.figure(figsize=(16, 10))
            plt.imshow(filter.diagScreen)
            plt.subplots_adjust(left=0.03, bottom=0.03, right=1, top=1)
            plt.show()
Example #14
0
    def fetch_stocks(self, params):
	''' if params==all fetch all stocks get_all_categories'''
        filter = Filter()
        parser = Parse()
        stocklist = []
        if params=='all':
            cats = filter.get_all_categories()
            for cat in cats:
                params = [('sc', cat)]
                try:
                    stocklist.extend(self.fetch_stocks(params))
                except Exception, e:
                    print cat 
                    print e
                    #print stocklist
                    print 'exited prematurely'
                    exit()
Example #15
0
def scrape(data):
    us_apps_filter = Filter(
        field='app_store_url',
        op=operator.contains,
        value='/us/'
    )
    filter_chain = FilterChain()
    filter_chain.add_filter(us_apps_filter)

    us_apps = filter_chain.filter(data)

    gathered_data = gather_data(us_apps)

    spanish_and_tagalog_filter = ListContainedinListFilter(
        field='languages',
        op=operator.contains,
        value=[u'Spanish', u'Tagalog']
    )

    filter_chain = FilterChain()

    filter_chain.add_filter(spanish_and_tagalog_filter)

    spanish_and_tagalog_data = filter_chain.filter(gathered_data)

    insta_in_name_filter = CaseInsensitiveStringFilter(
        field='name',
        op=operator.contains,
        value='insta'
    )

    filter_chain = FilterChain()

    filter_chain.add_filter(insta_in_name_filter)

    insta_in_name_data = filter_chain.filter(gathered_data)

    filtered_data = {
        'apps_in_spanish_and_tagalog': [_d.get('app_identifier') for _d in spanish_and_tagalog_data],
        'apps_with_insta_in_name': [_d.get('app_identifier') for _d in insta_in_name_data]
    }
    write_json_to_file(filtered_data, 'filtered_apps.json')
    write_json_to_file(gathered_data, 'apps.json')
Example #16
0
def main():
    filter = Filter(model_file="model.p", scaler_file="scaler.p")
    #filter.predict_batch(image_path=glob("./labeled_data_smallset/vehicles_smallset/**/*.*"))
    #filter.predict_batch(image_path=filter.test_clf_image_paths)
    frame = None
    cnt = 0
    for path in filter.test_video_images_path:
        cnt += 1
        if frame != None and cnt == frame:
            image = cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB)
            final_image = filter.pipepine(image)
            plt.imshow(final_image)
            plt.show()
            break
        elif frame == None:
            image = cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB)
            final_image = filter.pipepine(image)
            plt.imshow(final_image)
            plt.show()
    # image_res, centroids_and_sizes = filter.sliding_box_multi_level(image, level=2)
    """
Example #17
0
    contents = os.listdir(directory)
    files = []

    for c in contents:
        if os.path.isfile(os.path.join(directory, c)) and os.path.splitext(
                c)[-1] in correct_extensions and os.path.splitext(
                    c)[0] not in banned:
            files.append(os.path.join(directory, c))
        elif os.path.isdir(os.path.join(directory,
                                        c)) and c + "/" not in banned:
            files += get_files_recursive(os.path.join(directory, c),
                                         file_filter)
    return files


file_filter = Filter()
"""
Enter directory for searching
"""
while True:
    search_dir = input("Directory: ")
    if os.path.exists(search_dir):
        break
    print("Directory doesn't exist!")
print("\n")
"""
Enter extensions to add
"""
while True:
    ext = input("Enter extension (end): ")
    if ext == "end":
Example #18
0
 def render_POST(self, request):
     global master, key, filters
     log.debug(request.path)
     
     if request.path == "/handshake": # Generates new key. All other POST bodies are encoded with this secret key.
         key.generateKey(long(request.content.getvalue()))
         log.debug(key.getKey())
         log.debug("Handshake complete. Secret key generated.")
         return str(key.publicKey)
     
     log.debug(util.decode(request.content.getvalue(), key.getKey()))
     reqJSON = json.loads(util.decode(request.content.getvalue(), key.getKey())) # Decode POST body 
     if request.path[:5] == "/init":
         if request.path == "/init":
             log.info("Master is online. Initial retrieval of DNS settings begun.")
             
             # Remove all conf files to create fresh ones
             try:
                 os.remove(ns_file)
             except:
                 log.warning("NS file (" + ns_file + ") has already been deleted.")
             try:
                 os.remove(a_file)
             except:
                 log.warning("A file (" + a_file + ") has already been deleted.")
             try:
                 os.remove(ptr_file)
             except:
                 log.warning("PTR file (" + ptr_file + ") has already been deleted.")
             
             # Create new conf files
             ns_f = open(ns_file, 'a')
             a_f = open(a_file, 'a')
             ptr_f = open(ptr_file, 'a')
             
             # Write headers to each new conf file
             ns_f.write("######### NS Records #########\n\n")
             a_f.write("######### A Records #########\n\n")
             ptr_f.write("######### PTR Records #########\n\n")
     
             ns_f.close()
             a_f.close()
             ptr_f.close()
             
             filters = {}
             return json.dumps({'success': True})
         # Endpoints to initialize each record type
         if request.path[5:] == '/ns':
             communicator.receiveFromFile(ns_file, reqJSON, filters)
             return json.dumps({'success': True})
         elif request.path[5:] == '/a':
             communicator.receiveFromFile(a_file, reqJSON, filters)
             return json.dumps({'success': True})
         elif request.path[5:] == '/ptr':
             communicator.receiveFromFile(ptr_file, reqJSON, filters)
             return json.dumps({'success': True})
     elif request.path[:4] == '/ns/':
         if request.path[4:] == 'delete':
             ns_records = communicator.fromJSON(reqJSON, log)['ns_records']
             
             communicator.logSet(ns_records, log, "- ")
             communicator.deleteFromFile(ns_records, ns_file, log)
             request.responseHeaders.addRawHeader(b"content-type", b"application/json")
             return json.dumps({'success': True})
         elif request.path[4:] == "add":
             ns_records = communicator.fromJSON(reqJSON, log)['ns_records']
             
             communicator.logSet(ns_records, log, "+ ")
             communicator.addToFile(ns_records, ns_file, filters, log)
             request.responseHeaders.addRawHeader(b"content-type", b"application/json")
             return json.dumps({'success': True})
         else:
             request.setResponseCode(501)
             return ""
     elif request.path[:3] == '/a/':
         if request.path[3:] == 'delete':
             a_records = communicator.fromJSON(reqJSON, log)['a_records']
             
             communicator.logSet(a_records, log, "- ")
             communicator.deleteFromFile(a_records, a_file, log)
             request.responseHeaders.addRawHeader(b"content-type", b"application/json")
             return json.dumps({'success': True})
         elif request.path[3:] == "add":
             a_records = communicator.fromJSON(reqJSON, log)['a_records']
             
             communicator.logSet(a_records, log, "+ ")
             communicator.addToFile(a_records, a_file, filters, log)
             request.responseHeaders.addRawHeader(b"content-type", b"application/json")
             return json.dumps({'success': True})
         else:
             request.setResponseCode(501)
             return ""
     elif request.path[:5] == '/ptr/':
         if request.path[5:] == 'delete':
             ptr_records = communicator.fromJSON(reqJSON, log)['ptr_records']
             
             communicator.logSet(ptr_records, log, "- ")
             communicator.deleteFromFile(ptr_records, ptr_file, log)
             request.responseHeaders.addRawHeader(b"content-type", b"application/json")
             return json.dumps({'success': True})
         elif request.path[5:] == "add":
             ptr_records = communicator.fromJSON(reqJSON, log)['ptr_records']
             
             communicator.logSet(ptr_records, log, "+ ")
             communicator.addToFile(ptr_records, ptr_file, filters, log)
             request.responseHeaders.addRawHeader(b"content-type", b"application/json")
             return json.dumps({'success': True})
         else:
             request.setResponseCode(501)
             return ""
     elif request.path == '/filters':
         log.debug("Filters:")
         filters[reqJSON['code']] = Filter(reqJSON['filter'])
         log.info("Added filter '" + reqJSON['code'] + "'")
         log.debug(json.dumps(reqJSON['filter']))
         request.responseHeaders.addRawHeader(b"content-type", b"application/json")
         return json.dumps({'success': True})
     elif request.path == '/reload':
         log.info("DNS settings up to date. Reloading.")
         util.execute("systemctl restart dnsmasq")
         log.debug("DNSMasq reloaded.")
         return json.dumps({'success': True})
     else:
         request.setResponseCode(501)
         return ""
Example #19
0
 def test_iequals(self):
     data = 'ABCDE'
     filter = Filter(ieq='abcde')
     self.assertTrue(filter(data))
Example #20
0
 def test_filter(self):
     data, target = load_iris(True)
     res = Filter("SpearmanCorr",
                  GLOB_CR["Best by value"](0.9999)).run(data, target)
     print("SpearmanCorr:", data.shape, '--->', res.shape)
Example #21
0
 def __test_mrmr(cls, data, target):
     n = data.shape[1] / 2
     res = Filter(GLOB_MEASURE["MrmrDiscrete"](n),
                  GLOB_CR["Best by value"](0.0)).run(data, target)
     print("Mrmr:", data.shape, '--->', res.shape)
Example #22
0
    def render_POST(self, request):
        """Handle POST requests."""
        global master, log, key, agents, filters, lock
        log.info(request.path)

        reqJSON = json.loads(request.content.getvalue())
        if request.path == "/handshake":  # New agent initializes secret key
            # Retrieve public key
            agent_pub = long(reqJSON['key'])

            # Parse agent address
            agent_addr = request.getClientIP() + ":" + str(reqJSON['port'])

            # Find the agent
            ret = ""
            lock.acquire()
            try:
                for x in range(0, len(agents)):
                    if agents[x].getName() == reqJSON['name']:  # If found
                        if not agents[x]:  # If was dead
                            log.info("Recognized new agent: " +
                                     agents[x].getName() + " is now alive.")

                        # Turn on agent and generate secret key
                        agents[x].setStatus(True)
                        agents[x].generateKey(agent_pub)
                        log.debug(agents[x].getKey())
                        ret = agents[x].getPublicKey()
            finally:
                lock.release()

            # If agent was not recognized
            if not ret:
                temp = Agent(agent_addr, reqJSON['name'], True)
                temp.generateKey(agent_pub)
                ret = temp.getPublicKey()
                log.debug(temp.getKey())
                lock.acquire()
                try:
                    agents.append(temp)
                finally:
                    lock.release()
                log.info("Recognized new agent: " + temp.getName() +
                         " is now alive.")

                dumpContent()

            # Return master's public key
            return str(ret)
        elif request.path == "/newagent" and request.getClientIP(
        ) == "127.0.0.1":
            a = Agent(reqJSON['ip'] + ":" + reqJSON['port'], reqJSON['name'],
                      True)

            shakeHands(a)

            lock.acquire()
            try:
                agents.append(a)
            finally:
                lock.release()

            if a:
                init_one(a, log)

            dumpContent()
            log.info('Agent \'' + reqJSON['name'] +
                     '\' has been added from web manager.')

            request.setHeader("content-type", "application/json")
            return json.JSONEncoder().encode({'success': True})
        elif request.path == "/delagent" and request.getClientIP(
        ) == "127.0.0.1":
            lock.acquire()
            try:
                for x in range(0, len(agents)):
                    if agents[x].getName() == reqJSON['name']:
                        del agents[x]
                        break
            finally:
                lock.release()

            dumpContent()
            log.info('Agent \'' + reqJSON['name'] +
                     '\' has been deleted from web manager.')

            request.setHeader("content-type", "application/json")
            return json.JSONEncoder().encode({'success': True})
        elif request.path == "/newfilter" and request.getClientIP(
        ) == "127.0.0.1":
            lock.acquire()
            try:
                filters[reqJSON['name']] = Filter(reqJSON['filt'])
                for agent in agents:
                    if agent and filters[reqJSON['name']].isUsed(
                            agent.getName()):
                        init_one(agent, log)
            finally:
                lock.release()

            dumpContent()
            log.info('Filter \'' + reqJSON['name'] +
                     '\' has been added from web manager.')

            request.setHeader("content-type", "application/json")
            return json.JSONEncoder().encode({'success': True})
        elif request.path == "/delfilter" and request.getClientIP(
        ) == "127.0.0.1":
            reloads = []
            for agent in agents:
                lock.acquire()
                try:
                    if agent and filters[reqJSON['name']].isUsed(
                            agent.getName()):
                        reloads.append(agent)
                    else:
                        lock.release()
                finally:
                    lock.release()

            lock.acquire()
            try:
                del filters[reqJSON['name']]
            finally:
                lock.release()

            dumpContent()
            for agent in reloads:
                init_one(agent, log)

            log.info('Filter \'' + reqJSON['name'] +
                     '\' has been deleted from web manager.')

            request.setHeader("content-type", "application/json")
            return json.JSONEncoder().encode({'success': True})
        else:
            request.setResponseCode(501)
            return ""
Example #23
0
    logToConsole = cfg.getboolean(section, 'logToConsole')
    cfgLogLevel = cfg.get(section, 'cfgLogLevel')
    log_max_size = cfg.getint(section, 'log_max_size')
    log_max_backup = cfg.getint(section, 'log_max_backup')

    section = 'Settings'
    serverIP = cfg.get(section, 'serverIP')
    port = cfg.getint(section, 'port')
    shakeInterval = cfg.getint(section, 'handshake')
    checkInterval = cfg.getint(section, 'statusCheck')
    pollInterval = cfg.getint(section, 'poll')
    filters = {}
    json_fl = join(installPath, cfg.get(section, 'content'))
    json_from_fl = json.load(open(json_fl))
    for filt in json_from_fl['filters']:
        filters[filt] = Filter(json_from_fl['filters'][filt])
    agents = []
    for agent in json_from_fl['agents']:
        agents.append(Agent(agent['addr'], agent['name']))

    section = 'Email Settings'
    email_sender = cfg.get(section, 'from')
    receivers = cfg.get(section, 'receivers').split(',')

    section = 'Database'
    host = cfg.get(section, 'host')
    db_port = cfg.getint(section, 'port')
    user = cfg.get(section, 'user')
    password = cfg.get(section, 'password')
    db = cfg.get(section, 'db')
Example #24
0
from tensorflow.keras.models import model_from_json
import numpy as np
from datagenerator import FacialKeyPointsDataset
from filters import Filter

TYPE_OF_DATA_AND_MODEL = 'vector'

flags = {
    "detect_faces": False,
    "draw_keypts": False,
    "filter": None,
    "run": True
}

filters = [
    Filter("images/filter1.png", 17, (25, 29), (2, 16), offset=(-10, 0)),
]

face_cascade = cv2.CascadeClassifier(
    'detector_architectures/haarcascade_frontalface_default.xml')

datasetgen = FacialKeyPointsDataset(
    csv_file='data/training_frames_keypoints.csv',
    root_dir='data/training/',
    normalization=TYPE_OF_DATA_AND_MODEL)

# load json and create model
json_file = open(
    'models/model_{}_batchnorm_194.json'.format(TYPE_OF_DATA_AND_MODEL), 'r')
loaded_model_json = json_file.read()
json_file.close()
Example #25
0
 def test_regexp(self):
     data = 'xx10xx'
     filter = Filter(search='\d')
     self.assertTrue(filter(data))
     filter = Filter(match='\d')
     self.assertFalse(filter(data))
Example #26
0
    def fetch_stocks(self, params):
        filter = Filter()
        parser = Parse()

        url = filter.build_query_string(params)
        results = parser.parse(url, [])
def find_text_lines(original,
                    thresh=0.02,
                    min_size=4,
                    max_size=12,
                    spacing=1.8,
                    min_length=1,
                    otsu=False,
                    x_only=False):
    def _threshold_normal(_image, _thresh):
        return np.uint8(
            cv2.threshold(_image,
                          _thresh * utils.dtype_limits(_image)[1], 255,
                          cv2.THRESH_BINARY)[1])

    def _threshold_otsu(_image, *args):  # Careful with that axe, Eugene
        return cv2.threshold(
            np.uint8(_image / utils.dtype_limits(_image)[1] * 255.), 0, 255,
            cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

    if otsu:
        get_thresh = _threshold_otsu
    else:
        get_thresh = _threshold_normal

    def _find_text_preprocess(_image):
        # _image = cv2.bilateralFilter(_image, -1, 64, 3)
        # if gauss:
        #     _image = cv2.medianBlur(_image, 3)
        # cv2.imshow('prep', _image)
        if len(_image.shape) > 2:
            _image = cv2.cvtColor(_image, cv2.COLOR_BGR2GRAY)
        # image = cv2.equalizeHist(image)
        return _image

    def _get_diff(_image):
        # _image = cv2.medianBlur(_image, 5)
        # _image = cv2.GaussianBlur(_image, (3, 3), 5)
        _image = utils.differentiate(_image, metric=utils.METRIC_MAX)
        return utils.differentiate(_image, metric=utils.METRIC_MIN)

    if spacing != 0:
        ksize = int(min_size * spacing)
    else:
        ksize = 1

    filters = Filter()
    # filters.add_filter("outer")
    filters.add_filter("min_area", min_size * min_size * min_length * 12)
    # filters.add_filter("min_fill", 0.3)
    filters.add_filter("min_aspect_ratio", 0.1)
    # filters.add_filter("smoothness", 5)

    # if diffs is None:
    #     diffs = utils.differentiate(np.float32(_find_text_preprocess(original)) / 255.,
    #                                 xkernel=5, ykernel=5, metric=utils.METRIC_SPLIT)
    # if x_only:
    #     diff = utils.differentiate(np.float32(_find_text_preprocess(original)) / 255.,
    #  xkernel=5, ykernel=5, metric=utils.METRIC_SPLIT)[0]
    # else:
    #     diff = utils.differentiate(np.float32(_find_text_preprocess(original)) / 255.,
    # xkernel=5, ykernel=5)
    # diff = utils.differentiate(np.float32(_find_text_preprocess(original) / 255.),
    # metric=utils.METRIC_MIN)

    diff = _get_diff(_find_text_preprocess(original))
    ndiff = diff / diff.max()
    binary = get_thresh(ndiff, thresh)
    # cv2.imshow('diff', binary * 255)
    # Connecting
    connected = cv2.morphologyEx(binary,
                                 cv2.MORPH_CLOSE,
                                 cv2.getStructuringElement(
                                     cv2.MORPH_RECT,
                                     utils.fix_kernel_size(ksize, ksize)),
                                 borderType=cv2.BORDER_CONSTANT,
                                 borderValue=0)
    # cv2.imshow('connected', connected)
    # Filtering
    binary = cv2.morphologyEx(
        connected, cv2.MORPH_OPEN,
        cv2.getStructuringElement(
            cv2.MORPH_RECT,
            utils.fix_kernel_size(int(min_size) - 1,
                                  int(min_size) - 1)))
    # cv2.imshow('bin', binary)
    return filters.filter([
        Contour(c, thresh) for c in cv2.findContours(
            binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    ])
Example #28
0
 def _filter(self, loops):
     return Filter().loop_args(loops).values()
Example #29
0
def main():
    filter = Filter(model_file="model.p", scaler_file="scaler.p")
    image = cv2.imread(filter.ex.car_paths[0])
    filter.extract_half_image_hog(image)
def find_text(original=None,
              diffs=None,
              first_thresh=0.02,
              second_thresh=0.04,
              min_size=4,
              max_size=12,
              hspacing=1.8,
              vspacing=0,
              min_length=1,
              offset=(0, 0),
              otsu=False,
              split=True,
              max_box_rad=(32, 32),
              default_box_rad=(2, 2),
              ret=TEXT_CONTOURS_BOXES):
    """
    Detects text areas on image regardless to its contents

    :param hspacing: Maximal horizontal spacing for symbols connection (relative to min_size)
    :param min_length: Minimal text length (relative to min_size)

    """
    _debug = False

    def _threshold_normal(_image, _thresh):
        return np.uint8(
            cv2.threshold(_image,
                          _thresh * utils.dtype_limits(_image)[1], 255,
                          cv2.THRESH_BINARY)[1])

    def _threshold_otsu(_image, *args):  # Careful with that axe, Eugene
        return cv2.threshold(
            np.uint8(_image / utils.dtype_limits(_image)[1] * 255.), 0, 255,
            cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

    if otsu:
        get_thresh = _threshold_otsu
    else:
        get_thresh = _threshold_normal

    def _find_text_preprocess(_image):
        # image = cv2.bilateralFilter(image, -1, 64, 3)
        _image = cv2.cvtColor(_image, cv2.COLOR_BGR2GRAY)
        # image = cv2.equalizeHist(image)
        return _image

    assert (original is not None or diffs is not None)

    if hspacing != 0:
        ksize_h = int(min_size * hspacing)
    else:
        ksize_h = 1

    if vspacing != 0:
        ksize_v = int(min_size * vspacing)
    else:
        ksize_v = 1

    filters = Filter()
    filters.add_filter("outer")
    filters.add_filter("min_area", min_size * min_size * min_length)
    # filters.add_filter("min_fill", 0.5)
    # filters.add_filter("min_aspect_ratio", min_length)

    # if diffs is None:
    #     diffs = utils.differentiate(np.float32(_find_text_preprocess(original)) / 255.,
    #                                 xkernel=5, ykernel=5, metric=utils.METRIC_SPLIT)
    if diffs is None:
        diffs = utils.differentiate(
            np.float32(_find_text_preprocess(original)) / 255.,
            xkernel=5,
            ykernel=5)
        diffs = (diffs, diffs)

    ndiffs = (diffs[0] / diffs[0].max(), diffs[1] / diffs[1].max())

    if _debug:
        cv2.imshow("raw bin", ndiffs[0] / ndiffs[0].max())

    binary = get_thresh(ndiffs[0], first_thresh)

    if _debug:
        cv2.imshow("bin", binary)

    # Remove too long vertical lines
    sub = cv2.morphologyEx(
        binary, cv2.MORPH_OPEN,
        cv2.getStructuringElement(cv2.MORPH_RECT,
                                  utils.fix_kernel_size(1, max_size)))
    sub = cv2.morphologyEx(sub, cv2.MORPH_CLOSE,
                           cv2.getStructuringElement(cv2.MORPH_RECT, (1, 3)))
    if _debug:
        cv2.imshow("sub", sub)
    binary = cv2.bitwise_xor(binary, sub)

    # Connecting
    connected = cv2.morphologyEx(binary,
                                 cv2.MORPH_CLOSE,
                                 cv2.getStructuringElement(
                                     cv2.MORPH_RECT,
                                     utils.fix_kernel_size(ksize_h, ksize_v)),
                                 borderType=cv2.BORDER_CONSTANT,
                                 borderValue=0)
    if _debug:
        cv2.imshow("connected", connected)

    # Filtering
    binary = cv2.morphologyEx(
        connected, cv2.MORPH_OPEN,
        cv2.getStructuringElement(
            cv2.MORPH_RECT,
            utils.fix_kernel_size(min_length * int(min_size) - 1,
                                  int(min_size) - 1)))
    if _debug:
        cv2.imshow("connected and filtered", binary)

    # 1st detect_angle, not accurate, with max_thresh, not using offset yet
    conts = [
        Contour(c, first_thresh) for c in cv2.findContours(
            binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
    ]
    filtered = filters.filter(conts)

    # Preparing data for floodFill
    if ret == TEXT_BOXES or ret == TEXT_CONTOURS_BOXES:
        second_bin = (get_thresh(ndiffs[0], second_thresh),
                      get_thresh(ndiffs[1], second_thresh))
    else:
        second_bin = (get_thresh(ndiffs[0], second_thresh), None)

    bin_for_ff = cv2.bitwise_or(second_bin[0] * 1., (connected / 255) * 2)
    mask = cv2.bitwise_not(cv2.bitwise_or(binary, connected))
    mask = np.pad(mask, 1, 'constant', constant_values=255)  # add 1px. border

    for c in filtered:
        cv2.floodFill(bin_for_ff,
                      mask, (c.raw[0][0][0], c.raw[0][0][1]),
                      255,
                      flags=4)
    bin_for_ff = np.uint8(
        cv2.threshold(bin_for_ff, 1, 255, cv2.THRESH_BINARY)[1])
    # bin_for_ff = cv2.morphologyEx(bin_for_ff, cv2.MORPH_OPEN,
    # cv2.getStructuringElement(cv2.MORPH_RECT,
    # utils.fix_kernel_size(min_length * int(min_size) - 1,
    # int(min_size) - 1)))

    if split:
        bin_for_split = bin_for_ff.copy()
    if _debug:
        cv2.imshow("bin_for_ff", bin_for_ff)
    # (offset[0] - 1) is a workaround for some kind of bug
    # 2nd detect_angle, more accurate, with min_thresh and offset
    conts = [
        Contour(c, first_thresh)
        for c in cv2.findContours(bin_for_ff,
                                  cv2.RETR_LIST,
                                  cv2.CHAIN_APPROX_SIMPLE,
                                  offset=(offset[0] - 1, offset[1]))[0]
    ]
    filtered = filters.filter(conts)

    if not split:
        splitted = filtered
    else:
        splitted = []
        for c in filtered:
            if c.rect.height >= 2 * min_size:
                splitted.extend(
                    split_lines(bin_for_split,
                                c,
                                min_size,
                                offset=(-offset[0], -offset[1])))
            else:
                splitted.append(c)

    if ret == TEXT_CONTOURS:
        return splitted
    else:
        boxes = [
            find_text_box(contour=c,
                          bdiff=second_bin,
                          max_rad=max_box_rad,
                          default_rad=default_box_rad,
                          offset=offset) for c in splitted
        ]
        if ret == TEXT_BOXES:
            return boxes
        elif ret == TEXT_CONTOURS_BOXES:
            return zip(splitted, boxes)