Пример #1
0
 def post(self):
     if not self.request.files:
         self.render("account/icon.html", error=151)
         return
     files = self.request.files["icon"]
     if len(files) == 0:
         self.render("account/icon.html", error=151)
         return
     if files[0]["content_type"].split("/")[1] not in self.image_types:
         self.render("account/icon.html", error=152)
         return
     image_type = files[0]["content_type"].split("/")[1]
     """TODO头像分片存储"""
     ext = os.path.splitext(files[0]["filename"])[1]
     filepath = "u_%s_%s%s" % (self.current_user["_id"], str(int(time.time())), ext)
     file_dir = "%s/%s" % (self.settings["icon_dir"], filepath)
     try:
         writer = open(file_dir, "wb")
         writer.write(files[0]["body"])
         writer.flush()
         writer.close()
     except Exception, ex:
         Log.error(ex)
         self.render("account/icon.html", error=153)
         return
Пример #2
0
 def process(self):
     try:
         self._clear_result()
         self._reduce_comments()
         self._reduce_favers()
     except Exception, ex:
         Log.error(ex, "mapreduce")
Пример #3
0
 def post(self):
     if not self.request.files:
         self.render("account/icon.html", error=151)
         return
     files = self.request.files["icon"]
     if len(files) == 0:
         self.render("account/icon.html", error=151)
         return
     if files[0]["content_type"].split("/")[1] not in self.image_types:
         self.render("account/icon.html", error=152)
         return
     image_type = files[0]["content_type"].split("/")[1]
     """TODO头像分片存储"""
     ext = os.path.splitext(files[0]["filename"])[1]
     filepath = "u_%s_%s%s" % (self.current_user["_id"],
                               str(int(time.time())), ext)
     file_dir = "%s/%s" % (self.settings["icon_dir"], filepath)
     try:
         writer = open(file_dir, "wb")
         writer.write(files[0]["body"])
         writer.flush()
         writer.close()
     except Exception, ex:
         Log.error(ex)
         self.render("account/icon.html", error=153)
         return
def order_transform(length=3600):
    start_time = time.time()
    dump = transform_data()
    logger = Log()
    while True:
        try:
            dump.init()
            for i in range(10000000):
                time_dist = int(time.time() - start_time)
                if time_dist % 55 > 52:
                    dump.get_1s()
                    dump.get_1m()

                if time_dist % 295 > 292:
                    dump.get_5m()

                if time_dist % 1795 > 1792:
                    dump.get_30m()

                if time_dist % 3595 > 2592:
                    dump.get_1h()

                time.sleep(1)
        except Exception as e:
            logger.error(str(e))
            print(str(e))
Пример #5
0
    def loadImgDrawing(self, target, name, fileName, textureSize=None):
        """
        Load an SVG drawing synchronously.

        @param target:      An object that will own the drawing
        @param name:        The name of the attribute the drawing will be assigned to
        @param fileName:    The name of the file in the data directory
        @param textureSize: Either None or (x, y), in which case the file will
                            be rendered to an x by y texture
        @return:            L{ImgDrawing} instance
        """
        imgDrawing = self.getImgDrawing(fileName)
        if not imgDrawing:
            if target and name:
                setattr(target, name, None)
            else:
                Log.error("Image not found: " + fileName)
                return None

        if target:
            drawing = self.resource.load(target,
                                         name,
                                         lambda: imgDrawing,
                                         synch=True)
        else:
            drawing = imgDrawing
        return drawing
Пример #6
0
    def getOptions(self, section, option):
        """
        Read the preset options of a configuration key.

        @param section:   Section name
        @param option:    Option name
        @return:          Tuple of Key list and Values list
        """

        try:
            options = self.prototype[section][option].options.values()
            keys    = self.prototype[section][option].options.keys()
            type    = self.prototype[section][option].type
        except KeyError:
            Log.error("Config key %s.%s not defined while reading %s." % (section, option, self.fileName))
            raise

        optionList = []

        if type != None:
            for i in range(len(options)):
                value = _convertValue(keys[i], type)
                optionList.append(value)

        return optionList, options
Пример #7
0
    def loadVideo(self, libraryName, songName):
        vidSource = None

        if self.songStage == 1:
            songBackgroundVideoPath = os.path.join(libraryName, songName,
                                                   "background.ogv")
            if os.path.isfile(songBackgroundVideoPath):
                vidSource = songBackgroundVideoPath
                loop = False
            else:
                Log.warn("Video not found: %s" % songBackgroundVideoPath)

        if vidSource is None:
            vidSource = os.path.join(self.pathfull, "default.ogv")
            loop = True

        if not os.path.isfile(vidSource):
            Log.warn("Video not found: %s" % vidSource)
            Log.warn("Falling back to default stage mode.")
            self.mode = 1  # Fallback
            return

        try:  # Catches invalid video files or unsupported formats
            Log.debug("Attempting to load video: %s" % vidSource)
            self.vidPlayer = VideoLayer(self.engine,
                                        vidSource,
                                        mute=True,
                                        loop=loop)
            self.engine.view.pushLayer(self.vidPlayer)
        except (IOError, VideoPlayerError):
            self.mode = 1
            Log.error(
                "Failed to load song video (falling back to default stage mode):"
            )
Пример #8
0
    def post(self):
        user_id = self.get_argument("uid", None)
        title = self.get_argument("title", "")
        link = self.get_argument("link", "")
        profile = self.get_argument("profile", True)
        tags = self.get_argument("tags", "").split(" ")
        description = self.get_argument("description", "")
        image_path = self.get_argument("Filedata.path", None)
        image_name = self.get_argument("Filedata.name", None)
        image_md5 = self.get_argument("Filedata.md5", None)
        image_size = self.get_argument("Filedata.size", None)
        categories = self.get_argument("categories", None)
        
        if not user_id: return
        user_id = int(user_id)
        if not image_path: return
        
        name, ext = os.path.splitext(image_name)
        response = upload_crop(image_path, ext)
        if not response["status"]: return

        source_path = response["source_path"].split("/upload/")[1]
        thumb_path = response["thumb_path"].split("/upload/")[1]
        middle_path = response["middle_path"].split("/upload/")[1]
        width = response["width"]
        height = response["height"]
        
        entry = self.entry_dal.template()
        entry["user_id"] = user_id
        entry["user"] = self.entry_dal.dbref("users", user_id)
        entry["title"] = title
        entry["link"] = link
        entry["profile"] = profile
        entry["tags"] = tags
        entry["description"] = description
        entry["source"] = source_path
        entry["thumb"] = thumb_path
        entry["middle"] = middle_path
        entry["height"] = height
        entry["width"] = width
        entry["md5"] = image_md5
        entry["size"] = image_size

        if categories:
            entry["categories"] = [int(item.strip()) 
                                   for item in categories.split(",") 
                                   if item.strip()]

        if title:
            title = title.encode("utf-8", "ignore")
            keywords = [seg for seg in seg_txt_search(title) if len(seg) > 1]
            if len(tags) and tags[0]:
                keywords = keywords + tags
            entry["_keywords"] = keywords

        try:
            self.entry_dal.save(entry)
            self.user_dal.update_entries_count(user_id)
        except Exception, ex:
            Log.error(ex)
Пример #9
0
    def loadVideo(self, libraryName, songName):
        vidSource = None

        if self.songStage == 1:
            songBackgroundVideoPath = os.path.join(libraryName, songName, "background.ogv")
            if os.path.isfile(songBackgroundVideoPath):
                vidSource = songBackgroundVideoPath
                loop = False
            else:
                Log.warn("Video not found: %s" % songBackgroundVideoPath)

        if vidSource is None:
            vidSource = os.path.join(self.pathfull, "default.ogv")
            loop = True

        if not os.path.isfile(vidSource):
            Log.warn("Video not found: %s" % vidSource)
            Log.warn("Falling back to default stage mode.")
            self.mode = 1 # Fallback
            return

        try: # Catches invalid video files or unsupported formats
            Log.debug("Attempting to load video: %s" % vidSource)
            self.vidPlayer = VideoLayer(self.engine, vidSource,
                                        mute = True, loop = loop)
            self.engine.view.pushLayer(self.vidPlayer)
        except (IOError, VideoPlayerError):
            self.mode = 1
            Log.error("Failed to load song video (falling back to default stage mode):")
Пример #10
0
def rename():
    try:
        Log.info("rename pics begins")
        actors = actorDAO.getAllActorsFully()
        for actor in actors:
            renameActor(actor["name"], actor["short_name"])
    except Exception as err:
        Log.error("rename pics stopped: ")
        Log.exception(err)
Пример #11
0
 def __init__(self, name = None, target = GL_TEXTURE_2D, useMipmaps = True):
     # Delete all pending textures
     try:
         func, args = cleanupQueue[0]
         del cleanupQueue[0]
         func(*args)
     except IndexError:
         pass
     except Exception, e:    #MFH - to catch "did you call glewInit?" crashes
         Log.error("Texture.py texture deletion exception: %s" % e)
Пример #12
0
 def process(self):
     try:
         self._clear_result()
         self._reduce_entries()
         self._reduce_likes()
         self._reduce_followers()
         self._reduce_friends()
     except Exception, ex:
         Log.error(ex, "mapreduce")
         return
Пример #13
0
def downloadPicsAllActors():
    try:
        Log.info("download pics begins")
        actors = actorDAO.getAllActorsFully()
        count = 0
        for actor in actors:
            count = count + downloadActor(actor["short_name"])
            if count > 1000:
                break
    except Exception as err:
        Log.error("download pics stopped: ")
        Log.exception(err)
Пример #14
0
 def keyPressed(self, key, unicode):
     if key == pygame.K_LALT:
         self.altStatus = True
     elif key == pygame.K_RETURN and self.altStatus:
         if not self.engine.toggleFullscreen():
             Log.error("Unable to toggle fullscreen mode.")
         return True
     elif key == pygame.K_d and self.altStatus:
         self.engine.setDebugModeEnabled(not self.engine.isDebugModeEnabled())
         return True
     elif key == pygame.K_g and self.altStatus and self.engine.isDebugModeEnabled():
         self.engine.debugLayer.gcDump()
         return True
Пример #15
0
    def getTipText(self, section, option):
        """
        Return the tip text for a configuration key.

        @param section:   Section name
        @param option:    Option name
        @return:          Tip Text String
        """

        try:
            text = self.prototype[section][option].tipText
        except KeyError:
            Log.error("Config key %s.%s not defined while reading %s." % (section, option, self.fileName))
            raise

        return text
Пример #16
0
    def getDefault(self, section, option):
        """
        Read the default value of a configuration key.

        @param section:   Section name
        @param option:    Option name
        @return:          Key value
        """

        try:
            type    = self.prototype[section][option].type
            default = self.prototype[section][option].default
        except KeyError:
            Log.error("Config key %s.%s not defined while reading %s." % (section, option, self.fileName))
            raise

        value = _convertValue(default, type)

        return value
Пример #17
0
    def remove(self):
        """ Remove component with given name.

        Returns ComponentLog if the component successfully removed.
        """
        Log.debug("Component.remove(): removing")
        name = self.c_id
        exe_hash = self.c_exe_hash
        super().remove()
        import os
        try:
            os.remove(self._component_file)
        except IOError:
            Log.error("Component.remove(): unable to remove component file.")
            return False
        try:
            cl = ComponentLog.add(name, exe_hash)
        except InstanceAlreadyExists as e:
            cl = e.original()
        return cl
Пример #18
0
    def remove(self):
        """ Remove component with given name.

        Returns ComponentLog if the component successfully removed.
        """
        Log.debug("Component.remove(): removing")
        name = self.c_id
        exe_hash = self.c_exe_hash
        super().remove()
        import os
        try:
            os.remove(self._component_file)
        except IOError:
            Log.error("Component.remove(): unable to remove component file.")
            return False
        try:
            cl = ComponentLog.add(name, exe_hash)
        except InstanceAlreadyExists as e:
            cl = e.original()
        return cl
Пример #19
0
    def __init__(self, context, ImgData):
        self.ImgData = None
        self.texture = None
        self.context = context
        self.cache = None
        self.filename = ImgData

        # Detect the type of data passed in
        if isinstance(ImgData, file):
            self.ImgData = ImgData.read()
        elif isinstance(ImgData, basestring):
            self.texture = Texture(ImgData)
        elif isinstance(ImgData,
                        Image.Image):  #stump: let a PIL image be passed in
            self.texture = Texture()
            self.texture.loadImage(ImgData)

        # Make sure we have a valid texture
        if not self.texture:
            if isinstance(ImgData, basestring):
                e = "Unable to load texture for %s." % ImgData
            else:
                e = "Unable to load texture for SVG file."
            Log.error(e)
            raise RuntimeError(e)

        self.pixelSize = self.texture.pixelSize  #the size of the image in pixels (from texture)
        self.position = [0.0, 0.0]  #position of the image in the viewport
        self.scale = [1.0, 1.0]  #percentage scaling
        self.angle = 0  #angle of rotation (degrees)
        self.color = (1.0, 1.0, 1.0, 1.0)  #glColor rgba
        self.rect = (0, 1, 0, 1)  #texture mapping coordinates
        self.shift = -.5  #horizontal alignment
        self.vshift = -.5  #vertical alignment

        self.path = self.texture.name  #path of the image file

        self.texArray = np.zeros((4, 2), dtype=np.float32)

        self.createTex()
