예제 #1
0
 def exactor(self, one):
     faces = one[1].split(';')
     face_dir = one[-1]
     for face in faces:
         all_finished = True
         if face:
             face_path = face_dir + one[2] + '/' + face
             cmd = "../cmodel/featurebr/build/feature %s %s " % (
                 "FaceRecognition", face_path)
             print cmd
             res = exeCmd(cmd)
             data = res.strip(',').split(',')
             ldata = len(data)
             if ldata != self.conf['item_len']:
                 print "len of data error: %d" % ldata
                 all_finished = False
                 continue
             data = self.indexData(data)
             data['hash_id'] = one[0]
             data['path'] = face_path
             data['uri'] = one[3]
             res = self.es.index(index="face",
                                 doc_type="feature",
                                 body=data)
         if all_finished:
             db = Mysql(self.conf["db_host"], self.conf["db_database"],
                        self.conf["db_user"], self.conf["db_pass"])
             sql = "update images set status = '4' where `md5` = '%s' " % one[
                 0]
             db.execute(sql)
             db.close()
     return
예제 #2
0
 def finishPic(self, pic): # opencv
     face_cascade = cv2.CascadeClassifier(self.conf["cascade"])
     imgpath = self.conf['img_path'] + pic[0] + '/' + pic[1]
     img = cv2.imread(imgpath)
     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
     faces = face_cascade.detectMultiScale(gray, 1.5, 7)
     i = 0
     faces_str = ""
     for (x,y,w,h) in faces:
         faces_str += pic[1] + ".face_"+str(i)+".jpg;"
         face_path = pic[3] + pic[1] + ".face_"+str(i)+".jpg"
         tmpimg = cv.LoadImage(imgpath)
         cv.SetImageROI(tmpimg, (x, y, w, int(h*1.15)))
         cv.SaveImage(face_path,tmpimg)
         print face_path
         i += 1
     db = Mysql(self.conf["db_host"], self.conf["db_database"], self.conf["db_user"], self.conf["db_pass"])
     sql = "update images set status='3', face_dir='%s' where `md5`='%s'" % (faces_str, pic[2])
     db.execute(sql)
     db.close()
     return
예제 #3
0
class MainDev(SDevice):
    _logger = None
    _main_proc = None
    _mail_procs = None
    _work_procs = None
    _db = None
    instance = None
    mutex = threading.Lock()
    def __init__(self):
        super(MainDev, self).__init__()
        self._logger = logging.getLogger(str(__name__))
        interval = SysConfig.config["servers"]["interval"]
        if not  interval:
            interval = 200
        self._main_proc = MainProc(self)
        self.addProcess(self._main_proc, interval)
        mailProcCount = SysConfig.config["mail"]["mailProcCount"]
        self._mail_procs = []
        for i in range(mailProcCount):  
            mailProc = MailProc(self)
            mailProc.setIndex(i)
            self._mail_procs.append(mailProc)
            self.addProcess(mailProc, interval)
        self._work_procs = []
        workProcCount = SysConfig.config['servers']['workProcCount']
        for i in range(workProcCount):
            workProc = WorkProc(self)
            self._work_procs.append(workProc)
            self.addProcess(workProc, interval)
        host = SysConfig.config['db']['host']
        port = SysConfig.config['db']['port']
        user = SysConfig.config['db']['user']
        passwd = SysConfig.config['db']['passwd']
        dbName = SysConfig.config['db']['db']
        charset = SysConfig.config['db']['charset']
        self._db = Mysql(host, port, user, passwd, dbName, charset)
        pass
        
    @staticmethod
    def GetInstance():
        if(MainDev.instance == None):
            MainDev.mutex.acquire()
            if(MainDev.instance == None):
                MainDev.instance = MainDev()
            MainDev.mutex.release()
        return MainDev.instance
        pass
    def getMainProc(self):
        return self._main_proc
        pass
    def getRedis(self):
        return self._redis
        pass
    def start(self):
        super(MainDev, self).start()
        row = self._db.query("select num_iid from ftxia_items order by id desc")
        for r in row:
            AppQueue.numiidQueue.put(r[0])
        self._logger.debug("numiid count %d"%(AppQueue.numiidQueue.qsize()))
        self._logger.debug("server start ........")
    def close(self):
        self._logger.debug("server close ........")
        super(MainDev,self).close()
        self._db.close()
    def getDb(self):
        return self._db
    def getFactory(self):
        return self._factory
        pass