Ejemplo n.º 1
0
    def a(self, img, otherImage):
        if img.mode != otherImage.mode or img.size != otherImage.size:
            LOG.warning("Image mode or size not matching")
            return None
        new = Image.new(img.mode, img.size)
        w, h = new.size
        for x in range(0, w):
            for y in range(0, h):
                value = img.getpixel((x, y))
                otherValue = otherImage.getpixel((x, y))
                newValue = value + otherValue

                new.putpixel((x, y), newValue)

        return new
Ejemplo n.º 2
0
    def add(self, img, otherImage):
        if img.mode != otherImage.mode or img.size != otherImage.size:
            LOG.warning("Image mode or size not matching")
            return None
        new = Image.new(img.mode, img.size)
        w, h = new.size
        for x in range(0, w):
            for y in range(0, h):
                value = img.getpixel((x, y))
                otherValue = otherImage.getpixel((x, y))
                newValue = [0] * len(value)
                for i in range(0, len(value)):
                    newValue[i] = value[i] + otherValue[i]

                new.putpixel((x, y), tuple(newValue))

        return new
Ejemplo n.º 3
0
    def multiply(self, rgb, mask):
        if rgb.size != mask.size:
            LOG.warning("Image mode or size not matching")
            return None
        new = Image.new(rgb.mode, rgb.size)
        m = mask.convert("L")
        w, h = new.size
        for x in range(0, w):
            for y in range(0, h):
                value = rgb.getpixel((x, y))
                if not isinstance(value, tuple):
                    value = (value, )
                value = tuple(
                    int(i * (m.getpixel((x, y)) / 255.0)) for i in value)
                new.putpixel((x, y), value)

        return new
Ejemplo n.º 4
0
 def save(self, image):
     """VERY HACKY, ONLY USE TO DEBUG!"""
     LOG.warning("Using hacky save function for lazy debugging.")
     try:
         os.mkdir(
             os.path.join(Vars.REALPATH, "image_testing",
                          format(self.prefix)))
     except Exception as e:
         pass
     frame = inspect.currentframe()
     name = "image"
     for k, v in frame.f_back.f_locals.iteritems():
         if v is image:
             name = k
             break
     image.save(
         os.path.join(Vars.REALPATH, "image_testing", format(self.prefix),
                      name + ".png"))
Ejemplo n.º 5
0
 def processSample(self, images):
     if len(images) != 2:
         LOG.warning("Wrong number of samples. Maybe you have too little?")
         return Image.new("RGBA", self.size)
     sample1 = images[0]
     s1_creator = CircleCreator([sample1], None, prefix=self.prefix)
     sample2 = images[1]
     s2_creator = CircleCreator([sample2], None, prefix=self.prefix)
     sample1 = s1_creator.createTexture()
     sample2 = s2_creator.createTexture()
     random = Image.open(os.path.join(Vars.REALPATH, "random.png"))
     rand_invert = Image.open(
         os.path.join(Vars.REALPATH, "random_invert.png"))
     s_w, s_h = sample1.size
     t1 = ImageChops.multiply(sample1, random.convert("RGBA"))
     t2 = ImageChops.multiply(sample2, rand_invert.convert("RGBA"))
     self.texture = ImageChops.add(t1, t2)
     return self.texture
Ejemplo n.º 6
0
def createNewItemWithTextures(back1, back2):
    LOG.enabled = False
    clothing = ClothingItem()
    LOG.debug("Created new clothing item: {0}".format(clothing.id))
    img1 = Image.open(back1)
    img2 = Image.open(back2)
    LOG.debug("Opened images.")
    clothing.addImage(img1, "back1")
    clothing.addImage(img2, "back2")
    LOG.debug("Added images.")
    clothing.createFinalTexture()
    LOG.enabled = True
    return clothing.id