Пример #20
0
    def __init__(self, context, ImgData):
        self.ImgData = None
        self.texture = None
        self.context = context
        self.cache = None
        self.filename = ImgData

        # Detect the type of data passed in
        if isinstance(ImgData, file):
            self.ImgData = ImgData.read()
        elif isinstance(ImgData, basestring):
            self.texture = Texture(ImgData)
        elif isinstance(ImgData, Image.Image): #stump: let a PIL image be passed in
            self.texture = Texture()
            self.texture.loadImage(ImgData)

        # Make sure we have a valid texture
        if not self.texture:
            if isinstance(ImgData, basestring):
                e = "Unable to load texture for %s." % ImgData
            else:
                e = "Unable to load texture for SVG file."
            Log.error(e)
            raise RuntimeError(e)

        self.pixelSize = self.texture.pixelSize #the size of the image in pixels (from texture)
        self.position = [0.0,0.0]               #position of the image in the viewport
        self.scale    = [1.0,1.0]               #percentage scaling
        self.angle    = 0                       #angle of rotation (degrees)
        self.color    = (1.0,1.0,1.0,1.0)       #glColor rgba
        self.rect     = (0,1,0,1)               #texture mapping coordinates
        self.shift    = -.5                     #horizontal alignment
        self.vshift   = -.5                     #vertical alignment

        self.path = self.texture.name           #path of the image file

        self.texArray = np.zeros((4,2), dtype=np.float32)

        self.createTex()
Пример #21
0
    def set(self, section, option, value):
        """
        Set the value of a configuration key.

        @param section:   Section name
        @param option:    Option name
        @param value:     Value name
        """

        try:
            prototype[section][option]
        except KeyError:
            Log.error("Config key %s.%s not defined while writing %s." % (section, option, self.fileName))
            raise

        if not self.config.has_section(section):
            self.config.add_section(section)

        self.config.set(section, option, utf8(value))

        f = open(self.fileName, "w")
        self.config.write(f, self.type)
        f.close()
Пример #22
0
    def loadImgDrawing(self, target, name, fileName, textureSize=None):
        """
        Load an SVG drawing synchronously.

        @param target:      An object that will own the drawing
        @param name:        The name of the attribute the drawing will be assigned to
        @param fileName:    The name of the file in the data directory
        @param textureSize: Either None or (x, y), in which case the file will
                            be rendered to an x by y texture
        @return:            L{ImgDrawing} instance
        """
        imgDrawing = self.getImgDrawing(fileName)
        if not imgDrawing:
            if target and name:
                setattr(target, name, None)
            else:
                Log.error("Image not found: " + fileName)
                return None

        if target:
            drawing = self.resource.load(target, name, lambda: imgDrawing, synch=True)
        else:
            drawing = imgDrawing
        return drawing
Пример #23
0
    def post(self):
        user_id = self.get_argument("uid", None)
        title = self.get_argument("title", "")
        link = self.get_argument("link", "")
        profile = self.get_argument("profile", True)
        tags = self.get_argument("tags", "").split(" ")
        description = self.get_argument("description", "")
        image_path = self.get_argument("Filedata.path", None)
        image_name = self.get_argument("Filedata.name", None)
        image_md5 = self.get_argument("Filedata.md5", None)
        image_size = self.get_argument("Filedata.size", None)
        categories = self.get_argument("categories", None)

        if not user_id: return
        user_id = int(user_id)
        if not image_path: return

        name, ext = os.path.splitext(image_name)
        response = upload_crop(image_path, ext)
        if not response["status"]: return

        source_path = response["source_path"].split("/upload/")[1]
        thumb_path = response["thumb_path"].split("/upload/")[1]
        middle_path = response["middle_path"].split("/upload/")[1]
        width = response["width"]
        height = response["height"]

        entry = self.entry_dal.template()
        entry["user_id"] = user_id
        entry["user"] = self.entry_dal.dbref("users", user_id)
        entry["title"] = title
        entry["link"] = link
        entry["profile"] = profile
        entry["tags"] = tags
        entry["description"] = description
        entry["source"] = source_path
        entry["thumb"] = thumb_path
        entry["middle"] = middle_path
        entry["height"] = height
        entry["width"] = width
        entry["md5"] = image_md5
        entry["size"] = image_size

        if categories:
            entry["categories"] = [
                int(item.strip()) for item in categories.split(",")
                if item.strip()
            ]

        if title:
            title = title.encode("utf-8", "ignore")
            keywords = [seg for seg in seg_txt_search(title) if len(seg) > 1]
            if len(tags) and tags[0]:
                keywords = keywords + tags
            entry["_keywords"] = keywords

        try:
            self.entry_dal.save(entry)
            self.user_dal.update_entries_count(user_id)
        except Exception, ex:
            Log.error(ex)
Пример #24
0
def upload_crop(image_path, ext):
    response = {}
    pin_width = 0
    pin_height = 0
    if not os.path.exists(image_path):
        response["status"] = True
        response["message"] = "Not found: %s" % image_path
        return response

    image_ext = ext[1:].upper()
    if image_ext == "JPG": image_ext = "JPEG"

    store_dir = _get_image_dir(UPLOAD_DIR)
    base_name = get_uuid()
    source_name = "%s_source%s" % (base_name, ext)
    source_path = os.path.join(store_dir, source_name)
    thumb_name = "%s_thumb%s" % (base_name, ext)
    thumb_path = os.path.join(store_dir, thumb_name)
    middle_name = "%s_mid%s" % (base_name, ext)
    middle_path = os.path.join(store_dir, middle_name)

    # source
    try:
        os.rename(image_path, source_path)
    except Exception:
        Log.error("Save source error: %s" % image_path)
        response["status"] = False
        response["message"] = "Save source error: %s" % image_path
        return response

    img = Image.open(source_path)
    # middle
    dest_width = MIDDLE_WIDTH
    width, height = img.size
    if width < dest_width or height < dest_width:
        response["status"] = False
        response["message"] = "Image size too small"
        return response
    dest_height = int(float(dest_width) * float(height) / float(width))
    img_mid = img.resize((dest_width, dest_height), Image.ANTIALIAS)
    img_mid.save(middle_path, image_ext, quality=150)

    pin_width, pin_height = (dest_width, dest_height)

    # thumb
    dest_width, dest_height = THUMB_SIZE
    left, upper, right, lowwer = 0, 0, dest_width, dest_height
    crop_width, crop_height = dest_width, dest_height
    if float(dest_width) / float(dest_height) < float(width) / float(height):
        crop_height = height
        crop_width = int(height * (float(dest_width) / float(dest_height)))
        left = int((width - crop_width) / 2)
        right = left + crop_width
        lowwer = height
    else:
        crop_width = width
        crop_height = int(width * (float(dest_height) / float(dest_width)))
        upper = int((height - crop_height) / 2)
        lowwer = upper + crop_height
        right = width

    box = (left, upper, right, lowwer)
    img_thumb = img.crop(box)
    img_thumb = img_thumb.resize((dest_width, dest_height), Image.ANTIALIAS)
    img_thumb.save(thumb_path, image_ext, quality=150)

    response["status"] = True
    response["source_path"] = source_path
    response["thumb_path"] = thumb_path
    response["middle_path"] = middle_path
    response["height"] = pin_height
    response["width"] = pin_width
    return response
Пример #25
0
    def __init__(self, engine, songName = None):
        self.engine      = engine
        self.time        = 0.0
        self.offset      = 0.5 # akedrou - this seems to fix the delay issue, but I'm not sure why. Return here!
        self.speedDiv    = 20000.0
        self.speedDir    = 1.0
        self.doneList    = []
        self.themename = Config.get("coffee", "themename")

        nf = self.engine.data.font
        ns = 0.002
        bs = 0.001
        hs = 0.003
        c1 = (1, 1, .5, 1)
        c2 = (1, .75, 0, 1)
        self.text_size = nf.getLineSpacing(scale = hs)

        #akedrou - Translatable Strings:
        self.bank = {}
        self.bank['intro']      = [_("Frets on Fire X is a progression of MFH-mod,"),
                                   _("which was built on Alarian's mod,"),
                                   _("which was built on UltimateCoffee's Ultimate mod,"),
                                   _("which was built on RogueF's RF_mod 4.15,"),
                                   _("which was, of course, built on Frets on Fire 1.2.451,"),
                                   _("which was created by Unreal Voodoo")]
        self.bank['noOrder']    = [_("No particular order")]
        self.bank['accessOrder']= [_("In order of project commit access")]
        self.bank['coders']     = [_("Active Coders")]
        self.bank['otherCoding']= [_("Programming")]
        self.bank['graphics']   = [_("Graphic Design")]
        self.bank['3d']         = [_("3D Textures")]
        self.bank['logo']       = [_("FoFiX Logo Design")]
        self.bank['hollowmind'] = [_("Hollowmind Necks")]
        self.bank['themes']     = [_("Included Themes")]
        self.bank['shaders']    = [_("Shaders")]
        self.bank['sounds']     = [_("Sound Design")]
        self.bank['translators']= [_("Translators")]
        self.bank['honorary']   = [_("Honorary Credits")]
        self.bank['codeHonor']  = [_("Without whom this game would not exist")]
        self.bank['giveThanks'] = [_("Special Thanks to")]
        self.bank['community']  = [_("nwru and all of the community at fretsonfire.net")]
        self.bank['other']      = [_("Other Contributors:")]
        self.bank['tutorial']   = [_("Jurgen FoF tutorial inspired by adam02"),
                                   _("Drum test song tutorial by Heka"),
                                   _("Drum Rolls practice tutorial by venom426")]
        self.bank['disclaimer'] = [_("If you have contributed to this game and are not credited,"),
                                   _("please let us know what and when you contributed.")]
        self.bank['thanks']     = [_("Thank you for your contribution.")]
        self.bank['oversight']  = [_("Please keep in mind that it is not easy to trace down and"),
                                   _("credit every single person who contributed; if your name is"),
                                   _("not included, it was not meant to slight you."),
                                   _("It was an oversight.")]
        # evilynux - Theme strings
        self.bank['themeCreators'] = [_("%s theme credits:") % self.themename]
        self.bank['themeThanks']   = [_("%s theme specific thanks:") % self.themename]
        # Languages
        self.bank['french']        = [_("French")]
        self.bank['french90']      = [_("French (reform 1990)")]
        self.bank['german']        = [_("German")]
        self.bank['italian']       = [_("Italian")]
        self.bank['piglatin']      = [_("Pig Latin")]
        self.bank['portuguese-b']  = [_("Portuguese (Brazilian)")]
        self.bank['russian']       = [_("Russian")]
        self.bank['spanish']       = [_("Spanish")]
        self.bank['swedish']       = [_("Swedish")]

        self.videoLayer = False
        self.background = None

        vidSource = os.path.join(Version.dataPath(), 'themes', self.themename, \
                                 'menu', 'credits.ogv')
        if os.path.isfile(vidSource):
            try:
                self.vidPlayer = VideoLayer(self.engine, vidSource, mute = True, loop = True)
            except (IOError, VideoPlayerError):
                Log.error('Error loading credits video:')
            else:
                self.vidPlayer.play()
                self.engine.view.pushLayer(self.vidPlayer)
                self.videoLayer = True

        if not self.videoLayer and \
           not self.engine.loadImgDrawing(self, 'background', os.path.join('themes', self.themename, 'menu', 'credits.png')):
            self.background = None

        if not self.engine.loadImgDrawing(self, 'topLayer', os.path.join('themes', self.themename, 'menu', 'creditstop.png')):
            self.topLayer = None

        space = Text(nf, hs, c1, "center", " ")
        self.credits = [
          Picture(self.engine, "fofix_logo.png", .10),
          Text(nf, ns, c1, "center", "%s" % Version.version()), space]

        # evilynux: Main FoFiX credits (taken from CREDITS).
        self.parseText("CREDITS")
        self.credits.extend([space, space, space])
        # evilynux: Theme credits (taken from data/themes/<theme name>/CREDITS).
        self.parseText(os.path.join('data', 'themes', self.themename, 'CREDITS'))

        self.credits.extend( [
          space, space,
          Text(nf, ns, c1, "left",   _("Made with:")),
          Text(nf, ns, c2, "right",  "Python " + sys.version.split(' ')[0]),  #stump: the version that's actually in use
          Text(nf, bs, c2, "right",  "http://www.python.org"),
          space,
          Text(nf, ns, c2, "right",  "PyGame " + pygame.version.ver.replace('release', '')),  #stump: the version that's actually in use
          Text(nf, bs, c2, "right",  "http://www.pygame.org"),
          space,
          Text(nf, ns, c2, "right",  "PyOpenGL " + OpenGL.__version__), #evilynux: the version that's actually in use
          Text(nf, bs, c2, "right",  "http://pyopengl.sourceforge.net"),
          space,
          Text(nf, ns, c2, "right",  "Illusoft Collada module 0.3.159"),
          Text(nf, bs, c2, "right",  "http://colladablender.illusoft.com"),
          space,
          Text(nf, ns, c2, "right",  "MXM Python Midi Package 0.1.4"),
          Text(nf, bs, c2, "right",  "http://www.mxm.dk/products/public/pythonmidi"),
          space,
          space,
          Text(nf, bs, c1, "center", _("Source Code available under the GNU General Public License")),
          Text(nf, bs, c2, "center", "http://code.google.com/p/fofix"),
          space,
          space,
          Text(nf, bs, c1, "center", _("Copyright 2006, 2007 by Unreal Voodoo")),
          Text(nf, bs, c1, "center", _("Copyright 2008-2013 by Team FoFiX")),
          space,
          space
        ])
