source: internals/2016/aptoideimagesdetector/trunk/Source Code/analyse_app_training.py @ 16436

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

Changes made to the api

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