Ejemplo n.º 7
0
def newWithTexturesFromCWD(cat):
    #Hack so this function can be called from any thread
    tempDB = Vars.DB
    Vars.DB = DatabaseInterface.Database()
    clothing = ClothingItem(category=cat)
    LOG.debug("Created new clothing item: {0}".format(clothing.id))
    img1 = Image.open("back1.png")
    img2 = Image.open("back2.png")
    LOG.debug("Opened images.")
    clothing.addImage(img1, "back1")
    clothing.addImage(img2, "back2")
    LOG.debug("Added images.")
    clothing.createFinalTexture()
    Vars.DB = tempDB
    return clothing.id
Ejemplo n.º 8
0
def testingRecognizer(clothes):
    template = TemplateRecgonizer()
    match = template.findMatch("recog.png", clothes)
    LOG.debug("Found Match with ID: {0}, confidence: {1}".format(
        match[1].id, match[0]))
Ejemplo n.º 9
0
    def createTexture(self):
        if len(self.samples) == 0:
            LOG.warning("Not enough samples")
            return Image.new("RGBA", self.size)
        self.texture = Image.new("RGBA", self.size)
        count = 0
        images = []
        for sample in self.samples:
            img = None
            if isinstance(sample, Image.Image):
                img = sample
            else:
                img = Image.open(sample)
            count += 1
            images.append(img)
            if count >= self.num_per_processing:
                count = 0
                self.processSample(images)
                images = []

        if self.printed_texture:
            prnt = Image.open(self.printed_texture)
            prnt = prnt.crop(
                (33, 22, 523, 534)).transpose(Image.FLIP_LEFT_RIGHT)
            new = Image.new("RGB", (512, 512))
            new.paste(prnt, (11, 0))
            new.save("print_tmp.png")
            sample = self.samples[0]
            s_img = Image.open(sample)
            img1 = cv2.imread("print_tmp.png")
            img2 = cv2.imread(sample)
            bright = self.brightness_alt(s_img.convert("RGB"))
            is_white = False
            print(bright)
            if bright > 255 / 2:
                is_white = True
            if is_white:
                result = cv2.subtract(img2, img1)
            else:
                result = cv2.subtract(img1, img2)
            cv2.imwrite("print_tmp.png", result)
            prnt = Image.open("print_tmp.png")

            prnt = ImageEnhance.Contrast(prnt).enhance(1.5)
            if is_white:
                prnt = ImageOps.invert(prnt)
                prnt = ImageEnhance.Brightness(prnt).enhance(1.25)
            else:
                prnt = ImageEnhance.Brightness(prnt).enhance(1.75)

            prnt.save("print_tmp.png")
            prnt.save("aaa.png")
            result = cv2.imread("print_tmp.png")
            img_bw = 255 * (cv2.cvtColor(result, cv2.COLOR_BGR2GRAY) >
                            5).astype('uint8')

            se1 = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))
            se2 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
            mask = cv2.morphologyEx(img_bw, cv2.MORPH_CLOSE, se1)
            mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, se2)

            mask = np.dstack([mask, mask, mask]) / 255
            out = result * mask
            cv2.imwrite("print_tmp.png", out)
            prnt = Image.open("print_tmp.png")
            self.save(prnt)
            prnt = prnt.convert("RGBA")
            w, h = prnt.size
            for y in range(0, h):
                for x in range(0, w):
                    r, g, b, a = prnt.getpixel((int(x), int(y)))
                    comb = (r + g + b) / 3.0
                    if comb < 10 and not is_white:
                        prnt.putpixel((int(x), int(y)), (0, 0, 0, 0))
                    if comb > 245 and is_white:
                        prnt.putpixel((int(x), int(y)), (0, 0, 0, 0))
            self.save(prnt)
            prnt = prnt.resize((460, 460), Image.ANTIALIAS).crop(
                (11, 0, 523, 534))
            self.texture.paste(prnt, (self.size[0] / 4, 110),
                               mask=prnt.split()[3])
            asdf = self.texture
            self.save(asdf)

        return self.texture
Ejemplo n.º 10
0
 def func_wrapper(*args, **kwargs):
     current_time = time.time()
     ret = func(*args, **kwargs)
     LOG.debug("Time taken to execute function {0}: {1} s".format(
         str(func.__name__), float(time.time() - current_time)))
     return ret