Пример #26
0
class Spider(object):
    ''' Spider '''
    def __init__(self,
                 name='Spider',
                 url_list_file='./urls',
                 output_path='./output',
                 interval=1,
                 timeout=1,
                 silent=False):
        '''
		@name: string, 定向爬虫的名字
		@url_list_file: string, 种子文件
		@output_path: string, 输出文件路径
		@interval: int, 爬取间隔
		@timeout: int, 请求超时
		@silent: bool, 是否为静默打印
		'''
        # 设置保存爬取页面的coolie值(非必要)
        cj = cookielib.LWPCookieJar()
        cookie_support = urllib2.HTTPCookieProcessor(cj)
        self.opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
        urllib2.install_opener(self.opener)

        # 设置请求头部(非必要)
        self.headers = {
            'Content-Type':
            'application/x-www-form-urlencoded',
            'User-Agent':
            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36'
        }

        self.url_list_file = url_list_file
        self.output_path = output_path
        self.interval = interval
        self.timeout = timeout

        level = 'INFO' if silent else 'DEBUG'
        self.log = Log(name, level, 'spider.log', 'a')

        # 定义一个多线程共享队列,存放需要加载的url
        self.queue = Queue()

        # 存放非重复url集合
        self.url_set = set()

        # 定义多线程访问锁
        self.lock = Lock()

        # 匹配根域名
        self.base_pattern = r'^(https?:\/\/[a-z0-9\-\.]+)[\/\?]?'

        if not os.path.exists(self.url_list_file):
            # 种子文件不存在
            self.log.error('%s dose not exist. Exit program !' %
                           (self.url_list_file))
            os._exit(0)
        if not os.path.exists(self.output_path):
            # 输出文件目录不存在
            self.log.info('Create new directory %s' % (self.output_path))
            os.makedirs(self.output_path)

    '''
	def __decodeHtml__(self, html):
		"""
		Decode Html
		@html: string, 原生html内容
		return: 返回解码后的html内容
		"""
		try:
			encoding = chardet.detect(html)['encoding']
			if encoding == 'GB2312':
				encoding = 'GBK'
			else:
				encoding = 'utf-8'
			return html.decode(encoding, 'ignore')
		except Exception, e:
			self.log.error("Decode error: %s.", e.message)
			return None
	'''

    def __request__(self, url, threadID=-1, data=None):
        '''
		Request URL
		@url: string, 指定抓取的url
		@data: object, POST方法发送的数据
		'''
        try:
            req = urllib2.Request(url, data, self.headers)
            res = urllib2.urlopen(req, timeout=self.timeout).read()
            self.log.debug('Thread-%d Get %s' % (threadID, url))
            return res
        except Exception, e:
            self.log.error('Thread-%d in __requests__: %s %s' %
                           (threadID, e.message, url))
            return None
Пример #27
0
    def __init__(self, engine, songName=None):
        self.engine = engine
        self.time = 0.0
        self.offset = 0.5  # akedrou - this seems to fix the delay issue, but I'm not sure why. Return here!
        self.speedDiv = 20000.0
        self.speedDir = 1.0
        self.doneList = []
        self.themename = Config.get("coffee", "themename")

        nf = self.engine.data.font
        ns = 0.002
        bs = 0.001
        hs = 0.003
        c1 = (1, 1, 0.5, 1)
        c2 = (1, 0.75, 0, 1)
        self.text_size = nf.getLineSpacing(scale=hs)

        # akedrou - Translatable Strings:
        self.bank = {}
        self.bank["intro"] = [
            _("Frets on Fire X is a progression of MFH-mod,"),
            _("which was built on Alarian's mod,"),
            _("which was built on UltimateCoffee's Ultimate mod,"),
            _("which was built on RogueF's RF_mod 4.15,"),
            _("which was, of course, built on Frets on Fire 1.2.451,"),
            _("which was created by Unreal Voodoo"),
        ]
        self.bank["noOrder"] = [_("No particular order")]
        self.bank["accessOrder"] = [_("In order of project commit access")]
        self.bank["coders"] = [_("Active Coders")]
        self.bank["otherCoding"] = [_("Programming")]
        self.bank["graphics"] = [_("Graphic Design")]
        self.bank["3d"] = [_("3D Textures")]
        self.bank["logo"] = [_("FoFiX Logo Design")]
        self.bank["hollowmind"] = [_("Hollowmind Necks")]
        self.bank["themes"] = [_("Included Themes")]
        self.bank["shaders"] = [_("Shaders")]
        self.bank["sounds"] = [_("Sound Design")]
        self.bank["translators"] = [_("Translators")]
        self.bank["honorary"] = [_("Honorary Credits")]
        self.bank["codeHonor"] = [_("Without whom this game would not exist")]
        self.bank["giveThanks"] = [_("Special Thanks to")]
        self.bank["community"] = [_("nwru and all of the community at fretsonfire.net")]
        self.bank["other"] = [_("Other Contributors:")]
        self.bank["tutorial"] = [
            _("Jurgen FoF tutorial inspired by adam02"),
            _("Drum test song tutorial by Heka"),
            _("Drum Rolls practice tutorial by venom426"),
        ]
        self.bank["disclaimer"] = [
            _("If you have contributed to this game and are not credited,"),
            _("please let us know what and when you contributed."),
        ]
        self.bank["thanks"] = [_("Thank you for your contribution.")]
        self.bank["oversight"] = [
            _("Please keep in mind that it is not easy to trace down and"),
            _("credit every single person who contributed; if your name is"),
            _("not included, it was not meant to slight you."),
            _("It was an oversight."),
        ]
        # evilynux - Theme strings
        self.bank["themeCreators"] = [_("%s theme credits:") % self.themename]
        self.bank["themeThanks"] = [_("%s theme specific thanks:") % self.themename]
        # Languages
        self.bank["french"] = [_("French")]
        self.bank["french90"] = [_("French (reform 1990)")]
        self.bank["german"] = [_("German")]
        self.bank["italian"] = [_("Italian")]
        self.bank["piglatin"] = [_("Pig Latin")]
        self.bank["portuguese-b"] = [_("Portuguese (Brazilian)")]
        self.bank["russian"] = [_("Russian")]
        self.bank["spanish"] = [_("Spanish")]
        self.bank["swedish"] = [_("Swedish")]

        self.videoLayer = False
        self.background = None

        vidSource = os.path.join(Version.dataPath(), "themes", self.themename, "menu", "credits.ogv")
        if os.path.isfile(vidSource):
            try:
                self.vidPlayer = VideoLayer(self.engine, vidSource, mute=True, loop=True)
            except (IOError, VideoPlayerError):
                Log.error("Error loading credits video:")
            else:
                self.vidPlayer.play()
                self.engine.view.pushLayer(self.vidPlayer)
                self.videoLayer = True

        if not self.videoLayer and not self.engine.loadImgDrawing(
            self, "background", os.path.join("themes", self.themename, "menu", "credits.png")
        ):
            self.background = None

        if not self.engine.loadImgDrawing(
            self, "topLayer", os.path.join("themes", self.themename, "menu", "creditstop.png")
        ):
            self.topLayer = None

        space = Text(nf, hs, c1, "center", " ")
        self.credits = [
            Picture(self.engine, "fofix_logo.png", 0.10),
            Text(nf, ns, c1, "center", "%s" % Version.version()),
            space,
        ]

        # evilynux: Main FoFiX credits (taken from CREDITS).
        self.parseText("CREDITS")
        self.credits.extend([space, space, space])
        # evilynux: Theme credits (taken from data/themes/<theme name>/CREDITS).
        self.parseText(os.path.join("data", "themes", self.themename, "CREDITS"))

        self.credits.extend(
            [
                space,
                space,
                Text(nf, ns, c1, "left", _("Made with:")),
                Text(
                    nf, ns, c2, "right", "Python " + sys.version.split(" ")[0]
                ),  # stump: the version that's actually in use
                Text(nf, bs, c2, "right", "http://www.python.org"),
                space,
                Text(
                    nf, ns, c2, "right", "PyGame " + pygame.version.ver.replace("release", "")
                ),  # stump: the version that's actually in use
                Text(nf, bs, c2, "right", "http://www.pygame.org"),
                space,
                Text(
                    nf, ns, c2, "right", "PyOpenGL " + OpenGL.__version__
                ),  # evilynux: the version that's actually in use
                Text(nf, bs, c2, "right", "http://pyopengl.sourceforge.net"),
                space,
                Text(nf, ns, c2, "right", "Illusoft Collada module 0.3.159"),
                Text(nf, bs, c2, "right", "http://colladablender.illusoft.com"),
                space,
                Text(nf, ns, c2, "right", "MXM Python Midi Package 0.1.4"),
                Text(nf, bs, c2, "right", "http://www.mxm.dk/products/public/pythonmidi"),
                space,
                space,
                Text(nf, bs, c1, "center", _("Source Code available under the GNU General Public License")),
                Text(nf, bs, c2, "center", "http://code.google.com/p/fofix"),
                space,
                space,
                Text(nf, bs, c1, "center", _("Copyright 2006, 2007 by Unreal Voodoo")),
                Text(nf, bs, c1, "center", _("Copyright 2008-2013 by Team FoFiX")),
                space,
                space,
            ]
        )
