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

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

Big database added. Tests with big database started.

File size: 4.8 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        num=0
73        for info in app_info:
74                icons_l = []
75                screens = []
76                for icon in info[0]:
77                        try:
78                                icons_l.append(analyse_explicit(illust2vec, icon))
79                        except:
80                                print "Could not resize image"
81
82                for scr in info[1]:
83                        try:
84                                screens.append(analyse_explicit(illust2vec, scr))
85                        except:
86                                print "Could not resize image"
87
88                desc = text_cat(info[2], len(info[2]), info[3],info[4])
89                num+=1
90                if (num%100)==0:
91                        print num
92                features = find_features(icons_l, screens, desc)
93                featuresets.append((features, info[5]))
94
95        random.shuffle(featuresets)
96
97        save_model = open("./featuresets.pickle", "wb")
98        pickle.dump(featuresets, save_model)
99        save_model.close()
100       
101       
102        training_set = featuresets[:]
103       
104        classifier = SklearnClassifier(SGDClassifier())
105        saving_model = classifier.train(training_set)
106        save_model = open("./model_apps_info.pickle", "wb")
107        pickle.dump(saving_model, save_model)
108        save_model.close()
109
110
111if __name__=='__main__':
112
113        try:
114                illust2vec_f = open("Illustration2Vector/illustration2vec_master/illust2vec.pickle", "rb")
115                illust2vec = pickle.load(illust2vec_f)
116                illust2vec_f.close()
117        except IOError:
118                illust2vec = i2v.make_i2v_with_chainer(
119            "Illustration2Vector/illustration2vec-master/illust2vec_tag_ver200.caffemodel", "Illustration2Vector/illustration2vec-master/tag_list.json")
120                save_model = open("Illustration2Vector/illustration2vec_master/illust2vec.pickle", "wb")
121                pickle.dump(illust2vec, save_model)
122                save_model.close()
123
124        icons = []
125        screenshots = []
126        description = ""
127
128        db = sqlite3.connect('./API to download database/app_info_big.db')
129        c = db.cursor()
130
131        explicit_content = []
132        non_explicit_content = []
133        exp_size = 0
134        non_size = 0
135
136
137        c.execute(''' SELECT title,id,description, category, age FROM app_data WHERE mature=1''')
138
139        for d in c.fetchall():
140                explicit_content.append(d)
141                exp_size += 1
142
143
144        c.execute(''' SELECT title,id,description, category, age FROM app_data WHERE mature=0''')
145
146        for d in c.fetchall():
147                non_explicit_content.append(d)
148                non_size += 1
149
150        db.close()
151
152        print "Non-Explicit Size: "+str(non_size)
153        print "Explicit Size: "+str(exp_size)
154
155        def get_images_list(id_int):
156
157                icons = []
158                scr = []
159
160                os.chdir("./API to download database/Big_Database/images/screenshot")
161                types = [".jpg", ".png"]
162                for type_image in types:
163                        for image in glob.glob(str(id_int)+"*"+type_image):
164                            scr.append("./API to download database/Big_Database/images/screenshot/"+image)
165
166                os.chdir("../icon")
167                types = [".jpg", ".png"]
168                for type_image in types:
169                        for image in glob.glob(str(id_int)+"*"+type_image):
170                                icons.append("./API to download database/Big_Database/images/icon/"+image)
171                os.chdir("../../../..")
172
173                return icons, scr
174
175        app_info = []
176
177        for d in explicit_content:
178                icons, screenshots = get_images_list(d[1])
179                description = d[2]
180                cat = d[3]
181                age = d[4]
182                app_info.append((icons, screenshots, description,cat,age,'exp'))
183
184        for d in non_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,'non'))
190
191        analyse_app_train(illust2vec, app_info)
192
Note: See TracBrowser for help on using the repository browser.