Changeset 16502


Ignore:
Timestamp:
Aug 9, 2016, 9:35:07 AM (3 years ago)
Author:
dferreira
Message:

Caching final results with database added

Location:
internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/Explicit_detector/analyse_app.py

    r16499 r16502  
    77from __future__ import division
    88import json
     9import sqlite3
    910import os
     11import time
    1012import i2v
    1113import pickle
     
    3537        return illust2vec
    3638
    37 def analyse_app(illust2vec, icons, screenshots, description, category, age, size, title):
     39def analyse_app(app_id, app_md5, illust2vec, icons, screenshots, description, category, age, size, title):
    3840
    3941        p = os.path.abspath(os.path.join("../", os.pardir))
    40 
     42        tb_id = 0
    4143        with open(p+"/config.json") as json_data:
    4244                config = json.load(json_data)
     45
     46        # Connect to database
     47        db = sqlite3.connect(config['directories']['final_database'])
     48        c = db.cursor()
     49
     50        # If id exists, app has already been processed.
     51        # If exists, just return the value.
     52        # Otherwise, create a new record in the table
     53        c.execute(''' SELECT ID FROM app WHERE app_id=? ''',(int(app_id),))
     54        res = c.fetchone()
     55
     56        if res:
     57                c.execute(''' SELECT is_mature FROM final_results WHERE for_id=? ''',(res[0],))
     58                res = c.fetchone()
     59                db.close()
     60                return res[0]
     61        else:
     62                c.execute(''' INSERT INTO app (app_id, app_md5) VALUES (?,?) ''',(app_id,app_md5,))
     63                db.commit()
     64                c.execute(''' SELECT ID FROM app WHERE app_id=? ''',(app_id,))
     65                tb_id = c.fetchone()[0]
     66
    4367
    4468        # Tries to load the model for text categorization
     
    5478        screens = []
    5579        for icon in icons:
    56                 icons.append(analyse_explicit(illust2vec, icon))
     80                # Check if has already been analysed.
     81                # If it has, just append the previous result.
     82                # If not, save the new result
     83                c.execute(''' SELECT image_exp, image_safe FROM image_results WHERE url=?''',(icon,))
     84                res = c.fetchone()
     85                if res:
     86                        icons.append(('explicit',res[0]), ('safe',res[1]))
     87                else:
     88                        res = analyse_explicit(illust2vec, icon)
     89                        exp = False
     90                        if res[0][1]>res[1][1]:
     91                                exp = True
     92                        c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?,) ''',(int(tb_id), icon, res[0][1], res[1][1], exp, -1,  "icon",))
     93                        db.commit()
     94                        icons.append(res)
    5795
    5896        for scr in screenshots:
    59                 screens.append(analyse_explicit(illust2vec, scr))
     97                # Check if has already been analysed.
     98                # If it has, just append the previous result.
     99                # If not, save the new result
     100                c.execute(''' SELECT image_exp, image_safe FROM image_results WHERE url=?''',(scr,))
     101                res = c.fetchone()
     102                if res:
     103                        screens.append(('explicit',res[0][0]), ('safe',res[0][1]))
     104                else:
     105                        res = analyse_explicit(illust2vec, scr)
     106                        exp = False
     107                        if res[0][1]>res[1][1]:
     108                                exp = True
     109                        c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), scr, res[0][1], res[1][1], exp, -1,  "screenshot",))
     110                        db.commit()
     111                        screens.append(res)
    60112
    61         description = text_cat(description, size, category, age)
     113
     114        # Check if has already been analysed.
     115        # If it has, just use the previous result.
     116        # If not, save the new result
     117        c.execute(''' SELECT text_exp FROM text_results WHERE for_id=? ''',(int(tb_id),))
     118        res = c.fetchone()
     119        if res:
     120                description = res[0]
     121        else:
     122                exp = False
     123                description = text_cat(description, size, category, age)
     124                if description.prob('exp')>0.5:
     125                        exp = True
     126                c.execute(''' INSERT INTO text_results VALUES (?,?,?,?) ''',(int(tb_id), description.prob('exp'), exp, -1,))
     127                db.commit()
    62128
    63129        def find_features(icon_list, scr_list, description_result):
     
    105171                return features
    106172        features = find_features(icons, screens, description)
    107         return classifier.prob_classify(features)
    108173
     174        # Save and close the database
     175        c.execute(''' SELECT exp_per FROM final_results WHERE for_id=? ''', (int(tb_id),))
     176        res = c.fetchone()
     177        if res:
     178                db.close()
     179                return res[0]
     180        else:
     181                exp = False
     182                res = classifier.prob_classify(features)
     183                if res.prob('exp')>0.5:
     184                        exp = True
     185                c.execute(''' INSERT INTO final_results VALUES (?,?,?,?,?) ''', (int(tb_id), time.time(), res.prob('exp'),exp,-1,))
     186                db.commit()
     187                db.close()
     188                return res
     189
  • internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/views.py

    r16499 r16502  
    5555        if 'sshots' in page['media']:
    5656                for s in page['media']['sshots']:
    57 
    58                         temp = s['path'].split('http://',1)
    59 
     57                        try:
     58                                temp = s['path'].split('http://',1)
     59                        except:
     60                                temp = s.split('http://',1)
    6061                        scr.append(config['directories']['url_images']+temp[1])
    6162
    6263        if 'sshots_hd' in page['media']:
    6364                for s in page['media']['sshots_hd']:
    64                         temp = s['path'].split('http://',1)
    65 
     65                        try:
     66                                temp = s['path'].split('http://',1)
     67                        except:
     68                                temp = s.split('http://',1)
    6669                        scr_hd.append(config['directories']['url_images']+temp[1])
    6770
     
    8992        print "Analysing app..."
    9093        # Gets the percentage for safe and explicit content
    91         dist = analyse_app.analyse_app(illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title)
    92         if dist.prob('exp')>0.5:
    93                 exp = True
     94        dist = analyse_app.analyse_app(page['apk']['id'], page['apk']['md5sum'], illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title)
     95        try:
     96                if dist.prob('exp')>0.5:
     97                        exp = True
     98        except:
     99                if dist>0.5:
     100                        exp = True
    94101        print "Done"
    95102        return exp
     
    102109        Model._time = now
    103110        exp = False
    104         try:
     111        #try:
    105112                # Fetching the JSON content
    106                 webpage = urllib2.urlopen(url+str(app_id)+"/json")
    107                 soup = BeautifulSoup(webpage, "lxml")
     113        webpage = urllib2.urlopen(url+str(app_id)+"/json")
     114        soup = BeautifulSoup(webpage, "lxml")
    108115                               
    109                 text = soup.get_text()
    110                 page = json.loads(text)
    111                 if page['status']!='FAIL':
     116        text = soup.get_text()
     117        page = json.loads(text)
     118        if page['status']!='FAIL':
    112119
    113                         exp = get_data(page)
     120                exp = get_data(page)
    114121
    115                 else:
    116                         status = 'Failed'
    117                         print "App does not exist"
    118                         return redirect('error')
    119         except:
     122        else:
    120123                status = 'Failed'
    121                 print "Error during parsing"
     124                print "App does not exist"
    122125                return redirect('error')
     126        #except:
     127        #       status = 'Failed'
     128        #       print "Error during parsing"
     129        #       return redirect('error')
    123130
    124131        # If it's explicit content, redirects to true page. Otherwise, redirects to false page.
  • internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/config.json

    r16499 r16502  
    77                "ill2vec_model": "API/Explicit_detector/Illustration2Vector/illustration2vec-master/illust2vec_tag_ver200.caffemodel",
    88                "ill2vec_tag_list": "API/Explicit_detector/Illustration2Vector/illustration2vec-master/tag_list.json",
    9                 "text_cat_model": "API/Explicit_detector/model_apps_info.pickle"
     9                "text_cat_model": "API/Explicit_detector/model_apps_info.pickle",
     10                "final_database": "API/Explicit_detector/Final_results.db"
    1011        }
    1112}
Note: See TracChangeset for help on using the changeset viewer.