Пример #28
0
    def __init__(self, engine):
        self.engine              = engine

        self.logClassInits = Config.get("game", "log_class_inits")
        if self.logClassInits == 1:
            Log.debug("MainMenu class init (MainMenu.py)...")

        self.time                = 0.0
        self.nextLayer           = None
        self.visibility          = 0.0
        self.active              = False

        self.showStartupMessages = False

        self.gfxVersionTag = Config.get("game", "gfx_version_tag")

        self.chosenNeck = Config.get("game", "default_neck")
        exists = 0

        if engine.loadImgDrawing(self, "ok", os.path.join("necks",self.chosenNeck+".png")):
            exists = 1
        elif engine.loadImgDrawing(self, "ok", os.path.join("necks","Neck_"+self.chosenNeck+".png")):
            exists = 1

        #MFH - fallback logic now supports a couple valid default neck filenames
        #MFH - check for Neck_1
        if exists == 0:
            if engine.loadImgDrawing(self, "ok", os.path.join("necks","Neck_1.png")):
                Config.set("game", "default_neck", "1")
                Log.warn("Default chosen neck not valid; fallback Neck_1.png forced.")
                exists = 1

        #MFH - check for defaultneck
        if exists == 0:
            if engine.loadImgDrawing(self, "ok", os.path.join("necks","defaultneck.png")):
                Log.warn("Default chosen neck not valid; fallback defaultneck.png forced.")
                Config.set("game", "default_neck", "defaultneck")
                exists = 1
            else:
                Log.error("Default chosen neck not valid; fallbacks Neck_1.png and defaultneck.png also not valid!")

        #Get theme
        self.theme       = self.engine.data.theme
        self.themeCoOp   = self.engine.data.themeCoOp
        self.themename   = self.engine.data.themeLabel
        self.useSoloMenu = self.engine.theme.use_solo_submenu

        allowMic = True

        self.menux = self.engine.theme.menuPos[0]
        self.menuy = self.engine.theme.menuPos[1]

        self.rbmenu = self.engine.theme.menuRB

        #MFH
        self.main_menu_scale = self.engine.theme.main_menu_scaleVar
        self.main_menu_vspacing = self.engine.theme.main_menu_vspacingVar

        if not self.engine.loadImgDrawing(self, "background", os.path.join("themes",self.themename,"menu","mainbg.png")):
            self.background = None
        self.engine.loadImgDrawing(self, "BGText", os.path.join("themes",self.themename,"menu","maintext.png"))
        self.engine.loadImgDrawing(self, "optionsBG", os.path.join("themes",self.themename,"menu","optionsbg.png"))
        self.engine.loadImgDrawing(self, "optionsPanel", os.path.join("themes",self.themename,"menu","optionspanel.png"))

        #racer: added version tag
        if self.gfxVersionTag or self.engine.theme.versiontag == True:
            if not self.engine.loadImgDrawing(self, "version", os.path.join("themes",self.themename,"menu","versiontag.png")):
                if not self.engine.loadImgDrawing(self, "version", "versiontag.png"): #falls back on default versiontag.png in data\ folder
                    self.version = None
        else:
            self.version = None

        #myfingershurt: random main menu music function, menu.ogg and menuXX.ogg (any filename with "menu" as the first 4 letters)
        self.files = None
        filepath = self.engine.getPath(os.path.join("themes",self.themename,"sounds"))
        if os.path.isdir(filepath):
            self.files = []
            allfiles = os.listdir(filepath)
            for name in allfiles:
                if os.path.splitext(name)[1] == ".ogg":
                    if string.find(name,"menu") > -1:
                        self.files.append(name)


        if self.files:
            i = random.randint(0,len(self.files)-1)
            filename = self.files[i]
            sound = os.path.join("themes",self.themename,"sounds",filename)
            self.menumusic = True
            engine.menuMusic = True

            self.song = Audio.Music(self.engine.resource.fileName(sound))
            self.song.setVolume(self.engine.config.get("audio", "menu_volume"))
            self.song.play(0)  #no loop
        else:
            self.menumusic = False

        self.opt_text_color     = self.engine.theme.opt_text_colorVar
        self.opt_selected_color = self.engine.theme.opt_selected_colorVar

        trainingMenu = [
          (_("Tutorials"), self.showTutorial),
          (_("Practice"), lambda: self.newLocalGame(mode1p = 1)),
        ]

        self.opt_bkg_size = [float(i) for i in self.engine.theme.opt_bkg_size]
        self.opt_text_color = self.engine.theme.hexToColor(self.engine.theme.opt_text_colorVar)
        self.opt_selected_color = self.engine.theme.hexToColor(self.engine.theme.opt_selected_colorVar)

        if self.BGText:
            strCareer = ""
            strQuickplay = ""
            strSolo = ""
            strMultiplayer = ""
            strTraining = ""
            strSettings = ""
            strQuit = ""
        else:
            strCareer = "Career"
            strQuickplay = "Quickplay"
            strSolo = "Solo"
            strMultiplayer = "Multiplayer"
            strTraining = "Training"
            strSettings = "Settings"
            strQuit = "Quit"

        multPlayerMenu = [
            (_("Face-Off"),     lambda: self.newLocalGame(players = 2,             maxplayers = 4)),
            (_("Pro Face-Off"), lambda: self.newLocalGame(players = 2, mode2p = 1, maxplayers = 4)),
            (_("Party Mode"),   lambda: self.newLocalGame(             mode2p = 2)),
            (_("FoFiX Co-Op"),  lambda: self.newLocalGame(players = 2, mode2p = 3, maxplayers = 4, allowMic = allowMic)),
            (_("RB Co-Op"),     lambda: self.newLocalGame(players = 2, mode2p = 4, maxplayers = 4, allowMic = allowMic)),
            (_("GH Co-Op"),     lambda: self.newLocalGame(players = 2, mode2p = 5, maxplayers = 4)),
            (_("GH Battle"),    lambda: self.newLocalGame(players = 2, mode2p = 6, allowDrum = False)), #akedrou- so you can block drums
          ]

        if not self.useSoloMenu:

            mainMenu = [
              (strCareer, lambda:   self.newLocalGame(mode1p = 2, allowMic = allowMic)),
              (strQuickplay, lambda:        self.newLocalGame(allowMic = allowMic)),
              ((strMultiplayer,"multiplayer"), multPlayerMenu),
              ((strTraining,"training"),    trainingMenu),
              ((strSettings,"settings"),  self.settingsMenu),
              (strQuit,        self.quit),
            ]

        else:

            soloMenu = [
              (_("Solo Tour"), lambda: self.newLocalGame(mode1p = 2, allowMic = allowMic)),
              (_("Quickplay"), lambda: self.newLocalGame(allowMic = allowMic)),
            ]

            mainMenu = [
              ((strSolo,"solo"), soloMenu),
              ((strMultiplayer,"multiplayer"), multPlayerMenu),
              ((strTraining,"training"),    trainingMenu),
              ((strSettings,"settings"),  self.settingsMenu),
              (strQuit,        self.quit),
            ]


        w, h, = self.engine.view.geometry[2:4]

        self.menu = Menu(self.engine, mainMenu, onClose = lambda: self.engine.view.popLayer(self), pos = (self.menux, .75-(.75*self.menuy)))

        engine.mainMenu = self    #Points engine.mainMenu to the one and only MainMenu object instance

        ## whether the main menu has come into view at least once
        self.shownOnce = False
Пример #29
0
##Alarian: Get unlimited themes by foldername
themepath = os.path.join(Version.dataPath(), "themes")
themes = []
defaultTheme = None           #myfingershurt
allthemes = os.listdir(themepath)
for name in allthemes:
    if os.path.exists(os.path.join(themepath,name,"notes","notes.png")):
        themes.append(name)
        if name == "MegaLight V4":
            defaultTheme = name

i = len(themes)
if i == 0:
    if os.name == 'posix':
        Log.error("No valid theme found!\n"+\
                  "Make sure theme files are properly cased "+\
                  "e.g. notes.png works, Notes.png doesn't\n")
    else:
        Log.error("No valid theme found!")
    sys.exit(1);

if defaultTheme is None:
    defaultTheme = themes[0]    #myfingershurt

#myfingershurt: default theme must be an existing one!
Config.define("coffee", "themename",           str,   defaultTheme,      text = _("Theme"),                options = dict([(str(themes[n]),themes[n]) for n in range(0, i)]), tipText = _("Sets the overall graphical feel of the game. You can find and download many more at fretsonfire.net"))

##Alarian: End Get unlimited themes by foldername
Player.loadControls()

Пример #30
0
    def set(self, dir):
        """Do all shader setup.
           dir = directory to load shaders from
        """

        #stump: check whether all needed extensions are actually supported
        if not glInitShaderObjectsARB():
            Log.warn('OpenGL extension ARB_shader_objects not supported - shaders disabled')
            return
        if not glInitVertexShaderARB():
            Log.warn('OpenGL extension ARB_vertex_shader not supported - shaders disabled')
            return
        if not glInitFragmentShaderARB():
            Log.warn('OpenGL extension ARB_fragment_shader not supported - shaders disabled')
            return
        if not glInitMultitextureARB():
            Log.warn('OpenGL extension ARB_multitexture not supported - shaders disabled')
            return
        if not glInitTexture3DEXT():
            if sys.platform != 'darwin':
                Log.warn('OpenGL extension EXT_texture3D not supported - shaders disabled')
                return

        self.workdir = dir

        # Load textures needed by the shaders.
        try:
            self.noise3D = self.loadTex3D("noise3d.dds")
            self.outline = self.loadTex2D("outline.tga")
        except:
            Log.error('Could not load shader textures - shaders disabled: ')
            return

        self.multiTex = (GL_TEXTURE0_ARB,GL_TEXTURE1_ARB,GL_TEXTURE2_ARB,GL_TEXTURE3_ARB)
        self.enabled = True
        self.turnon = True

        # Compile the shader objects that we are going to use.
        # Also set uniform shader variables to default values.
        try:
            self.make("lightning","stage")
        except:
            Log.error("Error compiling lightning shader: ")
        else:
            self.enable("stage")
            self.setVar("ambientGlowHeightScale",6.0)
            self.setVar("color",(0.0,0.0,0.0,0.0))
            self.setVar("glowFallOff",0.024)
            self.setVar("height",0.44)
            self.setVar("sampleDist",0.0076)
            self.setVar("speed",1.86)
            self.setVar("vertNoise",0.78)
            self.setVar("fading",1.0)
            self.setVar("solofx",False)
            self.setVar("scalexy",(5.0,2.4))
            self.setVar("fixalpha",True)
            self.setVar("offset",(0.0,-2.5))
            self.disable()

        try:
            self.make("lightning","sololight")
        except:
            Log.error("Error compiling lightning shader: ")
        else:
            self.enable("sololight")
            self.setVar("scalexy",(5.0,1.0))
            self.setVar("ambientGlow",0.5)
            self.setVar("ambientGlowHeightScale",6.0)
            self.setVar("solofx",True)
            self.setVar("height",0.3)
            self.setVar("glowFallOff",0.024)
            self.setVar("sampleDist",0.0076)
            self.setVar("fading",4.0)
            self.setVar("speed",1.86)
            self.setVar("vertNoise",0.78)
            self.setVar("solofx",True)
            self.setVar("color",(0.0,0.0,0.0,0.0))
            self.setVar("fixalpha",True)
            self.setVar("glowStrength",100.0)
            self.disable()

        try:
            self.make("lightning","tail")
        except:
            Log.error("Error compiling lightning shader: ")
        else:
            self.enable("tail")
            self.setVar("scalexy",(5.0,1.0))
            self.setVar("ambientGlow",0.1)
            self.setVar("ambientGlowHeightScale",6.0)
            self.setVar("solofx",True)
            self.setVar("fading",4.0)
            self.setVar("height",0.0)
            self.setVar("glowFallOff",0.024)
            self.setVar("sampleDist",0.0076)
            self.setVar("speed",1.86)
            self.setVar("vertNoise",0.78)
            self.setVar("solofx",True)
            self.setVar("color",(0.3,0.7,0.9,0.6))
            self.setVar("glowStrength",70.0)
            self.setVar("fixalpha",True)
            self.setVar("offset",(0.0,0.0))
            self.disable()

        try:
            self.make("rockbandtail","tail2")
        except:
            Log.error("Error compiling rockbandtail shader: ")
        else:
            self.enable("tail2")
            self.setVar("height",0.2)
            self.setVar("color",(0.0,0.6,1.0,1.0))
            self.setVar("speed",9.0)
            self.setVar("offset",(0.0,0.0))
            self.setVar("scalexy",(5.0,1.0))
            self.disable()

        try:
            self.make("metal","notes")
        except:
            Log.error("Error compiling metal shader: ")
        else:
            self.enable("notes")
            self.disable()

        try:
            self.make("neck","neck")
        except:
            Log.error("Error compiling neck shader: ")

        try:
            self.make("cd","cd")
        except:
            Log.error("Error compiling cd shader: ")
Пример #31
0
 def screenError(self):
     Log.error(
         "Video setup failed. Make sure your graphics card supports 32-bit display modes."
     )
     raise
Пример #32
0
def upload_crop(image_path, ext):
    response = {}
    pin_width = 0
    pin_height = 0
    if not os.path.exists(image_path):
        response["status"] = True
        response["message"] = "Not found: %s" % image_path
        return response

    image_ext = ext[1:].upper()
    if image_ext == "JPG": image_ext = "JPEG"

    store_dir = _get_image_dir(PHOTO_PATH)
    base_name = get_uuid()
    source_name = "%s_source%s" % (base_name, ext)
    source_path = os.path.join(store_dir, source_name)
    thumb_name = "%s_thumb%s" % (base_name, ext)
    thumb_path = os.path.join(store_dir, thumb_name)
    middle_name = "%s_mid%s" % (base_name, ext)
    middle_path = os.path.join(store_dir, middle_name)

    # source
    try:
        os.rename(image_path, source_path)
    except Exception:
        Log.error("Save source error: %s" % image_path)
        response["status"] = False
        response["message"] = "Save source error: %s" % image_path
        return response

    img = Image.open(source_path)
    # middle
    dest_width = MIDDLE_WIDTH
    width, height = img.size
    if width < dest_width or height < dest_width:
        response["status"] = False
        response["message"] = "Image size too small"
        return response
    dest_height = int(float(dest_width) * float(height) / float(width))
    img_mid = img.resize((dest_width, dest_height), Image.ANTIALIAS)
    img_mid.save(middle_path, image_ext, quality=150)

    pin_width, pin_height = (dest_width, dest_height)

    # thumb
    dest_width, dest_height = THUMB_SIZE
    left, upper, right, lowwer = 0, 0, dest_width, dest_height
    crop_width, crop_height = dest_width, dest_height
    if float(dest_width)/float(dest_height) < float(width)/float(height):
        crop_height = height
        crop_width = int(height * (float(dest_width) / float(dest_height)))
        left = int((width - crop_width) / 2)
        right = left + crop_width
        lowwer = height
    else:
        crop_width = width
        crop_height = int(width * (float(dest_height) / float(dest_width)))
        upper = int((height - crop_height) / 2)
        lowwer = upper + crop_height
        right = width

    box = (left, upper, right, lowwer)
    img_thumb = img.crop(box)
    img_thumb = img_thumb.resize((dest_width, dest_height), Image.ANTIALIAS)
    img_thumb.save(thumb_path, image_ext, quality=150)

    response["status"] = True
    response["source_path"] = source_path
    response["thumb_path"] = thumb_path
    response["middle_path"] = middle_path
    response["height"] = pin_height
    response["width"] = pin_width
    return response
