source: internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/Explicit_detector/analyse_app_training.py @ 16525

Last change on this file since 16525 was 16476, checked in by dferreira, 4 years ago

Comments on code added.

File size: 5.4 KB
Line 
1# Diogo Daniel Soares Ferreira
2# diogodanielsoaresferreira@ua.pt
3# Aptoide, 2016
4
5# Full training to analyse the explicitness of an app
6
7from __future__ import division
8import i2v
9import pickle
10import os
11import sqlite3
12import collections
13import glob
14import pickle
15from Illustration2Vector.illustration2vec_master.analyse_image import analyse_explicit
16from Text_categorization.Text_categorization import text_cat
17import random
18import nltk
19from datetime import datetime, time
20from nltk.metrics import precision, recall, f_measure
21from sklearn.naive_bayes import MultinomialNB, BernoulliNB
22from sklearn.linear_model import LogisticRegression, SGDClassifier
23from nltk.classify.scikitlearn import SklearnClassifier
24from sklearn.svm import SVC, LinearSVC, NuSVC
25from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
26from sklearn import tree
27
28
29
30def analyse_app_train(illust2vec, app_info):
31       
32        def find_features(icon_list, scr_list, description_result):
33                features = {}
34                maximum = 0
35                flag = 0
36                safe = 0
37
38                # Find maximum percentage of explicitness and its safetiness percentage.
39
40                if len(icon_list)==0:
41                        maximum = 0.5
42                        safe = 0.5
43                else:
44                        for icon in icon_list:
45                                for data in icon:
46                                        if data[0]=='explicit' and data[1]>maximum:
47                                                maximum = data[1]
48                                                flag = 1
49                                        if data[0]=='safe' and flag==1:
50                                                safe = data[1]
51                                                flag = 0
52                maximum_s = 0
53                flag = 0
54                safe_s = 0
55
56                if len(scr_list)==0:
57                        maximum_s = 0.5
58                        safe_s = 0.5
59                else:
60                        for scr in scr_list:
61                                for data in scr:
62                                        if data[0]=='explicit' and data[1]>maximum_s:
63                                                maximum_s = data[1]
64                                                flag = 1
65                                        if data[0]=='safe' and flag==1:
66                                                safe_s = data[1]
67                                                flag = 0
68
69                features['ic_exp'] = maximum
70                features['ic_non'] = safe
71                features['sc_exp'] = maximum_s
72                features['sc_non'] = safe_s
73                features['desc_exp'] = description_result.prob('exp')
74                return features
75
76        featuresets = []
77        # Tries to load featuresets from file
78        try:
79                f = open("./featuresets.pickle", "rb")
80                featuresets = pickle.load(f)
81                f.close()
82                print "Open FeatureSets Pickle"
83        except IOError:
84                # It can take toooo much time (4000 apps database, +- 8 hours)
85                print "Did not Find FeatureSets Pickle"
86                num=0
87                # Building the featureset
88                for info in app_info:
89                        icons_l = []
90                        screens = []
91                        for icon in info[0]:
92                                try:
93                                        icons_l.append(analyse_explicit(illust2vec, icon))
94                                except:
95                                        print "Could not resize image"
96
97                        for scr in info[1]:
98                                try:
99                                        screens.append(analyse_explicit(illust2vec, scr))
100                                except:
101                                        print "Could not resize image"
102
103                        desc = text_cat(info[2], len(info[2]), info[3],info[4])
104                        num+=1
105                        if (num%100)==0:
106                                print num
107                        features = find_features(icons_l, screens, desc)
108                        featuresets.append((features, info[5]))
109
110                random.shuffle(featuresets)
111                save_model = open("./featuresets.pickle", "wb")
112                pickle.dump(featuresets, save_model)
113                save_model.close()
114       
115       
116        training_set = featuresets[:]
117       
118        # Training the model and serializing it to be used by the API
119        classifier = SklearnClassifier(SVC(probability=True))
120        saving_model = classifier.train(training_set)
121        save_model = open("./model_apps_info.pickle", "wb")
122        pickle.dump(saving_model, save_model)
123        save_model.close()
124
125
126if __name__=='__main__':
127
128        try:
129                # Tries to load the illustration2vec model
130                illust2vec_f = open("Illustration2Vector/illustration2vec_master/illust2vec.pickle", "rb")
131                illust2vec = pickle.load(illust2vec_f)
132                illust2vec_f.close()
133        except IOError:
134                illust2vec = i2v.make_i2v_with_chainer(
135            "Illustration2Vector/illustration2vec-master/illust2vec_tag_ver200.caffemodel", "Illustration2Vector/illustration2vec-master/tag_list.json")
136                save_model = open("Illustration2Vector/illustration2vec_master/illust2vec.pickle", "wb")
137                pickle.dump(illust2vec, save_model)
138                save_model.close()
139
140        icons = []
141        screenshots = []
142        description = ""
143        # Gets all the content from database
144        db = sqlite3.connect('./API to download database/app_info_big.db')
145        c = db.cursor()
146
147        explicit_content = []
148        non_explicit_content = []
149        exp_size = 0
150        non_size = 0
151
152
153        c.execute(''' SELECT title,id,description, category, age FROM app_data WHERE mature=1''')
154
155        for d in c.fetchall():
156                explicit_content.append(d)
157                exp_size += 1
158
159
160        c.execute(''' SELECT title,id,description, category, age FROM app_data WHERE mature=0''')
161
162        for d in c.fetchall():
163                non_explicit_content.append(d)
164                non_size += 1
165
166        db.close()
167
168        print "Non-Explicit Size: "+str(non_size)
169        print "Explicit Size: "+str(exp_size)
170
171        # Get images from an app id
172        def get_images_list(id_int):
173
174                icons = []
175                scr = []
176
177                os.chdir("./API to download database/Big_Database/images/screenshot")
178                types = [".jpg", ".png"]
179                for type_image in types:
180                        for image in glob.glob(str(id_int)+"*"+type_image):
181                            scr.append("./API to download database/Big_Database/images/screenshot/"+image)
182
183                os.chdir("../icon")
184                types = [".jpg", ".png"]
185                for type_image in types:
186                        for image in glob.glob(str(id_int)+"*"+type_image):
187                                icons.append("./API to download database/Big_Database/images/icon/"+image)
188                os.chdir("../../../..")
189
190                return icons, scr
191
192        app_info = []
193
194        for d in explicit_content:
195                icons, screenshots = get_images_list(d[1])
196                description = d[2]
197                cat = d[3]
198                age = d[4]
199                app_info.append((icons, screenshots, description,cat,age,'exp'))
200
201        for d in non_explicit_content:
202                icons, screenshots = get_images_list(d[1])
203                description = d[2]
204                cat = d[3]
205                age = d[4]
206                app_info.append((icons, screenshots, description, cat, age,'non'))
207
208        analyse_app_train(illust2vec, app_info)
209
Note: See TracBrowser for help on using the repository browser.