Пример #33
0
    def __init__(self):

        self.logClassInits = Config.get("game", "log_class_inits")
        if self.logClassInits == 1:
            Log.debug("Input class init (Input.py)...")

        Task.__init__(self)
        self.mouse = pygame.mouse
        self.mouseListeners = []
        self.keyListeners = []
        self.systemListeners = []
        self.priorityKeyListeners = []
        self.controls = Controls()
        self.activeGameControls = []
        self.p2Nav = self.controls.p2Nav
        self.type1 = self.controls.type[0]
        self.keyCheckerMode = Config.get("game", "key_checker_mode")
        self.disableKeyRepeat()

        self.gameGuitars = 0
        self.gameDrums = 0
        self.gameMics = 0
        self.gameBots = 0

        # Initialize joysticks
        pygame.joystick.init()
        self.joystickNames = {}
        self.joystickAxes = {}
        self.joystickHats = {}

        self.joysticks = [
            pygame.joystick.Joystick(id)
            for id in range(pygame.joystick.get_count())
        ]
        for j in self.joysticks:
            j.init()
            self.joystickNames[j.get_id()] = j.get_name()
            self.joystickAxes[j.get_id()] = [0] * j.get_numaxes()
            self.joystickHats[j.get_id()] = [(0, 0)] * j.get_numhats()
        Log.debug("%d joysticks found." % len(self.joysticks))

        # Enable music events
        Audio.Music.setEndEvent(MusicFinished)
        #Audio.Music.setEndEvent()   #MFH - no event required?

        # Custom key names
        self.getSystemKeyName = pygame.key.name
        pygame.key.name = self.getKeyName

        self.midi = []
        if haveMidi:
            pygame.midi.init()
            for i in range(pygame.midi.get_count()):
                interface, name, is_input, is_output, is_opened = pygame.midi.get_device_info(
                    i)
                Log.debug("Found MIDI device: %s on %s" % (name, interface))
                if not is_input:
                    Log.debug("MIDI device is not an input device.")
                    continue
                try:
                    self.midi.append(pygame.midi.Input(i))
                    Log.debug("Device opened as device number %d." %
                              len(self.midi))
                except pygame.midi.MidiException:
                    Log.error("Error opening device for input.")
            if len(self.midi) == 0:
                Log.debug("No MIDI input ports found.")
        else:
            Log.notice(
                "MIDI input support is not available; install at least pygame 1.9 to get it."
            )
Пример #34
0
    def __init__(self, engine):
        self.engine = engine

        self.logClassInits = Config.get("game", "log_class_inits")
        if self.logClassInits == 1:
            Log.debug("MainMenu class init (MainMenu.py)...")

        self.time = 0.0
        self.nextLayer = None
        self.visibility = 0.0
        self.active = False

        self.showStartupMessages = False

        self.gfxVersionTag = Config.get("game", "gfx_version_tag")

        self.chosenNeck = Config.get("game", "default_neck")
        exists = 0

        if engine.loadImgDrawing(
                self, "ok", os.path.join("necks", self.chosenNeck + ".png")):
            exists = 1
        elif engine.loadImgDrawing(
                self, "ok",
                os.path.join("necks", "Neck_" + self.chosenNeck + ".png")):
            exists = 1

        #MFH - fallback logic now supports a couple valid default neck filenames
        #MFH - check for Neck_1
        if exists == 0:
            if engine.loadImgDrawing(self, "ok",
                                     os.path.join("necks", "Neck_1.png")):
                Config.set("game", "default_neck", "1")
                Log.warn(
                    "Default chosen neck not valid; fallback Neck_1.png forced."
                )
                exists = 1

        #MFH - check for defaultneck
        if exists == 0:
            if engine.loadImgDrawing(self, "ok",
                                     os.path.join("necks", "defaultneck.png")):
                Log.warn(
                    "Default chosen neck not valid; fallback defaultneck.png forced."
                )
                Config.set("game", "default_neck", "defaultneck")
                exists = 1
            else:
                Log.error(
                    "Default chosen neck not valid; fallbacks Neck_1.png and defaultneck.png also not valid!"
                )

        #Get theme
        self.theme = self.engine.data.theme
        self.themeCoOp = self.engine.data.themeCoOp
        self.themename = self.engine.data.themeLabel
        self.useSoloMenu = self.engine.theme.use_solo_submenu

        allowMic = True

        self.menux = self.engine.theme.menuPos[0]
        self.menuy = self.engine.theme.menuPos[1]

        self.rbmenu = self.engine.theme.menuRB

        #MFH
        self.main_menu_scale = self.engine.theme.main_menu_scaleVar
        self.main_menu_vspacing = self.engine.theme.main_menu_vspacingVar

        if not self.engine.loadImgDrawing(
                self, "background",
                os.path.join("themes", self.themename, "menu", "mainbg.png")):
            self.background = None
        self.engine.loadImgDrawing(
            self, "BGText",
            os.path.join("themes", self.themename, "menu", "maintext.png"))
        self.engine.loadImgDrawing(
            self, "optionsBG",
            os.path.join("themes", self.themename, "menu", "optionsbg.png"))
        self.engine.loadImgDrawing(
            self, "optionsPanel",
            os.path.join("themes", self.themename, "menu", "optionspanel.png"))

        #racer: added version tag
        if self.gfxVersionTag or self.engine.theme.versiontag == True:
            if not self.engine.loadImgDrawing(
                    self, "version",
                    os.path.join("themes", self.themename, "menu",
                                 "versiontag.png")):
                if not self.engine.loadImgDrawing(
                        self, "version", "versiontag.png"
                ):  #falls back on default versiontag.png in data\ folder
                    self.version = None
        else:
            self.version = None

        #myfingershurt: random main menu music function, menu.ogg and menuXX.ogg (any filename with "menu" as the first 4 letters)
        self.files = None
        filepath = self.engine.getPath(
            os.path.join("themes", self.themename, "sounds"))
        if os.path.isdir(filepath):
            self.files = []
            allfiles = os.listdir(filepath)
            for name in allfiles:
                if os.path.splitext(name)[1] == ".ogg":
                    if string.find(name, "menu") > -1:
                        self.files.append(name)

        if self.files:
            i = random.randint(0, len(self.files) - 1)
            filename = self.files[i]
            sound = os.path.join("themes", self.themename, "sounds", filename)
            self.menumusic = True
            engine.menuMusic = True

            self.song = Audio.Music(self.engine.resource.fileName(sound))
            self.song.setVolume(self.engine.config.get("audio", "menu_volume"))
            self.song.play(0)  #no loop
        else:
            self.menumusic = False

        self.opt_text_color = self.engine.theme.opt_text_colorVar
        self.opt_selected_color = self.engine.theme.opt_selected_colorVar

        trainingMenu = [
            (_("Tutorials"), self.showTutorial),
            (_("Practice"), lambda: self.newLocalGame(mode1p=1)),
        ]

        self.opt_bkg_size = [float(i) for i in self.engine.theme.opt_bkg_size]
        self.opt_text_color = self.engine.theme.hexToColor(
            self.engine.theme.opt_text_colorVar)
        self.opt_selected_color = self.engine.theme.hexToColor(
            self.engine.theme.opt_selected_colorVar)

        if self.BGText:
            strCareer = ""
            strQuickplay = ""
            strSolo = ""
            strMultiplayer = ""
            strTraining = ""
            strSettings = ""
            strQuit = ""
        else:
            strCareer = "Career"
            strQuickplay = "Quickplay"
            strSolo = "Solo"
            strMultiplayer = "Multiplayer"
            strTraining = "Training"
            strSettings = "Settings"
            strQuit = "Quit"

        multPlayerMenu = [
            (_("Face-Off"),
             lambda: self.newLocalGame(players=2, maxplayers=4)),
            (_("Pro Face-Off"),
             lambda: self.newLocalGame(players=2, mode2p=1, maxplayers=4)),
            (_("Party Mode"), lambda: self.newLocalGame(mode2p=2)),
            (_("FoFiX Co-Op"), lambda: self.newLocalGame(
                players=2, mode2p=3, maxplayers=4, allowMic=allowMic)),
            (_("RB Co-Op"), lambda: self.newLocalGame(
                players=2, mode2p=4, maxplayers=4, allowMic=allowMic)),
            (_("GH Co-Op"),
             lambda: self.newLocalGame(players=2, mode2p=5, maxplayers=4)),
            (_("GH Battle"),
             lambda: self.newLocalGame(players=2, mode2p=6, allowDrum=False)
             ),  #akedrou- so you can block drums
        ]

        if not self.useSoloMenu:

            mainMenu = [
                (strCareer,
                 lambda: self.newLocalGame(mode1p=2, allowMic=allowMic)),
                (strQuickplay, lambda: self.newLocalGame(allowMic=allowMic)),
                ((strMultiplayer, "multiplayer"), multPlayerMenu),
                ((strTraining, "training"), trainingMenu),
                ((strSettings, "settings"), self.settingsMenu),
                (strQuit, self.quit),
            ]

        else:

            soloMenu = [
                (_("Solo Tour"),
                 lambda: self.newLocalGame(mode1p=2, allowMic=allowMic)),
                (_("Quickplay"), lambda: self.newLocalGame(allowMic=allowMic)),
            ]

            mainMenu = [
                ((strSolo, "solo"), soloMenu),
                ((strMultiplayer, "multiplayer"), multPlayerMenu),
                ((strTraining, "training"), trainingMenu),
                ((strSettings, "settings"), self.settingsMenu),
                (strQuit, self.quit),
            ]

        w, h, = self.engine.view.geometry[2:4]

        self.menu = Menu(self.engine,
                         mainMenu,
                         onClose=lambda: self.engine.view.popLayer(self),
                         pos=(self.menux, .75 - (.75 * self.menuy)))

        engine.mainMenu = self  #Points engine.mainMenu to the one and only MainMenu object instance

        ## whether the main menu has come into view at least once
        self.shownOnce = False
Пример #35
0
            engine.cmdMode = nbrplayers, mode, 0
        else:
            engine.cmdMode = nbrplayers, 0, mode

    # Play the intro video if it is present, we have the capability, and
    # we are not in one-shot mode.
    videoLayer = False
    if not engine.cmdPlay:
        themename = Config.get("coffee", "themename")
        vidSource = os.path.join(Version.dataPath(), 'themes', themename, \
                                 'menu', 'intro.ogv')
        if os.path.isfile(vidSource):
            try:
                vidPlayer = VideoLayer(engine, vidSource, cancellable=True)
            except (IOError, VideoPlayerError):
                Log.error("Error loading intro video:")
            else:
                vidPlayer.play()
                engine.view.pushLayer(vidPlayer)
                videoLayer = True
                engine.ticksAtStart = pygame.time.get_ticks()
                while not vidPlayer.finished:
                    engine.run()
                engine.view.popLayer(vidPlayer)
                engine.view.pushLayer(MainMenu(engine))
    if not videoLayer:
        engine.setStartupLayer(MainMenu(engine))

    # Run the main game loop.
    try:
        engine.ticksAtStart = pygame.time.get_ticks()
Пример #36
0
class UserMapReduced(object):
    @classmethod
    def instance(cls):
        if not hasattr(cls, "_instance"):
            cls._instance = cls()
        return cls._instance

    def __init__(self):
        self.mongo = Database()
        self.reduce = Code(
            "function(key, values) {"
            "  var result = { entries:0, likes:0, followers:0, friends:0 };"
            "  values.forEach(function(value) {"
            "    if (value.entries !== null) {"
            "      result.entries += value.entries;"
            "    }"
            "    if (value.likes !== null) {"
            "      result.likes += value.likes;"
            "    }"
            "    if (value.followers !== null) {"
            "      result.followers += value.followers;"
            "    }"
            "    if (value.friends !== null) {"
            "      result.friends += value.friends;"
            "    }"
            "  });"
            "  return result;"
            "}")
    
    def _reduce_entries(self):
        map = Code(
            "function() {"
            "  var args = { entries:1, likes:0, followers:0, friends:0 };"
            "  emit(this.user_id, args);"
            "}")
        self.mongo.db["entries"].map_reduce(
            map, self.reduce, out={"reduce" : "user_status"})

    def _reduce_likes(self):
        map = Code(
            "function() {"
            "  var args = { entries:0, likes:1, followers:0, friends:0 };"
            "  emit(this.user_id, args);"
            "}")
        self.mongo.db["favs"].map_reduce(
            map, self.reduce, out={"reduce" : "user_status"})

    def _reduce_followers(self):
        map = Code(
            "function() {"
            "  var args = { entries:0, likes:0, followers:1, friends:0 };"
            "  emit(this.user_id, args);"
            "}")
        self.mongo.db["relations"].map_reduce(
            map, self.reduce, out={"reduce" : "user_status"})

    def _reduce_friends(self):
        map = Code(
            "function() {"
            "  var args = { entries:0, likes:0, followers:0, friends:1 };"
            "  emit(this.follower_id, args);"
            "}")
        self.mongo.db["relations"].map_reduce(
            map, self.reduce, out={"reduce" : "user_status"})

    def _clear_result(self):
        self.mongo.db["user_status"].remove()

    def _save_result(self):
        cursor = self.mongo.db.user_status.find()
        for item in cursor:
            params = {"_id": item["_id"]}
            for k, v in item["value"].items():
                item["value"][k] = int(v)
            user = {"count_info" : item["value"] }
            self.mongo.db.users.update(params, {"$set" : user})
    
    def process(self):
        try:
            self._clear_result()
            self._reduce_entries()
            self._reduce_likes()
            self._reduce_followers()
            self._reduce_friends()
        except Exception, ex:
            Log.error(ex, "mapreduce")
            return
        try:
            self._save_result()
        except Exception, ex:
            Log.error(ex, "mapreduce")
Пример #37
0
    def __init__(self, engine, instrument, playerObj):

        self.engine         = engine
        self.player         = instrument.player
        self.instrument     = instrument

        self.isDrum       = self.instrument.isDrum
        self.isBassGuitar = self.instrument.isBassGuitar
        self.isVocal      = self.instrument.isVocal

        self.oNeckovr = None    #MFH - needs to be here to prevent crashes!

        self.staticStrings  = self.engine.config.get("performance", "static_strings")

        self.indexFps       = self.engine.config.get("video", "fps") #QQstarS

        self.neckAlpha=[] # necks transparency
        self.neckAlpha.append( self.engine.config.get("game", "necks_alpha") ) # all necks
        self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "neck_alpha") ) # normal neck
        self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "solo_neck_alpha") ) # solo neck
        self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "bg_neck_alpha") ) # bass groove neck
        self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "overlay_neck_alpha") ) # overlay neck
        self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "fail_neck_alpha") ) # fail neck
        self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "4x_neck_alpha") ) # 4x multi neck

        self.boardWidth     = self.engine.theme.neckWidth
        self.boardLength    = self.engine.theme.neckLength
        self.shaderSolocolor    = self.engine.theme.shaderSolocolor

        self.boardFadeAmount = self.engine.theme.boardFade

        self.doNecksRender = self.engine.theme.doNecksRender

        #death_au: fixed neck size

        if self.isDrum and self.engine.config.get("game", "large_drum_neck"):
            self.boardWidth     = 4.0
            self.boardLength    = 12.0

        self.beatsPerBoard  = 5.0
        self.beatsPerUnit   = self.beatsPerBoard / self.boardLength

        color = (1,1,1)
        self.vis = 1


        size = 0

        # evilynux - Neck color
        self.board_col  = np.array([[color[0],color[1],color[2], 0],
                                 [color[0],color[1],color[2], 0],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], 0],
                                 [color[0],color[1],color[2], 0]], dtype=np.float32)

        w            = self.boardWidth
        l            = self.boardLength

        # evilynux - Neck vertices
        self.board_vtx = np.array([[-w / 2, 0, -2],
                                [w / 2, 0, -2],
                                [-w/ 2, 0, -1],
                                [w / 2, 0, -1],
                                [-w / 2, 0, l * .7],
                                [w / 2, 0, l * .7],
                                [-w / 2, 0, l],
                                [w / 2, 0, l]], dtype=np.float32)

        self.shader_neck_vtx = np.array([[-w / 2, 0.1, -2],
                                      [w / 2, 0.1, -2],
                                      [-w / 2, 0.1, l],
                                      [w / 2, 0.1, l]], dtype=np.float32)

        self.track_vtx = np.array([[-w / 2, 0, -2+size],
                                [w / 2, 0, -2+size],
                                [-w / 2, 0, -1+size],
                                [w / 2, 0, -1+size],
                                [-w / 2, 0, l * .7],
                                [w / 2, 0, l * .7],
                                [-w / 2, 0, l],
                                [w / 2, 0, l]], dtype=np.float32)


        self.soloLightVtx1 = np.array([[w / 2-1.0, 0.4, -2],
                                    [w / 2+1.0, 0.4, -2],
                                    [w / 2-1.0, 0.4, l],
                                    [w / 2+1.0, 0.4, l]], dtype=np.float32)

        self.soloLightVtx2 = np.array([[-w / 2+1.0, 0.4, -2],
                                    [-w / 2-1.0, 0.4, -2],
                                    [-w / 2+1.0, 0.4, l],
                                    [-w / 2-1.0, 0.4, l]], dtype=np.float32)

        self.bpm_vtx  = np.array([[-(w / 2), 0,  0],
                               [-(w / 2), 0,  0],
                               [(w / 2), 0,  0],
                               [(w / 2), 0,  0]], dtype=np.float32)


        self.board_scroll_vtx = np.array([[-w / 2, 0, 0],
                                          [w / 2, 0, 0],
                                          [-w/ 2, 0, 0],
                                          [w / 2, 0, 0],
                                          [-w/ 2, 0, 0],
                                          [w / 2, 0, 0],
                                          [-w/ 2, 0, 0],
                                          [w / 2, 0, 0]], dtype=np.float32)

        # evilynux - Sidebars vertices
        w += 0.15
        self.sidebars_vtx = np.array([[-w / 2, 0, -2],
                                   [w / 2, 0, -2],
                                   [-w/ 2, 0, -1],
                                   [w / 2, 0, -1],
                                   [-w / 2, 0, l * .7],
                                   [w / 2, 0, l * .7],
                                   [-w / 2, 0, l],
                                   [w / 2, 0, l]], dtype=np.float32)

        self.sidebars_scroll_vtx = np.array([[-w / 2, 0, 0],
                                             [w / 2, 0, 0],
                                             [-w/ 2, 0, 0],
                                             [w / 2, 0, 0],
                                             [-w/ 2, 0, 0],
                                             [w / 2, 0, 0],
                                             [-w/ 2, 0, 0],
                                             [w / 2, 0, 0]], dtype=np.float32)

        self.bpm_tex  = np.array([[0.0, 1.0],
                               [0.0, 0.0],
                               [1.0, 1.0],
                               [1.0, 0.0]], dtype=np.float32)

        self.bpm_col  = np.array([[1, 1, 1, self.vis],
                               [1, 1, 1, self.vis],
                               [1, 1, 1, self.vis],
                               [1, 1, 1, self.vis]], dtype=np.float32)

        self.board_col_flash  = np.array([[color[0],color[1],color[2], 0],
                                 [color[0],color[1],color[2], 0],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], self.vis],
                                 [color[0],color[1],color[2], 0],
                                 [color[0],color[1],color[2], 0]], dtype=np.float32)

        self.board_tex_static = np.array([[0.0, self.project(-2 * self.beatsPerUnit)],
                                          [1.0, self.project(-2 * self.beatsPerUnit)],
                                          [0.0, self.project(-1 * self.beatsPerUnit)],
                                          [1.0, self.project(-1 * self.beatsPerUnit)],
                                          [0.0, self.project(l * self.beatsPerUnit * .7)],
                                          [1.0, self.project(l * self.beatsPerUnit * .7)],
                                          [0.0, self.project(l * self.beatsPerUnit)],
                                          [1.0, self.project(l * self.beatsPerUnit)]], dtype=np.float32)

        self.board_tex  = np.array([[0.0, 0],
                                    [1.0, 0],
                                    [0.0, 0],
                                    [1.0, 0],
                                    [0.0, 0],
                                    [1.0, 0],
                                    [0.0, 0],
                                    [1.0, 0]], dtype=np.float32)

        # evilynux - Just in case the type has became double, convert to float32
        self.board_col             = self.board_col.astype(np.float32)
        self.board_vtx             = self.board_vtx.astype(np.float32)
        self.sidebars_vtx          = self.sidebars_vtx.astype(np.float32)
        self.sidebars_scroll_vtx   = self.sidebars_scroll_vtx.astype(np.float32)
        self.bpm_tex               = self.bpm_tex.astype(np.float32)
        self.bpm_col               = self.bpm_col.astype(np.float32)
        self.soloLightVtx1         = self.soloLightVtx1.astype(np.float32)
        self.soloLightVtx2         = self.soloLightVtx2.astype(np.float32)
        self.shader_neck_vtx       = self.shader_neck_vtx.astype(np.float32)
        self.track_vtx             = self.track_vtx.astype(np.float32)
        self.board_col_flash       = self.board_col_flash.astype(np.float32)
        self.bpm_vtx               = self.bpm_vtx.astype(np.float32)
        self.board_tex_static      = self.board_tex_static.astype(np.float32)
        self.board_tex             = self.board_tex.astype(np.float32)
        self.board_scroll_vtx      = self.board_scroll_vtx.astype(np.float32)

        self.neckType = playerObj.neckType
        if self.neckType == 0:
            self.neck = engine.mainMenu.chosenNeck
        else:
            self.neck = str(playerObj.neck)
        playerObj  = None
        #Get theme
        themename = self.engine.data.themeLabel
        #now theme determination logic is only in data.py:
        self.theme = self.engine.data.theme

        self.incomingNeckMode = self.engine.config.get("game", "incoming_neck_mode")

        #blazingamer
        self.failcount = 0
        self.failcount2 = False
        self.spcount = 0
        self.spcount2 = 0
        self.bgcount = 0
        self.fourXcount = 0
        self.ovrneckoverlay = self.engine.config.get("fretboard", "ovrneckoverlay")
        self.ocount = 0

        self.currentPeriod  = 60000.0 / self.instrument.currentBpm
        self.lastBpmChange  = -1.0
        self.baseBeat       = 0.0

        #myfingershurt:
        self.bassGrooveNeckMode = self.engine.config.get("game", "bass_groove_neck")
        self.guitarSoloNeckMode = self.engine.config.get("game", "guitar_solo_neck")
        self.fourxNeckMode = self.engine.config.get("game", "4x_neck")


        self.useMidiSoloMarkers = False
        self.markSolos = 0

        neckFind = True
        themeNeckPath = os.path.join(self.engine.resource.fileName("themes", themename, "necks"))
        if self.neckType == 1 and os.path.exists(themeNeckPath):
            themeNeck = []
            neckfiles = [ f for f in os.listdir(themeNeckPath) if os.path.isfile(os.path.join(themeNeckPath, f)) ]
            neckfiles.sort()
            for i in neckfiles:
                themeNeck.append(str(i))
            if len(themeNeck) > 0:
                i = random.randint(0,len(themeNeck)-1)
                if engine.loadImgDrawing(self, "neckDrawing", os.path.join("themes", themename, "necks", themeNeck[i]), textureSize = (256, 256)):
                    neckFind = False
                    Log.debug("Random theme neck chosen: " + themeNeck[i])
                else:
                    Log.error("Unable to load theme neck: " + themeNeck[i])
                    # fall back to defaultneck
                    self.neck = "defaultneck"
        if neckFind:
            # evilynux - Fixed random neck -- MFH: further fixing random neck
            if self.neck == "0" or self.neck == "Neck_0" or self.neck == "randomneck":
                self.neck = []
                # evilynux - improved loading logic to support arbitrary filenames
                path = self.engine.resource.fileName("necks")
                neckfiles = [ f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) ]
                neckfiles.sort()
                for i in neckfiles:
                    # evilynux - Special cases, ignore these...
                    if( os.path.splitext(i)[0] == "randomneck" or os.path.splitext(i)[0] == "overdriveneck" ):
                        continue
                    else:
                        self.neck.append(str(i)[:-4]) # evilynux - filename w/o extension

                i = random.randint(0,len(self.neck)-1)
                if engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks",self.neck[i]+".png"),  textureSize = (256, 256)):
                    Log.debug("Random neck chosen: " + self.neck[i])
                else:
                    Log.error("Unable to load neck: " + self.neck[i])
                    self.neck = "defaultneck"
                    engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks",self.neck+".png"),  textureSize = (256, 256))
            else:
                # evilynux - first assume the self.neck contains the full filename
                if not engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks",self.neck+".png"),  textureSize = (256, 256)):
                    if not engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks","Neck_"+self.neck+".png"),  textureSize = (256, 256)):
                        engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks","defaultneck.png"),  textureSize = (256, 256))

        #blazingamer:
        #this helps me clean up the code a bit
        #what it does is if you're using drums or bass
        #it checks that directory first, if it doesn't
        #exist, then it goes back to the default directory

        if self.isDrum:
            self.extension = "drums"
        elif self.isBassGuitar:
            self.extension = "bass"
        else:
            self.extension = None

        themepath = os.path.join("themes", themename, "board")

        def loadImage(name, file):
            if self.extension:
                if not engine.loadImgDrawing(self, name, os.path.join(themepath, self.extension, file)):
                    engine.loadImgDrawing(self, name, os.path.join(themepath, file))
            else:
                engine.loadImgDrawing(self, name, os.path.join(themepath, file))

        loadImage("sideBars",       "side_bars.png")
        loadImage("oSideBars",      "overdrive_side_bars.png")
        loadImage("oSoloSideBars",  "overdrive_solo_side_bars.png")
        loadImage("failSideBars",   "fail_side_bars.png")
        loadImage("soloSideBars",   "solo_side_bars.png")
        loadImage("oCenterLines",   "overdrive_center_lines.png")
        loadImage("centerLines",    "center_lines.png")
        loadImage("oNeck",          "overdriveneck.png")
        loadImage("oFlash",         "overdrive_string_flash.png")
        loadImage("bpm_halfbeat",   "bpm_halfbeat.png")
        loadImage("bpm_beat",       "bpm_beat.png")
        loadImage("bpm_measure",    "bpm_measure.png")
        loadImage("failNeck",       "failneck.png")

        if not self.failNeck:
            engine.loadImgDrawing(self, "failNeck", os.path.join("failneck.png"))

        if self.ovrneckoverlay:
            loadImage("oNeckovr", "overdriveneckovr.png")

        #myfingershurt: Bass Groove neck:
        self.bassGrooveNeck = None

        if self.isBassGuitar and self.bassGrooveNeckMode > 0:
            if self.bassGrooveNeckMode == 2:  #overlay neck
                engine.loadImgDrawing(self, "bassGrooveNeck", os.path.join(themepath, "bass", "bassgrooveneckovr.png"))
            if self.bassGrooveNeckMode == 1 or not self.bassGrooveNeck:  #replace neck
                engine.loadImgDrawing(self, "bassGrooveNeck", os.path.join(themepath, "bass", "bassgrooveneck.png"))

        #myfingershurt: Guitar Solo neck:
        self.soloNeck = None
        if not self.isVocal:
            if self.guitarSoloNeckMode > 0:
                if self.guitarSoloNeckMode == 1 or not engine.loadImgDrawing(self, "soloNeck", os.path.join(themepath, "soloneckovr.png")):  #replace neck
                    loadImage("soloNeck", "soloneck.png")
                elif self.guitarSoloNeckMode == 2 or not engine.loadImgDrawing(self, "soloNeck", os.path.join(themepath, "soloneck.png")):  #overlay neck
                    loadImage("soloNeck", "soloneckovr.png")

        self.fourMultiNeck = None
        if not self.isBassGuitar and self.fourxNeckMode > 0:
            if self.fourxNeckMode == 1:  #replace neck
                engine.loadImgDrawing(self, "fourMultiNeck", os.path.join(themepath, "fourmultineck.png"))
            if self.fourxNeckMode == 2:  #overlay neck
                engine.loadImgDrawing(self, "fourMultiNeck", os.path.join(themepath, "fourmultineckovr.png"))

        self.isFailing             = False
        self.canGuitarSolo         = self.instrument.canGuitarSolo
        self.guitarSolo            = False
        self.scoreMultiplier       = 1
        self.overdriveFlashCounts  = self.indexFps/4   #how many cycles to display the oFlash: self.indexFps/2 = 1/2 second
        self.overdriveFlashCount   = self.overdriveFlashCounts
        self.ocount                = 0
        self.paused                = False
Пример #38
0
    def __init__(self, engine, instrument, playerObj):

        self.engine = engine
        self.player = instrument.player
        self.instrument = instrument

        self.isDrum = self.instrument.isDrum
        self.isBassGuitar = self.instrument.isBassGuitar
        self.isVocal = self.instrument.isVocal

        self.oNeckovr = None  #MFH - needs to be here to prevent crashes!

        self.staticStrings = self.engine.config.get("performance",
                                                    "static_strings")

        self.indexFps = self.engine.config.get("video", "fps")  #QQstarS

        self.neckAlpha = []  # necks transparency
        self.neckAlpha.append(self.engine.config.get(
            "game", "necks_alpha"))  # all necks
        self.neckAlpha.append(
            self.neckAlpha[0] *
            self.engine.config.get("game", "neck_alpha"))  # normal neck
        self.neckAlpha.append(
            self.neckAlpha[0] *
            self.engine.config.get("game", "solo_neck_alpha"))  # solo neck
        self.neckAlpha.append(self.neckAlpha[0] * self.engine.config.get(
            "game", "bg_neck_alpha"))  # bass groove neck
        self.neckAlpha.append(self.neckAlpha[0] * self.engine.config.get(
            "game", "overlay_neck_alpha"))  # overlay neck
        self.neckAlpha.append(
            self.neckAlpha[0] *
            self.engine.config.get("game", "fail_neck_alpha"))  # fail neck
        self.neckAlpha.append(
            self.neckAlpha[0] *
            self.engine.config.get("game", "4x_neck_alpha"))  # 4x multi neck

        self.boardWidth = self.engine.theme.neckWidth
        self.boardLength = self.engine.theme.neckLength
        self.shaderSolocolor = self.engine.theme.shaderSolocolor

        self.boardFadeAmount = self.engine.theme.boardFade

        self.doNecksRender = self.engine.theme.doNecksRender

        #death_au: fixed neck size

        if self.isDrum and self.engine.config.get("game", "large_drum_neck"):
            self.boardWidth = 4.0
            self.boardLength = 12.0

        self.beatsPerBoard = 5.0
        self.beatsPerUnit = self.beatsPerBoard / self.boardLength

        color = (1, 1, 1)
        self.vis = 1

        size = 0

        # evilynux - Neck color
        self.board_col = np.array([[color[0], color[1], color[2], 0],
                                   [color[0], color[1], color[2], 0],
                                   [color[0], color[1], color[2], self.vis],
                                   [color[0], color[1], color[2], self.vis],
                                   [color[0], color[1], color[2], self.vis],
                                   [color[0], color[1], color[2], self.vis],
                                   [color[0], color[1], color[2], 0],
                                   [color[0], color[1], color[2], 0]],
                                  dtype=np.float32)

        w = self.boardWidth
        l = self.boardLength

        # evilynux - Neck vertices
        self.board_vtx = np.array(
            [[-w / 2, 0, -2], [w / 2, 0, -2], [-w / 2, 0, -1], [w / 2, 0, -1],
             [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l],
             [w / 2, 0, l]],
            dtype=np.float32)

        self.shader_neck_vtx = np.array([[-w / 2, 0.1, -2], [w / 2, 0.1, -2],
                                         [-w / 2, 0.1, l], [w / 2, 0.1, l]],
                                        dtype=np.float32)

        self.track_vtx = np.array(
            [[-w / 2, 0, -2 + size], [w / 2, 0, -2 + size],
             [-w / 2, 0, -1 + size], [w / 2, 0, -1 + size], [
                 -w / 2, 0, l * .7
             ], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]],
            dtype=np.float32)

        self.soloLightVtx1 = np.array(
            [[w / 2 - 1.0, 0.4, -2], [w / 2 + 1.0, 0.4, -2],
             [w / 2 - 1.0, 0.4, l], [w / 2 + 1.0, 0.4, l]],
            dtype=np.float32)

        self.soloLightVtx2 = np.array(
            [[-w / 2 + 1.0, 0.4, -2], [-w / 2 - 1.0, 0.4, -2],
             [-w / 2 + 1.0, 0.4, l], [-w / 2 - 1.0, 0.4, l]],
            dtype=np.float32)

        self.bpm_vtx = np.array([[-(w / 2), 0, 0], [-(w / 2), 0, 0],
                                 [(w / 2), 0, 0], [(w / 2), 0, 0]],
                                dtype=np.float32)

        self.board_scroll_vtx = np.array(
            [[-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0],
             [-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0]],
            dtype=np.float32)

        # evilynux - Sidebars vertices
        w += 0.15
        self.sidebars_vtx = np.array(
            [[-w / 2, 0, -2], [w / 2, 0, -2], [-w / 2, 0, -1], [w / 2, 0, -1],
             [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l],
             [w / 2, 0, l]],
            dtype=np.float32)

        self.sidebars_scroll_vtx = np.array(
            [[-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0],
             [-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0]],
            dtype=np.float32)

        self.bpm_tex = np.array(
            [[0.0, 1.0], [0.0, 0.0], [1.0, 1.0], [1.0, 0.0]], dtype=np.float32)

        self.bpm_col = np.array([[1, 1, 1, self.vis], [1, 1, 1, self.vis],
                                 [1, 1, 1, self.vis], [1, 1, 1, self.vis]],
                                dtype=np.float32)

        self.board_col_flash = np.array(
            [[color[0], color[1], color[2], 0],
             [color[0], color[1], color[2], 0],
             [color[0], color[1], color[2], self.vis],
             [color[0], color[1], color[2], self.vis],
             [color[0], color[1], color[2], self.vis],
             [color[0], color[1], color[2], self.vis],
             [color[0], color[1], color[2], 0],
             [color[0], color[1], color[2], 0]],
            dtype=np.float32)

        self.board_tex_static = np.array(
            [[0.0, self.project(-2 * self.beatsPerUnit)],
             [1.0, self.project(-2 * self.beatsPerUnit)],
             [0.0, self.project(-1 * self.beatsPerUnit)],
             [1.0, self.project(-1 * self.beatsPerUnit)],
             [0.0, self.project(l * self.beatsPerUnit * .7)],
             [1.0, self.project(l * self.beatsPerUnit * .7)],
             [0.0, self.project(l * self.beatsPerUnit)],
             [1.0, self.project(l * self.beatsPerUnit)]],
            dtype=np.float32)

        self.board_tex = np.array([[0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0],
                                   [0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0]],
                                  dtype=np.float32)

        # evilynux - Just in case the type has became double, convert to float32
        self.board_col = self.board_col.astype(np.float32)
        self.board_vtx = self.board_vtx.astype(np.float32)
        self.sidebars_vtx = self.sidebars_vtx.astype(np.float32)
        self.sidebars_scroll_vtx = self.sidebars_scroll_vtx.astype(np.float32)
        self.bpm_tex = self.bpm_tex.astype(np.float32)
        self.bpm_col = self.bpm_col.astype(np.float32)
        self.soloLightVtx1 = self.soloLightVtx1.astype(np.float32)
        self.soloLightVtx2 = self.soloLightVtx2.astype(np.float32)
        self.shader_neck_vtx = self.shader_neck_vtx.astype(np.float32)
        self.track_vtx = self.track_vtx.astype(np.float32)
        self.board_col_flash = self.board_col_flash.astype(np.float32)
        self.bpm_vtx = self.bpm_vtx.astype(np.float32)
        self.board_tex_static = self.board_tex_static.astype(np.float32)
        self.board_tex = self.board_tex.astype(np.float32)
        self.board_scroll_vtx = self.board_scroll_vtx.astype(np.float32)

        self.neckType = playerObj.neckType
        if self.neckType == 0:
            self.neck = engine.mainMenu.chosenNeck
        else:
            self.neck = str(playerObj.neck)
        playerObj = None
        #Get theme
        themename = self.engine.data.themeLabel
        #now theme determination logic is only in data.py:
        self.theme = self.engine.data.theme

        self.incomingNeckMode = self.engine.config.get("game",
                                                       "incoming_neck_mode")

        #blazingamer
        self.failcount = 0
        self.failcount2 = False
        self.spcount = 0
        self.spcount2 = 0
        self.bgcount = 0
        self.fourXcount = 0
        self.ovrneckoverlay = self.engine.config.get("fretboard",
                                                     "ovrneckoverlay")
        self.ocount = 0

        self.currentPeriod = 60000.0 / self.instrument.currentBpm
        self.lastBpmChange = -1.0
        self.baseBeat = 0.0

        #myfingershurt:
        self.bassGrooveNeckMode = self.engine.config.get(
            "game", "bass_groove_neck")
        self.guitarSoloNeckMode = self.engine.config.get(
            "game", "guitar_solo_neck")
        self.fourxNeckMode = self.engine.config.get("game", "4x_neck")

        self.useMidiSoloMarkers = False
        self.markSolos = 0

        neckFind = True
        themeNeckPath = os.path.join(
            self.engine.resource.fileName("themes", themename, "necks"))
        if self.neckType == 1 and os.path.exists(themeNeckPath):
            themeNeck = []
            neckfiles = [
                f for f in os.listdir(themeNeckPath)
                if os.path.isfile(os.path.join(themeNeckPath, f))
            ]
            neckfiles.sort()
            for i in neckfiles:
                themeNeck.append(str(i))
            if len(themeNeck) > 0:
                i = random.randint(0, len(themeNeck) - 1)
                if engine.loadImgDrawing(self,
                                         "neckDrawing",
                                         os.path.join("themes", themename,
                                                      "necks", themeNeck[i]),
                                         textureSize=(256, 256)):
                    neckFind = False
                    Log.debug("Random theme neck chosen: " + themeNeck[i])
                else:
                    Log.error("Unable to load theme neck: " + themeNeck[i])
                    # fall back to defaultneck
                    self.neck = "defaultneck"
        if neckFind:
            # evilynux - Fixed random neck -- MFH: further fixing random neck
            if self.neck == "0" or self.neck == "Neck_0" or self.neck == "randomneck":
                self.neck = []
                # evilynux - improved loading logic to support arbitrary filenames
                path = self.engine.resource.fileName("necks")
                neckfiles = [
                    f for f in os.listdir(path)
                    if os.path.isfile(os.path.join(path, f))
                ]
                neckfiles.sort()
                for i in neckfiles:
                    # evilynux - Special cases, ignore these...
                    if (os.path.splitext(i)[0] == "randomneck"
                            or os.path.splitext(i)[0] == "overdriveneck"):
                        continue
                    else:
                        self.neck.append(
                            str(i)[:-4])  # evilynux - filename w/o extension

                i = random.randint(0, len(self.neck) - 1)
                if engine.loadImgDrawing(self,
                                         "neckDrawing",
                                         os.path.join("necks",
                                                      self.neck[i] + ".png"),
                                         textureSize=(256, 256)):
                    Log.debug("Random neck chosen: " + self.neck[i])
                else:
                    Log.error("Unable to load neck: " + self.neck[i])
                    self.neck = "defaultneck"
                    engine.loadImgDrawing(self,
                                          "neckDrawing",
                                          os.path.join("necks",
                                                       self.neck + ".png"),
                                          textureSize=(256, 256))
            else:
                # evilynux - first assume the self.neck contains the full filename
                if not engine.loadImgDrawing(self,
                                             "neckDrawing",
                                             os.path.join(
                                                 "necks", self.neck + ".png"),
                                             textureSize=(256, 256)):
                    if not engine.loadImgDrawing(
                            self,
                            "neckDrawing",
                            os.path.join("necks",
                                         "Neck_" + self.neck + ".png"),
                            textureSize=(256, 256)):
                        engine.loadImgDrawing(self,
                                              "neckDrawing",
                                              os.path.join(
                                                  "necks", "defaultneck.png"),
                                              textureSize=(256, 256))

        #blazingamer:
        #this helps me clean up the code a bit
        #what it does is if you're using drums or bass
        #it checks that directory first, if it doesn't
        #exist, then it goes back to the default directory

        if self.isDrum:
            self.extension = "drums"
        elif self.isBassGuitar:
            self.extension = "bass"
        else:
            self.extension = None

        themepath = os.path.join("themes", themename, "board")

        def loadImage(name, file):
            if self.extension:
                if not engine.loadImgDrawing(
                        self, name,
                        os.path.join(themepath, self.extension, file)):
                    engine.loadImgDrawing(self, name,
                                          os.path.join(themepath, file))
            else:
                engine.loadImgDrawing(self, name,
                                      os.path.join(themepath, file))

        loadImage("sideBars", "side_bars.png")
        loadImage("oSideBars", "overdrive_side_bars.png")
        loadImage("oSoloSideBars", "overdrive_solo_side_bars.png")
        loadImage("failSideBars", "fail_side_bars.png")
        loadImage("soloSideBars", "solo_side_bars.png")
        loadImage("oCenterLines", "overdrive_center_lines.png")
        loadImage("centerLines", "center_lines.png")
        loadImage("oNeck", "overdriveneck.png")
        loadImage("oFlash", "overdrive_string_flash.png")
        loadImage("bpm_halfbeat", "bpm_halfbeat.png")
        loadImage("bpm_beat", "bpm_beat.png")
        loadImage("bpm_measure", "bpm_measure.png")
        loadImage("failNeck", "failneck.png")

        if not self.failNeck:
            engine.loadImgDrawing(self, "failNeck",
                                  os.path.join("failneck.png"))

        if self.ovrneckoverlay:
            loadImage("oNeckovr", "overdriveneckovr.png")

        #myfingershurt: Bass Groove neck:
        self.bassGrooveNeck = None

        if self.isBassGuitar and self.bassGrooveNeckMode > 0:
            if self.bassGrooveNeckMode == 2:  #overlay neck
                engine.loadImgDrawing(
                    self, "bassGrooveNeck",
                    os.path.join(themepath, "bass", "bassgrooveneckovr.png"))
            if self.bassGrooveNeckMode == 1 or not self.bassGrooveNeck:  #replace neck
                engine.loadImgDrawing(
                    self, "bassGrooveNeck",
                    os.path.join(themepath, "bass", "bassgrooveneck.png"))

        #myfingershurt: Guitar Solo neck:
        self.soloNeck = None
        if not self.isVocal:
            if self.guitarSoloNeckMode > 0:
                if self.guitarSoloNeckMode == 1 or not engine.loadImgDrawing(
                        self, "soloNeck",
                        os.path.join(themepath,
                                     "soloneckovr.png")):  #replace neck
                    loadImage("soloNeck", "soloneck.png")
                elif self.guitarSoloNeckMode == 2 or not engine.loadImgDrawing(
                        self, "soloNeck",
                        os.path.join(themepath,
                                     "soloneck.png")):  #overlay neck
                    loadImage("soloNeck", "soloneckovr.png")

        self.fourMultiNeck = None
        if not self.isBassGuitar and self.fourxNeckMode > 0:
            if self.fourxNeckMode == 1:  #replace neck
                engine.loadImgDrawing(
                    self, "fourMultiNeck",
                    os.path.join(themepath, "fourmultineck.png"))
            if self.fourxNeckMode == 2:  #overlay neck
                engine.loadImgDrawing(
                    self, "fourMultiNeck",
                    os.path.join(themepath, "fourmultineckovr.png"))

        self.isFailing = False
        self.canGuitarSolo = self.instrument.canGuitarSolo
        self.guitarSolo = False
        self.scoreMultiplier = 1
        self.overdriveFlashCounts = self.indexFps / 4  #how many cycles to display the oFlash: self.indexFps/2 = 1/2 second
        self.overdriveFlashCount = self.overdriveFlashCounts
        self.ocount = 0
        self.paused = False
Пример #39
0
def grab_proc(url, rate, camera_id):
    '''
    抓图处理进程
    :param url:
    :param rate:
    :param camera_id:
    :param logger:
    :return:
    '''
    logger = Log('grab-proc' + str(os.getpid()), 'logs/')
    logger.info('初始化seaweedfs')
    master = WeedClient(config.get('weed', 'host'),
                        config.getint('weed', 'port'))
    logger.info('初始化Kafka')
    kafka = Kafka(bootstrap_servers=config.get('kafka', 'boot_servers'))
    topic = config.get('camera', 'topic')
    face_tool = Face(config.get('api', 'face_server'))
    detect_count = 0  # 用于detect频次计数
    frame_internal = track_internal * rate
    trackable = False

    # 启动抓图线程
    q = queue.Queue(maxsize=100)
    t = GrabJob(q, camera_id, url, rate,
                Log('grab-proc' + str(os.getpid()) + '-thread', 'logs/'),
                config)
    t.start()

    while True:
        try:
            img = q.get(timeout=20)
            if detect_count % frame_internal == 0:
                detect_count = 0
                b64 = mat_to_base64(img)
                t1 = time.time()
                detect_result = face_tool.detect(b64)
                logger.info('detect cost time: ',
                            round((time.time() - t1) * 1000), 'ms')
                if detect_result['error_message'] != '601':
                    logger.warning('verifier detector error, error_message:',
                                   detect_result['error_message'])
                    continue
                tracker = cv2.MultiTracker_create()
                latest_imgs = []
                timestamp = round(time.time())
                for face_num in range(detect_result['detect_nums']):
                    tmp = detect_result['detect'][face_num]
                    bbox = (tmp['left'], tmp['top'], tmp['width'],
                            tmp['height'])
                    tracker.add(cv2.TrackerKCF_create(), img, bbox)
                    face_b64 = face_tool.crop(bbox[0], bbox[1], bbox[2],
                                              bbox[3], b64, True)
                    latest_img = {
                        'image_base64': face_b64,
                        'bbox': bbox,
                        'landmark':
                        detect_result['detect'][face_num]['landmark'],
                        'time': timestamp
                    }
                    # 增加人脸质量过滤
                    if tmp['sideFace'] == 0 and tmp[
                            'quality'] == 1 and tmp['score'] > 0.95:
                        latest_imgs.append(latest_img)
                if len(latest_imgs) > 0:
                    trackable = True
                else:
                    trackable = False

            elif trackable:
                # 开始追踪
                ok, bboxs = tracker.update(img)
                if ok and detect_count < frame_internal - 1:
                    if detect_count % 10 == 0:
                        logger.info('tracking..., detect_count = %d' %
                                    detect_count)
                    detect_count += 1
                    continue
                else:
                    # 取detect到的人脸
                    logger.info('tracking over! detect_count = %d' %
                                detect_count)
                    for latest in latest_imgs:
                        logger.info([camera_id], 'track person success!')
                        face_b64 = latest['image_base64']

                        # save img to seaweed fs
                        logger.info([camera_id],
                                    'save grabbed detect_result to seaweed fs')
                        assign = master.assign()
                        logger.info([camera_id], 'assign result:', assign)

                        ret = master.upload(assign['url'], assign['fid'],
                                            base64_to_bytes(face_b64),
                                            assign['fid'] + '.jpg')
                        logger.info([camera_id], 'upload result:', ret)

                        # send to Kafka
                        url = 'http' + ':' + '//' + assign[
                            'url'] + '/' + assign['fid']
                        logger.info('[', camera_id, ']', 'img url:', url)
                        msg = json.dumps({
                            'url': url,
                            'time': latest['time'],
                            'camera_id': camera_id,
                            'landmark': latest['landmark']
                        })
                        logger.info([camera_id], 'send to kafka: ', msg)
                        kafka.send(topic, msg)
                    # 再次进入detect
                    detect_count = 0
                    trackable = False
                    logger.info('restart detection')
            else:
                if detect_count % 10 == 0:
                    logger.info('detect 0 detect_result, do not track',
                                'detect count= ', detect_count)
                detect_count += 1
                continue
        except queue.Empty:
            logger.error('grab queue empty error, exit')
            break
        detect_count += 1
    logger.info('抓图进程终止')
Пример #40
0
    def __init__(self):

        self.logClassInits = Config.get("game", "log_class_inits")
        if self.logClassInits == 1:
            Log.debug("Input class init (Input.py)...")

        Task.__init__(self)
        self.mouse                = pygame.mouse
        self.mouseListeners       = []
        self.keyListeners         = []
        self.systemListeners      = []
        self.priorityKeyListeners = []
        self.controls             = Controls()
        self.activeGameControls   = []
        self.p2Nav                = self.controls.p2Nav
        self.type1                = self.controls.type[0]
        self.keyCheckerMode       = Config.get("game","key_checker_mode")
        self.disableKeyRepeat()

        self.gameGuitars = 0
        self.gameDrums   = 0
        self.gameMics    = 0
        self.gameBots    = 0

        # Initialize joysticks
        pygame.joystick.init()
        self.joystickNames = {}
        self.joystickAxes  = {}
        self.joystickHats  = {}

        self.joysticks = [pygame.joystick.Joystick(id) for id in range(pygame.joystick.get_count())]
        for j in self.joysticks:
            j.init()
            self.joystickNames[j.get_id()] = j.get_name()
            self.joystickAxes[j.get_id()]  = [0] * j.get_numaxes()
            self.joystickHats[j.get_id()]  = [(0, 0)] * j.get_numhats()
        Log.debug("%d joysticks found." % len(self.joysticks))

        # Enable music events
        Audio.Music.setEndEvent(MusicFinished)
        #Audio.Music.setEndEvent()   #MFH - no event required?

        # Custom key names
        self.getSystemKeyName = pygame.key.name
        pygame.key.name       = self.getKeyName

        self.midi = []
        if haveMidi:
            pygame.midi.init()
            for i in range(pygame.midi.get_count()):
                interface, name, is_input, is_output, is_opened = pygame.midi.get_device_info(i)
                Log.debug("Found MIDI device: %s on %s" % (name, interface))
                if not is_input:
                    Log.debug("MIDI device is not an input device.")
                    continue
                try:
                    self.midi.append(pygame.midi.Input(i))
                    Log.debug("Device opened as device number %d." % len(self.midi))
                except pygame.midi.MidiException:
                    Log.error("Error opening device for input.")
            if len(self.midi) == 0:
                Log.debug("No MIDI input ports found.")
        else:
            Log.notice("MIDI input support is not available; install at least pygame 1.9 to get it.")